본문 바로가기
Audio Processing

오디오 필터(12)-IIR 노치 필터(Notch Filter, NF)

by gigasound 2021. 10. 29.


노치 필터

노치 필터(notch filter)는 대역 저지 필터(band rejection filter)의 하나로 매우 좁은 주파수 대역의 신호를 차단할 목적으로 사용합니다. 이 필터는 오디오 신호처리에서는 적응 필터에서 하울링 억제를 위해 사용됩니다. 또는 특정 주파수의 노이즈를 제거할 때도 사용합니다. 

노치 필터를 만드는 방법도 여러 가지가 있습니다. 특히 피킹 필터를 대신 사용해도 됩니다.

노치 필터의 주파수 특성


필터의 계수는 다음과 같이 생성하면 됩니다. 여기서 Q에 따라 노치 필터가 형성하는 대역이 달라집니다. 이 부분에 대한 내용은 다음을 참조해 주세요

https://medialink.tistory.com/73?category=958130 

https://medialink.tistory.com/77?category=958130 

 

$$h=sin\left ( \omega_{0} \right )/\left (2Q  \right )$$

$$b_{0}=b_{2}=1$$

$$b_{1}=a_{1}=-2cos(\omega_{0})$$

$$a_{0}=1+h$$

$$a_{2}=1-h$$


GNU Octave로 필터 특성 검토

다음과 같이 nf.m을 구현합니다. 그리고 GNU Octave에서 실행합니다.

clear all;
pkg load signal;
fs = 44100.0;
f0 = 1000.0;
NFFT = 1024;
Q= 10; 

function  [coef_b, coef_a] = NF(f0,fs,Q)
  coef_b = zeros(1,3);
  coef_a = zeros(1,3);
  w0 = 2.0 * pi * f0 / fs
  s0= sin(w0)
  c0=cos(w0)
  h = s0 / (2 * Q) 
  coef_b(1) = 1.0;
  coef_b(2) = -2.0 * c0;
  coef_b(3) = 1.0;
  coef_a(1) = 1+h;
  coef_a(2) = -2.0 * c0;
  coef_a(3) = 1-h;
endfunction

[b,a]=NF(f0,fs,Q);
[h,w]=freqz(b,a,NFFT,fs);
m = 20.0*log10(abs(h));

figure(1);
clf;
zplane(b,a);
figure(2);
clf;
subplot(2,1,1)
semilogx(w,m)
xlim([20 44100/2])
ylim([-40 10])
xlabel("frequency(Hz)")
ylabel("magitude(dB)")
grid()
subplot(2,1,2)
semilogx(w,arg(h)*180/pi)
xlim([20 44100/2])
ylim([-180 180])
xlabel("frequency(Hz)")
ylabel("phase(deg)")
grid()

nf.m
0.00MB


필터 특성의 검토

z영역의 결과는 보면, 모든 극점이 단위원 안에 있어 필터는 안정적입니다.

z영역에서 노치필터의 극점과 영점

주파수 영역을 보면 필터 주파수 부분의 이득이 매우 작음을 알 수 있습니다. 실제 이득 감소는 그래프보다 큰 값입니다.

노치필터의 주파수 응답


피킹 필터로 노치필터 흉내 내기

피킹 필터의 Q를 매우 높게 설정하면 노치필터와 같은 특성을 보입니다. 아래 코드는 Q=30, Gain=-20dB로 피킹 필터를 만들고 그 특성을 보여 줍니다.

clear all;
pkg load signal;
fs = 44100.0;
f0 = 1000.0;
NFFT = 2048;
Q= 40.0; 
G= -20.0;
function  [coef_b, coef_a] = PEAKING(f0,fs,g,q)
  coef_b=zeros(1,3);
  coef_a=zeros(1,3);
  A=10^(g/40.0);
  w0=2.0*pi*f0/fs;
  s0=sin(w0);
  c0=cos(w0);
  h=sin(w0)/(2.0*q)
  coef_b(1) = 1.0+h*A;
  coef_b(2) = -(2.0*c0);
  coef_b(3) = (1.0-h*A);
  coef_a(1) = 1.0+h/A;
  coef_a(2) = -2.0*c0;
  coef_a(3) = 1- h/A;
endfunction

[b,a]=PEAKING(f0,fs,G,Q);
[h,w]=freqz(b,a,NFFT,fs);
m = 20.0*log10(abs(h));

figure(1);
clf;
zplane(b,a);
figure(2);
clf;
subplot(2,1,1)
semilogx(w,m)
xlim([20 44100/2])
ylim([-30 30])
xlabel("frequency(Hz)")
ylabel("magitude(dB)")
grid()
subplot(2,1,2)
semilogx(w,arg(h)*180/pi)
xlim([20 44100/2])
ylim([-200 200])
xlabel("frequency(Hz)")
ylabel("phase(deg)")
grid()

z영역에서 보면 모든 극점(x)이 단위원 안에 있어서 필터는 안정적입니다.

주파수 출력 특성을 보면 위의 노치필터와 같이 특정 주파수 신호를 억제하는 특성을 보이고 있습니다. 위상 특성도 노치 필터와 같습니다. 

그러므로 피킹 필터를 노치필터처럼 사용해도 됩니다. 

 


광고좀 꾹 눌러주시면 고맙겠습니다. 


위의 내용을 참조용으로만 사용해주세요. 무단 도용이나 무단 복제는 불허합니다.

기타 문의 사항은 gigasound@naver.com에 남겨 주시면 고맙겠습니다.