Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C] Digitale filters.

Pagina: 1
Acties:

  • Rowwan
  • Registratie: November 2000
  • Laatst online: 21:16
Eens een beetje background info....Voor een hobby projectje ben ik bezig met QRS detective. Hiervoor zijn op internet redelijk veel algorithms te vinden (bijv. Engelse & Zeelenberg) . Veel van deze algorithms berusten sterk op digitale filters. Ik merk dat ik hier nog aanzien kennis te kort kom.

Nu zit ik me al een tijdje stuk te bijten op het volgende stukje code, zonder eigenlijk veel verder te komen:
filter = (t0 = v[signal]) + 4*t1 + 6*t2 + 4*t3 + t4 - t5 - 4*t6 - 6*t7 - 4*t8 - t9;
Ik heb echt total geen kennis van digitale filters en weet echt niet wat ik hiermee moet.(ben geen electronicus)
- Wat is het voor filter (of hoe kom ik hier achter?) en wat doet het?
- Volgens de bijgevoegde uitleg is dit filter gemaakt voor een 250 Hz sample frequency. Wat moet ik met het filter als ik een sample freq heb van bijv 500 of 1000 Hz?

Alle hulp is welkom, ik ben lost....

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Nu weet ik ook niet veel van digitale filters, maar zou het niet héél handig zijn als je een link post naar waar je die ene regel code vandaan hebt? Zo buiten z'n context kunnen wij er (denk ik) ook niet veel mee. En als je 't niet kunt linken (een snelle Google leverde mij niet direct resultaten), dan lijkt het me handig wat meer context te geven over die snippet (zoals: uit welk boek, welke pagina, wat staat er boven/onder die code etc.).

t0, t1, t2 etc. lijken mij tijdstippen (dus nu = t0), t1 is dan de volgende sample(?), t2 de daaropvolgende etc.

4*t1 + 6*t2... zou je dus moeten lezen als: 4x de waarde van sample t+1, 6x de waarde van sample t+2... (waar t == nu)

[edit]
Of, wat hieronder gezegd wordt inderdaad, t - 1 i.p.v. t + 1

[ Voor 29% gewijzigd door RobIII op 17-03-2014 15:26 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-11 15:12
- Is t1 de sample op t[-1] en t2 de sample op t[-2] etc ?
- Indien ja : Wat is de samplefrequentie waarmee dit filter wordt gebruikt? (doh, staat in je vraag)

[edit]
Waarschijnlijk deze: http://www.physionet.org/...wpg/wpg_55.htm#Example-10

en de beschrijving van wat het doet:
Lines 45–46:

This FIR filter differentiates and low-pass filters the input signal.
Maw, ruis met hogere frequenties wordt er uit gefilterd en vervolgens worden er flanken gedetecteerd ...

Beetje leesvoer:
Wikipedia: Finite impulse response

[ Voor 77% gewijzigd door farlane op 17-03-2014 16:04 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Rowwan
  • Registratie: November 2000
  • Laatst online: 21:16
He farlane! Thanx voor de link! Het kwam niet van deze site, maar het was idd wel deze code. Helaas had de link die ik had de bijbehorende uitleg niet.
Een gecombineerd FIR en low-pass filter dus... als ik het goed begrepen heb..

Da's het eerste deel van de vraag. Hopelijk heeft ook iemand antwoord op het 2e deel: Hoe moet ik zo'n filter aanpassen als ik een verdubbeling van de samplefrequentie heb?

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Niet? Begrijp je wat een low-pass filter is? Begrijp je wat een digitaal signaal is? En wat de sample rate van een digitaal signaal betekent? Waarom wil je dit filter uberhaupt gebruiken?

Ik weet dat je in je TS hebt gemeld dat je geen verstand van filters hebt. Desondanks kom je met een filter aanzetten, een filter wat niet voor jouw situatie ontworpen is en maar één van de miljarden denkbare filters is. Waarom?

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Ik vond dit boek wel goed: http://www.dspguide.com/ Het is alleen de basis van dsp, maar bevat wel duidelijke uitleg en plaatjes. Ook FIR wordt behandeld. Het is te koop in de winkel, maar ook gratis daar te downloaden.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-11 15:12
Daos schreef op maandag 17 maart 2014 @ 19:28:
Ik vond dit boek wel goed: http://www.dspguide.com/ Het is alleen de basis van dsp, maar bevat wel duidelijke uitleg en plaatjes. Ook FIR wordt behandeld. Het is te koop in de winkel, maar ook gratis daar te downloaden.
Hmm nice, die heb ik ook ff binnengehengeld. Thx :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Rowwan
  • Registratie: November 2000
  • Laatst online: 21:16
Niet? Begrijp je wat een low-pass filter is? Ja...
Begrijp je wat een digitaal signaal is? Ja...
En wat de sample rate van een digitaal signaal betekent? Ja...
Waarom wil je dit filter uberhaupt gebruiken? Zoals in de de TS al aangaf kwam dit filter direct van internet. Het enige wat ik had was dit regeltje code, en ik probeerde te begrijpen wat dit filter nu eigenlijk deed..
Inmiddels ben ik alweer iets verder. Het is een gecombineerd filter van:
- Differentiator van lage frequenties (< 20 Hz)
- 50 Hz Notch
- Low pass (3db = 30 Hz)

  • epic007
  • Registratie: Februari 2004
  • Laatst online: 17-11 15:31
Er is vast een goede reden dat ze het niet met arrays hebben opgelost. Iets leesbaarder zou het ook zo kunnen worden opgelost:

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int i;
int filter;
int t[10];
int factor[10] = { 1, 4, 6, 4, 1, -1, -4, -6, -4, -1 };

// bij nieuwe sample, eerst alles opschuiven
for (i=1;i<10;++i)
{
    t[i] = t[i-1];
}

// sample toevoegen
t[0] = v[signal];

// bereken gefilterde waarde
filter = 0;
for (i=0;i<10;++i)
{
    filter = t[i] * factor[i];
}

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Rowwan schreef op dinsdag 18 maart 2014 @ 08:33:
[...]
Inmiddels ben ik alweer iets verder. Het is een gecombineerd filter van:
- Differentiator van lage frequenties (< 20 Hz)
- 50 Hz Notch
- Low pass (3db = 30 Hz)
... bij een sample rate van 250 Hz, blijkbaar.

En dus is het bij een sample rate van 500 Hz een differentiation van lage frequenties (< hoeveel hz?),
een Notch filter van hoeveel Hz, en een low-pass (3dB bij hoeveel Hz?)
Je zou daar nu zelf het antwoord op moeten kunnen geven, als je digitale filters snapt.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
epic007 schreef op dinsdag 18 maart 2014 @ 09:01:
Er is vast een goede reden dat ze het niet met arrays hebben opgelost.
Performance, neem ik aan. *1 is totaal overbodig. *4 is efficienter te schrijven als <<2, en elke fatsoenlijke compiler doet het toch al. 6 * t3 + -6 * t8 is efficienter te schrijven als 6 * (t3-t8), ook geen supermoeilijke optimalisatie. Kortom, feitelijk heb je 1 echte vermenigvuldiging in die hele exressie., in plaats van 10.

[ Voor 5% gewijzigd door MSalters op 18-03-2014 11:55 ]

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Rowwan
  • Registratie: November 2000
  • Laatst online: 21:16
@MSalters: Als ik beweer dat ik weet wat een filter is, wil dat niet zeggen dat ik weet hoe de werking ervan is (ik weet wat een kerncentrale is, maar vraag mij niet hoe hij werkt...)

Anyway, Ik heb eens zitten stoeien met matlab en de coefficienten ingevoerd middels de volgende code:
Matlab:
1
2
bb = [ 1 4 6 4 1 -1 -4 -6 -4 -1];
hfvt = fvtool(bb, 1);


Hieruit krijg ik de volgende plot bij een sample frequency van 250 Hz
Afbeeldingslocatie: http://s29.postimg.org/6fg2n1zxf/freqcharacteristics_250hz.jpg

Als ik de sample frequentie verander naar 500 Hz verdubbeld dus ook mijn notch freq (en alle andere)
Afbeeldingslocatie: http://s30.postimg.org/uwovp95yl/freqcharacteristics_500hz.jpg

Ik neem nu aan dat als ik hetzelfde gedrag wil krijgen bij een verdubbeling van de sample frequentie, dat ik het aantal coefficienten moet verdubbelen...

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Kan je niet gewoon de helft van je samples weggooien?

  • Rowwan
  • Registratie: November 2000
  • Laatst online: 21:16
Alles kan, maar dit leek me een leuke gelegenheid om me eens te verdiepen in digitale filters...

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Rowwan schreef op woensdag 19 maart 2014 @ 14:18:
@MSalters: Als ik beweer dat ik weet wat een filter is, wil dat niet zeggen dat ik weet hoe de werking ervan is
Je mist hier precies waarom ik vroeg of je weet wat een digitaal filter is. Het is een filter wat op een serie getallen werkt, en het resultaat is weer een serie getallen. Het resultaat is alleen afhankelijk van de filtercoefficienten. De sample frequentie staat er compleet los van. Dat kan 250 Hz zijn, 250 MHz, of 300 nm-1. In alle gevallen is het resultaat dezelfde serie getallen.
Ik neem nu aan dat als ik hetzelfde gedrag wil krijgen bij een verdubbeling van de sample frequentie, dat ik het aantal coefficienten moet verdubbelen...
Eh, nee, waar komt dat idee opeens vandaan? Als je de frequentie verdubbelt, en de sampleperiode verlaagt van 40 ms naar 20 ms, dan is je sample na +40 ms niet meer t1 maar t2 geworden Je sample na 160 ms is niet meer t4 maar t8.

[ Voor 24% gewijzigd door MSalters op 19-03-2014 20:10 . Reden: Tweede deel. ]

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Rowwan
  • Registratie: November 2000
  • Laatst online: 21:16
Je mist hier precies waarom ik vroeg of je weet wat een digitaal filter is. Het is een filter wat op een serie getallen werkt, en het resultaat is weer een serie getallen. Het resultaat is alleen afhankelijk van de filtercoefficienten.
Helamaal mee eens. Dit maakt mijn openingspost ook duidelijk (zie formule)
De sample frequentie staat er compleet los van. Dat kan 250 Hz zijn, 250 MHz, of 300 nm-1. In alle gevallen is het resultaat dezelfde serie getallen
Bwa... ligt eraan hoe je het bekijkt. Het levent uiteraard dezelfde serie getallen op, maar de frequentie karakteristiek verschilt natuurlijk (zie mijn 2 voorgaande plots), wat ook logisch is..
Eh, nee, waar komt dat idee opeens vandaan? Als je de frequentie verdubbelt, en de sampleperiode verlaagt van 40 ms naar 20 ms, dan is je sample na +40 ms niet meer t1 maar t2 geworden Je sample na 160 ms is niet meer t4 maar t8.
Hier komt waarschijnlijk mijn onkunde weer kijken :). Ik ga mee in je redenatie dat t4 ineens t8 wordt. Mijn t9 wordt dus t18. Ik ging er dus van uit dat ik coeffiencient zou moeten hebben tot t18....

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Nou ja, dat hangt ervan of je de t1, t3, ... t17 coëfficienten meetelt. Die zijn namelijk per definitie 0, net zoals de t223846 en t(-1) coëfficienten. Normaal gesproken noemen en tellen we alleen de niet-nul coëfficienten.

Voluit geschreven zij je coëfficienten dus .... 0, 0, 0, 0, 1, 0, 4, 0, 6, 0, 4, 0, 1, 0, -1, 0, -4, 0 -6, 0, -4, 0, -1, 0, 0, 0, 0, 0, 0, ...

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Rowwan
  • Registratie: November 2000
  • Laatst online: 21:16
Ik had ze meegeteld...weet eigenlijk niet waarom :). Laatste vraag (hoop ik), waar komen de eerste 4 nullen vandaan?

Laat maar... ik denk dat dit de t(-x) coëfficiënten zijn..

[ Voor 22% gewijzigd door Rowwan op 20-03-2014 20:31 ]


  • Rowwan
  • Registratie: November 2000
  • Laatst online: 21:16
Ik denk toch dat ik het nog niet helemaal begrepen heb :). De voorgestelde coefficienten geven het volgende resultaat:

Afbeeldingslocatie: http://s27.postimg.org/ij53sdovz/freqcharacteristics_new_500hz.jpg

Alhoewel het er wel op lijkt, is de demping bij 50 Hz iets anders. Verder begint hij na +/- 160 Hz weer met versterken.

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Dat heeft dat andere filter (van 250 Hz) ook. Kan je daar niet laten laten zien hoe het spectrum loopt tot 500 of 1000 Hz.

Dit is een bekend probleem bij digitale filters. Voordat je samplet moet je het signaal altijd eerst door een analoog laag-doorlaat filter sturen die alles boven de helft van je samplefrequentie weggooit. Als je dat boek had gelezen dat ik linkte had je dat kunnen weten...

Probeer het eerst en gooi er anders een analoog filtertjes van 125 Hz voor.

Als je het wat mooier wilt doen kan je ook nog kijken naar Wikipedia: Downsampling Dan heb je slechts een analoog filter van 250 Hz nodig.

edit:
Kan je eens dit proberen:
[ 1 3 4 5 6 5 4 3 1 0 -1 -3 -4 -5 -6 -5 -4 -3 -1]

[ Voor 7% gewijzigd door Daos op 21-03-2014 21:17 ]


  • Rowwan
  • Registratie: November 2000
  • Laatst online: 21:16
Dat heeft dat andere filter (van 250 Hz) ook. Kan je daar niet laten laten zien hoe het spectrum loopt tot 500 of 1000 Hz.
Dat was inderdaad te selecteren in matlab, en ik zag nu ook de "spiegeling"
Kan je eens dit proberen:
[ 1 3 4 5 6 5 4 3 1 0 -1 -3 -4 -5 -6 -5 -4 -3 -1]
Deze variant had ik inmiddels ook al gevonden (waarbij ik de "3"-en op "2.5" had staan, maar het idee was hetzelfde). Het resultaat was niet zo mooi als mijn eerdere probeersels

De suggestie van MSalters (tussenliggende coeffiecienten op 0) bleek uiteindelijk zo slecht nog niet.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Uiteraard is dat geen slecht idee; het is praktisch hetzelfde filter !

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1