Linkwitz-Riley filter implementation (issue with 3dB peaks at cut-off frequency)
11 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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
0 comentarios
Respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!