주석에서 논의했듯이 Goertzel 알고리즘 은 노이즈 톤을 감지하는 일반적인 방법입니다. 토론 후, 나는 그것이 당신이 무엇을 겪고 있는지 확신 할 수 없지만 ( 시작 시간 을 원합니다 ) Goertzel 알고리즘이 문제에 어떻게 적용될 수 있는지 혼란스러워 보였습니다. 여기.
고 르트 젤 알고리즘
Goertzel 알고리즘은 원하는 톤의 주파수를 알고 있고 ( 라고 부르는 경우 ) 적절한 감지 임계 값을 선택할 수 있도록 노이즈 레벨에 대한 합리적인 아이디어가있는 경우 사용하는 것이 좋습니다.fg
Goertzel 알고리즘은 항상 ONE FFT bin의 출력을 계산하는 것으로 생각할 수 있습니다.
y(n)=eȷ2πfgn∑k=0nx(n)e−ȷ2πfgk
여기서 는 원하는 주파수입니다.fg
Wikipedia 페이지에서 이를 계산하는 더 좋은 방법이 있습니다.
Scilab 을 구현하려는 시도 는 다음과 같습니다 .
function [y,resultr,resulti] = goertzel(f_goertzel,x)
realW = 2.0*cos(2.0*%pi*f_goertzel);
imagW = sin(2.0*%pi*f_goertzel);
d1 = 0;
d2 = 0;
for n = 0:length(x)-1,
y(n+1) = x(n+1) + realW*d1 - d2;
d2 = d1;
d1 = y(n+1);
resultr(n+1) = 0.5*realW*d1 - d2;
resulti(n+1) = imagW*d1;
end
endfunction
및 ϕ = 4.4318752 인 신호를 고려하십시오 .f=0.0239074ϕ=4.4318752
x=sin(2πfn+ϕ)+ϵ(n)
ϵ(n)
이 예에서, 톤은 인덱스 (1001)에서 신호의 1/3을 시작한다.
fg=f−0.001
fg=f
네 가지 흔적은 다음과 같습니다.
- xyfg=0.0229074
- resultr2+resulti2−−−−−−−−−−−−−−−√
- xyfg=0.0239074
- resultr2+resulti2−−−−−−−−−−−−−−−√
보시다시피, 우리가 관심있는 톤은 약 250에서 피크입니다. 감지 임계 값을이 값의 약 절반으로 설정하면 (125) 감지가 발생합니다 (제곱근 값은 125보다 큼). ) 톤 시작 후 약 인덱스 1450 --- 450 샘플.
이 임계 값 (125)은 다른 경우 (이 실행의 경우)에 감지를 유발하지 않지만 해당 출력의 최대 값은 115.24이므로 잘못된 감지를하지 않으면 임계 값을 너무 줄일 수 없습니다.
임계 값을 116으로 줄이면 인덱스 1401에서 실제 (이 실행의 경우) 탐지가 발생하지만 더 많은 잘못된 경보의 위험이 있습니다.