digitalt lågpassfilter - "hög grad"

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

digitalt lågpassfilter - "hög grad"

Inlägg av jesse »

Kan börja med att när det gäller terminologin och teorin kring filter i allmänhet så är jag helt obildad.

Vad jag behöver göra är att implementera ett lågpassfilter på en "wave-fil" (varje sampel = ett 16-bitars heltal) med en gränsfrekvens på 30 Hz och en brant kurva på -96 dB per oktav. Det ska jag ha för att få en fin kurva på min EKG-mätare. Hittills har jag bara gjort enkla filter så här.

Siffrorna (30 Hz, -96dB/okt) är taget från tester jag gjort med lågpassfiltret i Kwave (en Wave-editor i KDE Linux). Där kan man ange parametrarna direkt. När jag testar "lågpassfilter" i Audacity kan man bara ange gränsfrekvens - inte branthet. Men där räcker det med att göra lågpassfiltret två gånger efter varandra för att få en OK kurva. Sen kanske det inte måste vara exakt 30 Hz, jag har inte testat tillräckligt, om det kan gå att flytta gränsen närmare 50 Hz utan att få med nätripplet vore ju bättre.

Detta filter ska in i en AVR, så jag är ute efter snabba algoritmer och enkla formler, om det finns.
Filtret måste ju inte vara matematiskt helt korrekt, bara det kapar av frekvenser över 30 Hz ganska rejält.

Antal samples per sekund kan jag tänka mig kommer att ligga kring 100-250 kan jag tänka mig (Möjligt med högre sampling, men ser kanske inte riktigt poängen med det då det ska flitreras så hårt senare.)

Jag tänker först testa mina algoritmer på en wav-fil i PC, men det ska sedan överföras till AVR. (Wav-filen är på 8000 smps, men det får jag sampla ner till passande sampelrate.)

Ett möjligt alternativ är givetvis analogt filter på ingången (signalen tas in via AVR:ens 10 bitars ADC), hur skulle det kunna se ut?
ekg2.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
janaf
EF Sponsor
Inlägg: 2275
Blev medlem: 14 september 2009, 14:51:03
Ort: Stockhom Söder

Re: digitalt lågpassfilter - "hög grad"

Inlägg av janaf »

Dels skulle du i beräkningen kunna slänga värden, tex använda bara var åttonde. Är höjden på topparna viktig såkan du plocka ut maxvärdet separat. Sen kan du ju ha ett rullande medelvärde också. Det är lätt med en cirkulär buffert där du summerar alla värden och dividerar binärt. Lägg till senaste värde, subtrahera det som ska port, dividera det som är kvar. Det blir naturligtvis inte ekvivalent med 96dB/oktav men jämnar i alla fall ut kurvan.
Användarvisningsbild
4kTRB
Inlägg: 20784
Blev medlem: 16 augusti 2009, 19:04:48

Re: digitalt lågpassfilter - "hög grad"

Inlägg av 4kTRB »

Ser kurvorna inte lite märkliga ut efter LP-filtreringen?
Snabba transienter är ju helt opåverkade förutom de med
låg amlitud. Är det bara hf med låg amplitud du vill filtrera?
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: digitalt lågpassfilter - "hög grad"

Inlägg av jesse »

Vad jag vill ha bort är ju egentligen bruset och 50 Hz brummet. De snabba transienterna vill jag ha kvar. Det svåra är ju att skilja brus från information. Som tur är så är de låga amplituderna i informationen även av låg frekvens, och därför syns dessa tydligt trots eller tack vare hård filtrering ( P-puckeln, t.ex).

Att de snabba transienterna blir så spetsiga som de blir var ju en positiv överraskning, men mäter man dess bredd så är det antagligen ändå under 30 Hz ?

Man får inte filtrera så hårt att kurvan blir deformerad. Formen på QTS-komplexet är viktig - det får inte reduceras till en sinusvåg!

Mellan varje transient går det ca 1 sekund.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: digitalt lågpassfilter - "hög grad"

Inlägg av jesse »

Kanske duger det med två st. andra graden lågpassfilter så här:

Bild

Fördelar: slipper böka med mjukvara.
Nackdelar: svårt att justera / optimera utan att byta massor av komponenter.
Nackdel 2: vill inte etsa mer koppar!
Användarvisningsbild
Andax
Inlägg: 4379
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: digitalt lågpassfilter - "hög grad"

Inlägg av Andax »

Leta lite på butterworth filter om du vill ha ett fint filter. De har en passband som faller av med 6*n dB/oktav eller 20*n dB/dekad där n är filter-order. 96 dB/okt => n = 16
Fast Chebyshev filter och Elliptic filters avtar ännu snabbare i passbandet.
anders_w
Inlägg: 112
Blev medlem: 6 september 2011, 17:02:03

Re: digitalt lågpassfilter - "hög grad"

Inlägg av anders_w »

Vill du göra ett digitalt filter rekommenderar jag dig att använda ett sk. FIR-filter. För att beräkna filterkoefficienter finns flera gratis-program och java-appar att tillgå. Googla "Remez" eller "Parks McClellan". Med en samplingsfrekvens på 100-250 Hz kan du lätt använda filterordning 100 eller mer. Då får du prestanda som bara går att drömma om i den analoga världen.
Nerre
Inlägg: 27235
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: digitalt lågpassfilter - "hög grad"

Inlägg av Nerre »

50 Hz brukar man plocka bort med ett notch-filter har jag för mig, äldre EKG-prylar var i alla fall omställbara mellan 50 och 60 Hz. Numera vet jag inte om det är automatiskt eller om de just har väldigt branta filter istället.


Googlade lite snabbt och hittade den här sidan som verkar ge färdig C-kod, dock använder den flyttal.
http://www-users.cs.york.ac.uk/~fisher/mkfilter/

Atmel har en application note också upptäckte jag
http://www.atmel.com/Images/doc2527.pdf
Användarvisningsbild
4kTRB
Inlägg: 20784
Blev medlem: 16 augusti 2009, 19:04:48

Re: digitalt lågpassfilter - "hög grad"

Inlägg av 4kTRB »

Vad har du för periodtid mellan de vassa höga topparna?
Verkar som du spelat in en väldigt långsam signal i så fall.
Bruset som filtrerats bort måste ha betydligt högre frekvens
för det brusar ju mellan de höga topparna.
Nerre
Inlägg: 27235
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: digitalt lågpassfilter - "hög grad"

Inlägg av Nerre »

Det är ju ett EKG, pulsen kan väl vara upp till 300 slag i minuten kanske (jag tror inte EKG-utrustning går högre), 5 Hz alltså. Vilopuls kan väl vara neråt 0.5 Hz nästan.


Googlar man på "ecg filters" så hittar man mycket intressant.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: digitalt lågpassfilter - "hög grad"

Inlägg av jesse »

Jag har testat lite slumpartade försök med filtering. Jag har filtrerat i upp till tre steg med det vanliga "enkla" digitala filtret. Det kräver bara 3 st 16-bitars int som mellanlagring (ett för varje filternivå).

Kod: Markera allt

int filter1 = 0;
int filter2 = 0;
int filter3 = 0;

       filter1 = (filter1 * (FILT-1) / FILT) + sample;
        utsamp = filter / (FILT) ; 

        filter2 = (filter2 * (FILT-1) / FILT) + utsamp / FILT;
        utsamp = filter2 / (FILT) ;

        filter3 = (filter3 * (FILT-1) / FILT) + utsamp / FILT;
        utsamp = filter3 / (FILT) ;
Först sänkte jag samplingsfrekvensen till 400, sedan applicerade jag dessa filter med filterfaktor FILT = 3, alltså mycket låg. Vilken gränsfrekvens det ska motsvara har jag ingen aning om, men det ser bra ut :)

Nu får jag väl säga att själva original-filen var ganska fin och hade relativt lite störningar, så det kanske ser värre ut om jag skulle få in mer skit (50 Hz). Det återstår att se. Men nu vet jag i alla fall att det går att filtrera ganska effektivt med enkla medel. Helst vill jag dock se att FILT är en potens av två, så slipper jag en massa divisioner. Det kan jag nog ordna genom att öka sampelfrekvensen något.

Det borde väl vara en fördel att sampelfrekvensen är en exakt multipel av 50 Hz, annars kan det ju uppstå interferenser med mycket lägre frekvens.... 400 Hz, 500 Hz, 600 Hz är således helt OK. 600 Hz är ju bra, då blir det automatiskt anpassat för USA också.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
4kTRB
Inlägg: 20784
Blev medlem: 16 augusti 2009, 19:04:48

Re: digitalt lågpassfilter - "hög grad"

Inlägg av 4kTRB »

När det gäller analoga filter finns följande att läsa i AN-779 från National:
Noise Rejection (Line-Frequency Notches for Biomedical
Instrumentation and ATE, Low-Pass Noise Filtering for
General Instrumentation, Anti-Alias Filtering for Data Acquisition
Systems, etc.): All of these applications can be
handled well in most cases by either switched-capacitor or
conventional active filters. Switched-capacitor filters can run
into trouble if the signal bandwidths are high enough relative
to the center or cutoff frequencies to cause aliasing, or if the
system requires dc precision. Aliasing problems can often be
fixed easily with an external resistor and capacitor, but if dc
precision is needed, it is usually best to go to a conventional
active filter built with precision op amps.

Ett 4:de ordningens aktivt Tjebychov har bra dämpning, betyligt mer än 90dB/dekad.
Användarvisningsbild
YD1150
Inlägg: 1974
Blev medlem: 29 oktober 2010, 22:41:10

Re: digitalt lågpassfilter - "hög grad"

Inlägg av YD1150 »

FIR-filter har ju linjär fas.
Eftersom EKG-kurvformen innehåller innehåller information så är det väl inte så bra
om kurvformen förvanskas :mrgreen:

Otestade :!: FIR-filter koefficienter i den bifogade pdf:en
Men en samplingsfrekvens på 600Hz ska ge de egenskaper som finns i pdf:en.
Filterkoefficienter.pdf
I en PIC32 så går det lätt köra ett FIR filter med heltal (ej flyttal alltså!)
bara att multiplicera att koefficienter med samma tal så att de blir "lagom stora"
så att det inte blir overflow m.m.

En ny bruskälla uppstår pga att man inte räknar med oändlig precision utan
med ett fixt antal siffror.

Använd pekare i C så går det mycket fortare för processorn att beräkna.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

Re: digitalt lågpassfilter - "hög grad"

Inlägg av dangraf »

vad tror du om en FFT algorithm? där skulle man kunna ta bort stapeln som motsvarar 50hz ganska enkelt och trixa med de andra frekvenserna man är intresserad av, ta bort offset mm.
Men det går inte att bestämma branthet på kurvan.

här finns t.ex ett projekt som kör FFT på en avr.



/Daniel
Användarvisningsbild
4kTRB
Inlägg: 20784
Blev medlem: 16 augusti 2009, 19:04:48

Re: digitalt lågpassfilter - "hög grad"

Inlägg av 4kTRB »

Hittade en sida med ett interaktivt program som genererar C-kod
utifrån vald filtertyp och inknappade övriga data. Verkar smidigt.
Finns även en variant för digital PLL som genererar färdig Javakod.
Sånt vore kul att labba med. DTMF-styrda saker på datorn vore kul
att testa.

http://www-users.cs.york.ac.uk/~fisher/mkfilter/
Skriv svar