Implementera IIR coupled form BiQuads

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
superx
Inlägg: 1127
Blev medlem: 19 juni 2012, 23:28:16
Ort: Linköping

Re: Implementera IIR coupled form BiQuads

Inlägg av superx »

Gissar att du menar:

Kod: Markera allt

                   2       
         1 + 2z + z        
    --------------------   
                        2  
    0.9024 - 1.8997z + z   
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Implementera IIR coupled form BiQuads

Inlägg av Korken »

Precis, på formen:
B = b0 b1 b2
A = a0 a1 a2

EDIT:
Det jag vill påpeka är att koefficienterna ser bra ut, utan det är gainet efter filtret som går utanför gränserna för floating point efter ett tag.
superx
Inlägg: 1127
Blev medlem: 19 juni 2012, 23:28:16
Ort: Linköping

Re: Implementera IIR coupled form BiQuads

Inlägg av superx »

Aha, då tror jag att jag fattar. Jag antar att dessa fyra filter ligger i serie, för att tillsammans bilda att 8-pols-filter. Korrekt?

Du kan ju alltid distribuera förstärkningen över de fyra filtren. Alltså, gångra varje filter med g^(1/4). Då blir det mer rimlig storleksordning på varje filter. Observera dock att det fortfarande kan klippa internt (och på utgången) i filtret även om frekvenssvaret aldrig letar sig över 1.0.

Hur fungerar fixed point-matte på STM32? Stödjer kompilatorn någon fractional-typ, eller gångrar du och skiftar ner manuellt?
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Implementera IIR coupled form BiQuads

Inlägg av Korken »

Aha, då tror jag att jag fattar. Jag antar att dessa fyra filter ligger i serie, för att tillsammans bilda att 8-pols-filter. Korrekt?
Precis så ligger det till!
Du kan ju alltid distribuera förstärkningen över de fyra filtren. Alltså, gångra varje filter med g^(1/4). Då blir det mer rimlig storleksordning på varje filter. Observera dock att det fortfarande kan klippa internt (och på utgången) i filtret även om frekvenssvaret aldrig letar sig över 1.0.
Smart! De har jag inte tänkt på förut.
Dock om det går över 1.0 internt gör inget, då jag kör floating point. Om jag dock går över till fixed point så får man tänka på det.
Hur fungerar fixed point-matte på STM32? Stödjer kompilatorn någon fractional-typ, eller gångrar du och skiftar ner manuellt?
Den stödjer inte fixed point, man får skifta manuellt.
Kör man 1Q15 eller 1Q31 så blir det ju automatiskt om man tar den översta delen av svaret, men annars så blir det att skifta för att få korrekt format.


Det som slog mig nu är att jag behöver hitta filter topologier som kan användas i serie istället för parallell.
Tex istället för bandpass skulle jag behöva ett allpass i parallell med ett bandpass, men då kan det bli fel med grupptiden igen.
Vet något vad ett sådant filter heter? Jag har kollat på shelving filter och peak filter, men peak filtret tycks inte göra det jag vill att det ska göra (har inte ett band som förstärks utan en viss frekvens).
superx
Inlägg: 1127
Blev medlem: 19 juni 2012, 23:28:16
Ort: Linköping

Re: Implementera IIR coupled form BiQuads

Inlägg av superx »

Ok, så du kör floating-point. Men då orsakar väl inte förstärkningsfaktorn något problem, även om en är superliten? Med flyttal så är ju dynamiken nästan oändligt stor.

Jag fattar inte vad du menar med all-pass-filtren i sammanhanget. Men du kanske kan använda två shelving-filter? Ett som bryter upp där bandet börjar, och ett som bryter ned där det slutar. Och så ändrar du gainen på båda samtidigt.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Implementera IIR coupled form BiQuads

Inlägg av Korken »

Problemet är att förstärkningsfaktorn börjar närma sig slutet av FPs dynamiska område.
FP har ett dynamiskt område på +/-1e38 och börjar man närma sig det så tapar man precision på de lägsta bitarna.
Dock så kan man simulera detta med Matlab, ska testa det du sa om att dela upp gain faktorn över varje BiQuad som du sa, detta borde fixa problemet.

Det jag sa om bandpass och allpass, om man sätter dessa i parallell så borde man få denna överföringsfunktion:
filter.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
superx
Inlägg: 1127
Blev medlem: 19 juni 2012, 23:28:16
Ort: Linköping

Re: Implementera IIR coupled form BiQuads

Inlägg av superx »

1e-38 jämfört med gainen på 1.9e-13 är ju fortfarande inget problem iof. Du kommer fortfarande att ha full precision i mantissan. Eller tror du att några interna tillstånd eller beräkningar blir för små?

Jag tror som sagt på två shelving-filter i kaskad för att åstadkomma det du vill.
Skriv svar