자기 상관의 "품질"을 평가하는 가장 좋은 방법은?


9

이것은 내 코골이 앱 의 사이드 트립입니다 .

나는 코골이 / 호흡과 "상관 관계가 있는지"확인하기 위해 오디오 신호의 자기 상관을 만들어내는 데 어려움을 겪었습니다. 간단한 알고리즘이 진행됩니다 (제로 요소로 1.0을 생성합니다. 이는 좋은 징조입니다). 자기 상관이 강한 지 여부를 결정하기 위해 결과를 평가하는 방법과 더 나아가 분리 방법을 사용하는 방법이 궁금합니다. 다양한 가능한 음원.

질문 # 1 : 자기 상관의 RMS (건너 뛰기 요소 0)가 "품질"메트릭만큼 우수합니까, 아니면 더 좋은 것이 있습니까?

정교하게하기 위해서 : 나는 단순히 높은 상관 관계가있는 신호와 덜 잘 연관된 신호를 구별하기위한 수치적인 방법 (차트에서 "보는 것")을 원합니다.

(나는 다른 질문이 무엇인지 알만큼 충분히 모른다.)

일부 초기 결과 : 어떤 경우에는 자기 상관 (RMS 또는 피크)이 코골이에 급격한 상승을 보여줍니다. 다른 경우에는 이러한 측정에서 전혀 명백한 움직임이 없으며 (이것은 두 반응을 갖는 두 개의 연속적인 코골이 일 수 있습니다), 고 소음 상황에서는 측정이 실제로 코골이 동안 약간 (약간) 떨어집니다.

업데이트-5 월 22 일 : 마침내이 문제를 좀 더 해결할 시간이있었습니다. (나는 문자 그대로 고통 스러운 또 다른 응용 프로그램에서 벗어났습니다 .) 나는 자기 상관의 출력을 FFT에 공급했으며 출력은 다소 흥미 롭습니다. 코골이 시작될 때 원점 근처에서 상당히 극적인 피크를 보여줍니다.

그래서 나는 어떻게 든이 피크를 양자화하는 문제에 직면 해있다. 이상하게도, 절대 크기 측면에서 가장 높은 피크는 다른 시간에 발생하지만 피크 대 산술 평균의 비율을 시도해 보았습니다. FFT의 "피크 니스"를 측정하는 좋은 방법은 무엇입니까? (그리고 제발 -이 일이 자신의 꼬리를 삼키는에 가까운 이미 :) 나는 그것의 FFT를 취할 필요가 있다는 말을하지 않습니다.)

또한 중간에 0 (정의 1.0 크기)으로 자동 상관 결과가 공급되는 것을 반영하면 FFT의 품질이 다소 향상 될 수 있습니다. 이것은 양쪽 끝에 "꼬리"를 넣습니다. 이것은 (아마도) 좋은 생각입니까? 미러 이미지를 똑바로 세워야합니까? (물론, 나는 당신이 말한 것에 관계없이 시도 할 것이지만, 세부 사항에 대한 힌트를 얻을 수 있다고 생각했습니다.)

편평함

내 테스트 사례는 대략 "잘 작동하는"범주와 "문제가있는 어린이"범주로 나눌 수 있습니다.

"잘 동작하는"테스트 사례의 경우 자기 상관의 FFT의 평탄도가 급격히 떨어지며 코골이 동안 최대 대 자기 상관의 비율이 증가합니다. 이 두 숫자의 비율 (피크 비율을 평탄 도로 나눈 값)은 특히 민감하여 호흡 / 코골이 진행되는 동안 5-10 배의 상승을 나타냅니다.

그러나 "문제가있는 어린이"의 경우 숫자는 정확히 반대 방향으로 향합니다. 평탄도는 실제로 50-100 % 증가하지만 피크 / 평균 비율은 약간 감소합니다.

이 두 범주의 차이점은 (대부분) 세 가지입니다.

  1. "문제가있는 어린이"의 소음 수준은 (보통) 높습니다
  2. "문제가있는 어린이"의 오디오 레벨은 (거의 항상) 낮습니다.
  3. "문제가있는 아이들"은 더 많은 호흡과 더 적은 코골이로 구성되는 경향이 있습니다.

어떤 아이디어?

업데이트-2012 년 5 월 25 일 : 승리 댄스를하는 것은 조금 조기이지만, 한 점에 대한 자기 상관을 반영하고 FFT를 취한 다음 스펙트럼 편평도를 만들면 결합 된 비율 체계가 크게 뛰어납니다. 여러 다른 환경. 자기 상관을 반영하면 FFT의 품질이 향상되는 것 같습니다.

그러나 반사 된 "신호"의 "DC 구성 요소"가 0이므로 FFT 결과는 항상 0이며이 점은 0을 포함하는 기하 평균을 깬다는 점입니다. 그러나 0 번째 요소를 건너 뛰는 것이 효과가있는 것 같습니다.

내가 얻는 결과는 코골이 / 호흡 자체를 식별하기에는 충분하지 않지만 상당히 민감한 "확인"인 것 같습니다. "점프"를 얻지 못하면 코골이 / 호흡이 아닐 수 있습니다.

나는 그것을 자세히 분석하지는 않았지만, 무슨 일이 일어나고 있는지는 호흡 / 코골이 발생하는 동안 휘파람 소리가 발생하고 휘파람이 감지되고 있다고 생각합니다.


상관 관계의 '강도'척도에 관한 한, 상관 관계를 수행하기 전에 두 신호의 상관 관계를 정규화하는 것이 필요합니다. 정규화 후 각 신호의 합은 1이어야합니다. 그러면 상관 피크는 항상 -1과 1 사이에 존재합니다. 이것이 당신의 힘입니다. 나머지 질문에 대해서는 잘 모르겠습니다. 아마도 약간 편집 할 수 있습니다.
Spacey

저는 자기 상관을 다루고 있습니다. 그래서 두 신호는 같고 동일하며 정의상 서로에 대해 "정규화 된"것입니다. "강도"는 자기 상관이 얼마나되는지를 의미합니다.
다니엘 R cks

나는 당신이 원하는 것을 이해하지 못하지만, 당신은 전체의 RMS 값이 아니라 자기 상관 피크의 최대 값을 측정하고 싶다고 생각합니다.
endolith

@endolith 나는 자기 상관 함수의 '피크 니스'측정에 대해 물어볼지도 모른다고 생각 합니다. 하나의 델타가있는 신호 (노이즈의 자기 상관)와 많은 피크 신호를 구별하기 위해? (고조파와 신호의 자기 상관). 아마도 스펙트럼 편평도 측정법을 사용할 수도 있습니다.
Spacey

스펙트럼 평탄도가 원하는 것 같습니다. Daniel : 신호가 백색 잡음과 어떻게 다른지 결정 하시겠습니까?
Emre

답변:


3

예비

이 데모는 MPTL 파일을 읽고 쓸 수 있는 MATLAB 패키지 audioread 로 더 쉽습니다 . 또는 예제의 MP3 파일을 수동으로 WAV로 변환 할 수 있습니다.

쉬운 경우

문제가있는 파일을 검사하기 전에 SoundCloud로 이동 하여 괜찮은 코를 골라 SNR이 높을 때 무엇을 기대해야하는지 알려 드리겠습니다. 이것은 52s 스테레오 44.1KHz MP3입니다. MATLAB 경로의 폴더로 다운로드하십시오 .

이제 스펙트로 그램 (8192 샘플 Hann 창을 선택 함)과 스펙트럼 편평도를 계산해 보겠습니다.

[snd1,fs1]=mp3read('snoring - brobar.mp3'); % use wavread if you converted manually
[s1,f,t,p1]=spectrogram(mean(snd1,2),hann(8192));
sf1=10*log10(geomean(p1)./mean(p1)); % spectral flatness
plot(linspace(0,length(snd1)/fs1,length(sf1)),sf1); axis tight

Brobar 코의 스펙트럼 편평도

스펙트럼 평탄도의 급격한 감소 (즉, 백색 잡음과의 편차)는 "코골이는 소리"를 외칩니다. 기준선 (중앙값)과의 편차를 보면 쉽게 분류 할 수 있습니다.

stem(linspace(0,length(snd1)/fs1,length(sf1)),median(sf1)-sf1>2*std(sf1)); axis tight

Brobar의 코의 분류 된 편평도

헤드 룸의 표준 편차가 두 개 이상있었습니다. 참고로 표준 변형 자체는 6.8487 입니다.

어려운 경우

이제 파일을 살펴 보자 . 10 분, 8KHz WAV 파일입니다. 레벨이 너무 낮아 신호 를 컴 팬딩 하는 데 도움이됩니다 .

[snd,fs]=wavread('recordedFile20120408010300_first_ten_minutes');
cmp=compand(snd,255,1);
wavwrite(cmp,'companded'); % used for listening purposes
[s,f,t,p]=spectrogram(snd,hann(8192));
sf=10*log10(geomean(p)./mean(p));
plot(linspace(0,600,length(sf)),sf);

시끄러운 파일의 스펙트럼 편평도

각 코골이와 함께 멋진 딥을 보십니까? 나도 그래. 좋은 봉우리는 어때? 그들은 코를 고르지 않고 주제의 소리가 움직입니다. 표준 편차는 실습 0.9388입니다

결론

스펙트럼 편평도에 의존하려면 더 깨끗한 신호를 획득해야합니다! 나는 단지 아무것도 들으려고 compand했다. 낮은 SNR이 감지되면 사용자가 전화기를 가까이 두거나 헤드셋과 함께 제공된 전화기와 같은 마이크를 사용하도록합니다.

좋은 소식은 문제가있는 경우에도 코골이를 감지 할 수 있다는 것 입니다 . 그러나이 질문은 코골이 감지에 관한 것이 아니기 때문에 여기서 멈추고 다른 질문 에서 그 방법을 설명합니다 .


이제 당신은 내가 반대하는 것에 대한 감각을 얻었습니다. 이 샘플은 내가 작업해야하는 샘플 중 "중간"품질이었습니다. 훨씬 더 나쁩니다. 그리고 기존 알고리즘으로 샘플을 잘 읽을 수 있습니다.
Daniel R Hicks

그것들은 어떤 알고리즘입니까?
Emre

요약 : 사운드는 초당 8 회 FFT를 통해 실행되며, 스펙트럼은 5 개의 주파수 대역으로 분할되고 각 대역의 전력 및 스펙트럼 차이가 계산 된 다음 결과가 나타나는 대역에 더 많은 가중치를 부여하는 방식으로 스코어링됩니다 적절한 비율로 변화합니다.
Daniel R Hicks

@ 귀하의 링크를 따라 가서 soundcloud 계정을 만들었지 만 그 코골이를 정확히 어떻게 다운로드했는지 알 수 없습니다. 옆이나 다른 곳에 다운로드 버튼이 없습니다.
Spacey

@Mohammad : 다운로드 링크를 제공했습니다.
Emre

1

자기 상관은 신호의 전력 스펙트럼 밀도의 역 DFT와 직접 관련됩니다. 그런 의미에서, DFT의 크기 제곱에 포함 된 모든 정보는 자기 상관 함수에도 포함됩니다.

그러나 자기 상관이 당신에게 말할 수있는 것은 고조파의 존재입니다. (중심점에서 다음 최고점까지의 거리). 코골이 VS 호흡은 근본적인 고조파가 다르기 때문에 '자동 상관 법'이 좋은 출발점이되어 피처 (이 경우 고조파)를 추출 할 수 있습니다.

따라서, 백색 잡음의 자기 상관은 델타 함수일 것이며, 중심 피크에서 2 차 피크 (또는 그 문제에 대한 다른 피크)를 갖지 않을 것입니다. 대조적으로, 신호에 고조파가있는 경우, 자기 상관 함수는 기본 고조파 존재에 상응하는 2 차 및 3 차 피크를 포함합니다. 기본 (중앙) 피크에서 보조 피크까지의 거리는 기본 주파수의주기입니다.

편집하다:

나는 자기 상관 함수가 델타와 얼마나 비슷한지를 측정하는 수치-숫자-수치라고 생각합니다. 대 자기 상관 함수 VS에는 많은 피크가있는 것처럼 보입니다. 이를 위해, 스펙트럼 편평도 의 측정 이 적용될 수 있거나,보다 일반적인 경우에 기하학적 평균의 산술 평균의 측정 일 수있다.


나는 자기 상관이 (임의의) 잡음과 (리듬) 신호를 더 잘 구별 할 수 있다는 인상을 받았다. 노이즈는 거의 0에 가깝다. DFT, OTOH는 노이즈를 노이즈, 즉 확산 스펙트럼으로 나타냅니다. 적어도 이것이 내가 이해하는 "이론"입니다.
다니엘 R cks

내 편집 내용을 참조하십시오.
Spacey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.