Biquad cascade IIR filter form 1 kontra form 2
- 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
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?
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?
Re: Biquad cascade IIR filter form 1 kontra form 2
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
-M
- 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
Cortex M4 har MAC 32x32->64 så det kanske är förklaringen...
- 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
Fast i ditt inledande inlägg fattade jag det som att du syftade på flyttalsimplementationer, eller? 32x32->64 MAC är ju enbart en heltalsgrej.lillahuset skrev:Cortex M4 har MAC 32x32->64 så det kanske är förklaringen...
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.
- 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
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.
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.
Re: Biquad cascade IIR filter form 1 kontra form 2
Du menar direktform 1 antar jag?Varianterna av form 2 i biblioteket är ...
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?
- 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
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.
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.
Re: Biquad cascade IIR filter form 1 kontra form 2
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!
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
- 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
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
Filer här:
https://www.wuala.com/skogsjanne/iir/?key=k0Ii1m5d5CeG