MATLAB: Iirnotch filter and q-factor

filteriircombiirnotchq-factor

Dear all, I'm using an iirnotch or iircomb filter to remove 60Hz from my recorded signal. Following matlab help it is easy to implement the code
fs = 20000; fo = 60; q = 35; bw = (fo/(fs/2))/q;
[b,a] = iircomb(fs/fo,bw,'notch'); % Note type flag 'notch'
fvtool(b,a);
But I really do not understand what the quality factor q is for. Matlab usually recommend a setting with 35. But what exactly do I set there? I'm really looking forward to a bit of information… Thanks a lot! Peter

Best Answer

The above code will not work because you end up with a non-integer filter order. The filter order has to be an integer.
Having said that, the quality factor is the center frequency divided by the bandwidth. The higher q, the narrower the notch.
You can see this in the zplane by looking at the position of the poles with respect to the zeros.
Fs = 600; Fo = 60; Q = 35; BW = (Fo/(Fs/2))/Q;
[b,a] = iircomb(Fs/Fo,BW);
zplane(b,a)
Zoom in on one of the pole-zero pairs in the above, you'll see the pole very close to the zero on the unit circle.
You can also see the widith of the notches by looking at the magnitude in the frequency domain
fvtool(b,a)
Now relax the Q factor, or equivalently increase the bandwidth of the notch
Q = 10;
BW = (Fo/(Fs/2))/Q;
[b,a] = iircomb(Fs/Fo,BW);
zplane(b,a)
Now you see the pole has moved further away from the zero on the unit circle. To see the notches widening in the frequency domain use
fvtool(b,a)
Related Question