Biquad cascade IIR filter form 1 kontra form 2

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Biquad cascade IIR filter form 1 kontra form 2

Inlägg av lillahuset »

Jag är brydd...

Efter att ha studerat dokumentationen till ARMs DSP-bibliotek kan jag konstatera att form 2 verkar vara lite effektivare. Vad som får mig att ana oråd är att för form 2 finns det bara en flyttalsimplementering medan för form 1 finns det alla möjliga varianter.

Jag får en känsla att form 1 kan vara mer problemfri. Någon som vet något värt att berätta? Någon filterguru? DSP-guru?
thebolt
Inlägg: 248
Blev medlem: 10 februari 2008, 17:41:40
Ort: Taipei Taiwan

Re: Biquad cascade IIR filter form 1 kontra form 2

Inlägg av thebolt »

Rent signalmässigt är de ju ekvivalenta.. Däremot har ju form 1 bara ett summationselement, vilket gör att den passar bättre i många fixed-point dsp:er som har MAC instruktioner och ackumulator med längre bitlängd. Har man inte det, som de flesta fpuer t.ex., så är de färredelay-elementen i forn 2 fördelaktigt.

-M
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Biquad cascade IIR filter form 1 kontra form 2

Inlägg av lillahuset »

Cortex M4 har MAC 32x32->64 så det kanske är förklaringen...
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Biquad cascade IIR filter form 1 kontra form 2

Inlägg av blueint »

Vad avses med form1 respektive form2?
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Biquad cascade IIR filter form 1 kontra form 2

Inlägg av lillahuset »

superx
Inlägg: 1127
Blev medlem: 19 juni 2012, 23:28:16
Ort: Linköping

Re: Biquad cascade IIR filter form 1 kontra form 2

Inlägg av superx »

lillahuset skrev:Cortex M4 har MAC 32x32->64 så det kanske är förklaringen...
Fast i ditt inledande inlägg fattade jag det som att du syftade på flyttalsimplementationer, eller? 32x32->64 MAC är ju enbart en heltalsgrej.

Vilka varianter finns det av direktform 1 då?

Generellt brukar man säga att direktform 1 är bäst för fixed point, eftersom man kan utnyttja ackumulatorn bäst. För flyttal är transponerad direktform 2 bäst, för den är effektiv och ger vissa numeriska fördelar för just flyttal.

IIR-filter är dock kluriga grejer numeriskt, och det finns många fall där noggrannheten inte räcker till i antingen koefficienterna eller i tillstånden för både 24-bitars heltal och för 32-bitars flyttal. Detta beror helt på vilka filter du realisera.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Biquad cascade IIR filter form 1 kontra form 2

Inlägg av lillahuset »

Nej siktet var inställt på heltalsimplementering. Ursprunget är en filtersimulering skriven i VB konverterad till C. Försöket att köra den med vanliga float gav ett oanvändbart resultat. Med double blev resultatet bra men alldeles för långsamt. Surprise surprise. Det får alltså bli q31 som datatyp.

Varianterna av form 2 i biblioteket är float, q15, q31, fast q15, fast q31 och high precision q31. Det du. Tre olika q31 implementeringar! Har inte hunnit detaljstudera än så jag vet inte riktigt vilken q31 det blir.

Vi gjorde ett motsvarande filter på en TMS320C31 (eller om det var 32) för länge sedan. Det är en flyttals-DSP med 32 bits mantissa och 8 bits exponent. Då tyckte jag det var ett mystiskt flyttalsformat. Nu inser jag finessen.

Personligen har jag alltid, om möjligt, undvikit rekursiva filter. För komplicerat för en enkel typ som undertecknad.
superx
Inlägg: 1127
Blev medlem: 19 juni 2012, 23:28:16
Ort: Linköping

Re: Biquad cascade IIR filter form 1 kontra form 2

Inlägg av superx »

Varianterna av form 2 i biblioteket är ...
Du menar direktform 1 antar jag?

Direktform 2 är inte lämplig för heltal, så är det vad du tänkte använda så är det direktform 1 som gäller. Anledningen till att det finns så många varianter av DF1 beror just på att de implementeras med heltal, och då blir det olika varianter för olika antal bitar på olika ställen. Jag googlade lite och gissar följande ang. biblioteket du refererar till:

q31
Vanlig heltalsimplementation som utnyttjar 32x32->64 MAC

fast q31
Använder sig istället av 32x32->32 MAC

high precision q31
32x32->64 MAC men med 64-bitars tillstånd

Vad är det för filter du implementerar, och hur yttrar sig problemen med flyttal?
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Biquad cascade IIR filter form 1 kontra form 2

Inlägg av lillahuset »

Jo jag menade form 1.

Ett ganska enkelt filter egentligen. Det ska integrera eller derivera en givarsignal, dvs 6 dB per oktav. En liten knorr är att under eller över en viss frekvens ska filtret bryta av och "förstärkningen" ska falla av. Frekvensområdet ~1 till 4000 Hz.

Problemet med flyttal yttrade sig som NaN vilket jag tolkade, rätt eller fel, att mantissan var för liten. Kan också vara en dålig algoritm, det vet jag inte.
superx
Inlägg: 1127
Blev medlem: 19 juni 2012, 23:28:16
Ort: Linköping

Re: Biquad cascade IIR filter form 1 kontra form 2

Inlägg av superx »

Låter lite skumt, men poler vid låga frekvenser i kombination med en hög samplingsfrekvens är det som brukar ge problem. Jag tycker det här är kul, så posta gärna koefficienterna om du vill!
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Biquad cascade IIR filter form 1 kontra form 2

Inlägg av lillahuset »

Kommer ikväll.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Biquad cascade IIR filter form 1 kontra form 2

Inlägg av lillahuset »

Det funkar med float nu. Jag skrev om till form 1 och fick inga NaN. Kan eventuellt bero på andra koefficienter... Eller något...

Filer här:
https://www.wuala.com/skogsjanne/iir/?key=k0Ii1m5d5CeG
Skriv svar