Foranlediget af at Kjeldsen har gjort os opmærksom på at miniDSP nu fås med et modul, der tillader, at man selv konfigurerer dets biquads, så man kan lave vilkårlige filtre og ikke kun de normale Bessel, Butterworth mm. syntes jeg det var på tide at komme lidt videre med realiseringen af mit fasetro filter, der er karakteriseret ved at summen af de 3 kanaler er 1, dvs den er lineær både amplitude og fasemæssig, men også ved, at bas, mellem og diskant er linære indenfor deres arbejdsområde, så de gengiver et step korrekt.
Mit 5. ordens fasetro fliter:
Denominator:
s⁵ + 9 s⁴ - 26 s³ - 26s² +9s + 1
Nominator:
Low = 9s+1
Mid = -26s³-26s²
High = s⁵+9s⁴
Nu er opgaven så at realisere filtret med biquads:
http://peabody.sapp.org/class/350.838/lab/biquad/
I det følgende er s og x brugt i flæng som variabel - det skyldes kun regnemaskinerne.
Her er et program, der kan factorisere polynomier, men den kunne ikke opløse mit denominator polynomium, som den siger er irreducible:
http://wims.unice.fr/wims/wims.cgi
Den har måske ret, idet den gør det fint, når jeg går tilbage til mit oprindelige 5'th ordens filter, hvor alle koefficienter er positive.:
x^5+9x^4+26x^3+26x^2+9x+1= pm (x+1) (x2+4x+1)2
Men her er en ligningsløser, der kan finde nulpunkter, hvilket kan bruges til at opløse et polynomium:
http://www.numberempire.com/equationsolver.php
Til at gøre pøve bruges en regnemaskine, der kan gange polynomier:
http://www.solvemymath.com/online_math_calculator/algebra_co mbinatorics/polynomial_calculator/polynomial_mul_div.php
Nulpunkter i nævner findes med ligningsløseren, hvilket giver:
Equation (s)^5+(1+2*4)*(s)^4+(-((4^2+2*4+2)*(s)^3+(4^2+2*4+2)*(s)^2)) +(1+2*4)*(s)+1 solved for s
solution 1
s = -2*sqrt(4*sqrt(13)+13)/13^(1/4)-sqrt(13)-2
solution 2
s = 2*sqrt(4*sqrt(13)+13)/13^(1/4)-sqrt(13)-2
solution 3
s = -2*sqrt(4*sqrt(13)-13)/13^(1/4)+sqrt(13)-2
solution 4
s = 2*sqrt(4*sqrt(13)-13)/13^(1/4)+sqrt(13)-2
solution 5
s = -1
Disse kan puttes direkte ind i Speedcrunch, hvilket giver flg. nulpunkter i nævneren:
solution 1
s = -11.1211840679780048306
solution 2
s = -0.08991848294997375564
solution 3
s =0.34944821514447760137
solution 4
s = 2.86165433578350098487
solution 5
s = -1
Nu gør vi prøve, ved at gange de 5 faktorer sammen:
(s--11.1211840679780048306)*(s- -0.08991848294997375564)*(s-0.34944821514447760137)*(s-2.861 65433578350098487)*(s--1)
=(x^2 + 11.2111025509x + 1)*(x^2 - 3.21110255093x + 1)*(x+1) =
(x^4 + 7.99999999997x^3 - 33.9999999999x^2 + 7.99999999997x + 1) * (x+1) =
x^5 + 8.99999999997x^4 - 25.9999999999x^3 - 25.9999999999x^2 + 8.99999999997x + 1
Fantastisk - det passer, selvom polynomiet ikke umiddelbart kunne faktoriseres- men metoden med at finde rødderne virker ok.
Nu har vi samtidigt beregnet 2 ordens polymnomierne til biquad filtrets nævnere:
1.: x^2 + 11.2111025509x + 1
2.: x^2 - 3.21110255093x + 1
3.: x +1
så mangler vi tællerne for Low, Mid og High.
Low = 9x+1
Mid = -26x^3-26x^2
High = x^5+9x^4
=>
Low = 0x^2 + 9x+1
Mid = (-26x^2 + 0x +0) * (0x^2+x+1)
High = (x^2+0x +0) * (x^2 + 0x + 0) * (0x^2 + x + 9)
- det ordnede wims-faktoriseringsprogrammet uden problemer
Så skal tæller og nævner kombineres for de tre filtre:
(De tre filter kan opbygges med mange forskellige kombinationer af biquads, og min er tilfældigt valgt. Jeg skal muligvis have kigget på, hvordan det gøres med henblik på optimal udstyring og støj. Det har jeg ingen erfaring med- tips/henvisninger modtages med glæde)
Low - 3 biquads:
(0x^2+9x+1)/(x^2 + 11.2111025509x + 1) *
1/(x^2 - 3.21110255093x + 1) *
1/(0x^2+x+1)
Mid - 3 biquads:
(-26x^2 + 0x +0)/(x^2 + 11.2111025509x + 1) *
(0x^2+x+1)/(x^2 - 3.21110255093x + 1) *
1/(0x^2+x+1)
High - 3 biquads:
(x^2+0x +0)/(x^2 + 11.2111025509x + 1) *
(x^2 + 0x + 0)/(x^2 - 3.21110255093x + 1) *
(0x^2 + x + 9)/(0x^2+x+1)
Disse er normaliseret til cyklisk centerfrkv = 1 = 1/2pi Hz
Nu må det være en smal sag at transformere til en given centerfrekv. (fx 1 kHz) og beregne koefficienterne til de 9 biquad filtre, men det må vente lidt - jeg skal også lige have bestilt et par miniDSP'er.