Hi all. Does anyone know how to change the width of a feedback comb filter's teeth? From the general idea on wikipedia, it seems like it is only possible to change the delays and the gain. Thanks
Width of comb filter teeth
Started by ●October 9, 2008
Reply by ●October 10, 20082008-10-10
Hi, There was an article that just came out on the IEEE Signal Processing 2008 (5), on the section "DSP Tips& Tricks" that describes how to design a good variable Q filter (single notch). hth On Oct 9, 4:53�pm, "sauwen" <sauwen...@gmail.com> wrote:> Hi all. �Does anyone know how to change the width of a feedback comb > filter's teeth? From the general idea on wikipedia, it seems like it is > only possible to change the delays and the gain. > > Thanks
Reply by ●October 10, 20082008-10-10
Here is the matlab function that I implemented of the filter on the article function [b,a]=reson(fn,fs,K,mthd) % % [b,a]=reson(fn,fs,K,mthd) % % Generates a resonant (single pole) filter.Parameters are: % % fn - desired location of pole (Hz) % fs - sampling frequency (Hz) % K - Q factor or pole magnitude(depending on witch method used % in the mthd parameter described below) % mthd - (string) desired method to use. Options are: % % 'poleMag' : in this case K specifies the magnitude of the pole in the filter % (0 < K <1). Notice that the gain might not be equal to 1 at the resonant % peak. And this method might provide *less* attenuaton at the sidebands than % method using 'Q2' below. % % 'Q1' : simple method utilizing a second order feedback system. K specificies % the filter's Q (how narrow the filter is). This method has significant % drawbacks, use Q2 instead. % % 'Q2' : improved version of Q1 with more symetrical response and unit gain at desired % pole location (see example). % % b - filter FIR taps % a - filter AR taps % % % %Example % fs=5000; % fn=50; % K=50; % r=0.997; % [b1,a1]=reson(fn,fs,K,'Q1'); % [b2,a2]=reson(fn,fs,K,'Q2'); % [b3,a3]=reson(fn,fs,r,'poleMag'); % % [H1,F]=freqz(b1,a1,500,fs); % hold on; % [H2,F]=freqz(b2,a2,500,fs); % [H3,F]= freqz(b3,a3,500,fs); % plot(F,20*log10(abs(H1)));hold on;grid on % plot(F,20*log10(abs(H2)),'r') % plot(F,20*log10(abs(H3)),'g') % legend('Q1','Q2','PoleMag') %Written By Ikaro Silva 2008 switch mthd case 'poleMag' cW = cos(2*pi*fn/fs); b=[1]; a=[1 -2*K*cW K^2]; case 'Q1' % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Puts a pole exatly on the unit circle % at the fn Hz line. %Not recommended!!! Use Q2 instead cW =2*cos(2*pi*fn/fs); Hn=[1 -cW 1]; b=[1]; a=[1 K.*Hn]; case 'Q2' %Similar to 'Q1' but more accurate %For details see IEEE SP 2008 (5), pg 113 beta=1+K; f=pi*fn/fs; numA=tan(pi/4 - f); denA=sin(2*f)+cos(2*f)*numA; A=numA/denA; b=[1 -2*A A.^2]; a=[ (beta + K*(A^2)) -2*A*(beta+K) ((A^2)*beta + K)]; end %%%End of Function%%%%%
Reply by ●October 11, 20082008-10-11
On Thu, 09 Oct 2008 15:53:31 -0500, "sauwen" <sauwen.jl@gmail.com> wrote:>Hi all. Does anyone know how to change the width of a feedback comb >filter's teeth? From the general idea on wikipedia, it seems like it is >only possible to change the delays and the gain. > >ThanksHi, I'm just thinkin' out loud here, but perhaps you could cascade the feedback comb with a feedforward comb. Both combs must have the same delay. Then varying the feedforward value (and sign) of alpha may allow you to "adjust" width of the cascaded filter's teeth. [-Rick-]