Linkwitz-Riley filter implementation (issue with 3dB peaks at cut-off frequency)
Show older comments
Hi,
My name is Daniel. I'm a Master Thesis student from Spain. At the time I'm trying to implement a 3 way linkwitz-riley crossover in Matlab. I'm doing it because the use of normal butterworth filters chained produces a 3dB peak at the cutoff frequencies. The thing is that I'm actually getting those peaks anyway.
To do the Linkwitz-Riley implemetation I'm following an explanation that I've found on dsprelated ( http://www.dsprelated.com/showmessage/112896/1.php )
There it is said...
You need for the three outputs to sum to the cascade of the two allpass filters,
. Lo + Mid + Hi = apH*apL
_ _ _Well,
. apH = lpH + hpH
. apL = lpL + hpL
So,
. apH*apL = (lpH + hpH)*(lpL + hpL)
. = lpH*lpL + lpH*hpL + hpH*(lpL + hpL)
. = lpH*lpL + lpH*hpL + hpH*apL
And the crossover must be configured like this:
. +---+ +---+
. +--|apL|--|hpH|-- Hi
. | +---+ +---+
. |
. | +---+ +---+
. --+--|hpL|--|lpH|-- Mid
. | +---+ +---+
. |
. | +---+ +---+
. +--|lpL|--|lpH|-- Lo
. +---+ +---+_ _ _
So... My code, reproducing this fact is the following...
[b0 a0]=butter(4,(2*pi*500)/22050);
[b1 a1]=butter(4,(2*pi*2000)/22050);
[b2 a2]=butter(4,(2*pi*500)/22050,'high');
[b3 a3]=butter(4,(2*pi*2000)/22050,'high');
H1=dfilt.df2t(b0,a0);
H2=dfilt.df2t(b1,a1);
H3=dfilt.df2t(b2,a2);
H4=dfilt.df2t(b3,a3);
paral=dfilt.parallel(H1,H3)
hi=dfilt.cascade(paral,H4);
mid=dfilt.cascade(H3,H2);
low=dfilt.cascade(H1,H2);
sum=dfilt.parallel(mid,hi,low)
fvtool(sum)
Can anyone find my mistake?
Thank you and best regards,
Dani
Answers (0)
Categories
Find more on Butterworth in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!