Het volgende is het geval:
Ik ben bezig (op mijn werk) met de ontwikkeling van een NDIR gas sensor (http://en.wikipedia.org/wiki/Nondispersive_infrared_sensor).
Kort samengevat heb ik een IR lichtbron --> gaskamer --> IR sensor. De IR lichtbron moduleer ik met 5Hz aan/uit, een blokgolf dus. De IR sensor ontvangt deze blokgolf en middels een ADC gaat dit signaal mijn microcontroller in waar de verdere verwerking (FFT + wet Lambert Beer, zie wikipedia) plaats vind.
Nou hebben mij verschillende bronnen gemeld dat ik de demodulatie in de microcontroller het beste middels een FFT kan doen. Dit heb ik dus gedaan en dit werkt ook. Echter vergt dit veel capaciteit van mijn microcontroller en kost relatief veel geheugen. Ik ben dus eigenlijk op zoek naar een (beter/sneller) alternatief. En vraag ik me af of ik per see de demodulatie middels FFT moet doen? Kan ik niet gewoon telkens bij een op/afgaande flank naar het signaal niveau kijken hier een soort van gemiddelde van nemen?
Ik ben het er over eens dat ik met FFT alle niet gewenste frequenties weg filter, maar ik vraag me af hoe ongewenst de boven en ondertonen van mijn blokgolf zijn?
Ik hoop dat mijn vraag een beetje duidelijk is. Anders hoor ik het wel
.
stecj366
Sonar is meer dan Ping...
Waarom een FFT? Wat doe je met de uitgang van de FFT? Je hebt daar een hele boel informatie (per frequentie een amplitude en fase). Hoe gebruik je de uitgang van de FFT?
Normaal wordt in dit soort metingen eerst je signaal synchroon gedetecteerd (met die 5Hz chopper)en dan pas AD conversie gedaan.
Wat wil je verder met die FFT doen?
- De modulatie loopt via dezelfde uC en wordt inderdaad gesynchroniseerd.
- Waarom een FFT? Dat is gebasseerd op de informatie van verschillende bronnen (advies leveranciers en een partij die medeontwikkeld). Eigenlijk ben ik dus op zoek naar argumenten dat ik kan stoppen met deze FFT benadering en "gewoon" naar de niveau's van mijn blokgolf kan kijken.
- Wat doe ik met de FFT? Ik moduleer met IR lichtbron met 5Hz, en ik pik op de FFT het niveau van precies 5Hz er uit. Bij verandering van mijn gasmengels verandert dit niveau.
stecj366
Sonar is meer dan Ping...
Dan zou ik een IIR bandpass filter rond 5Hz zetten, en de RMS in de filter uitgang berekenen. Komt quasi op hetzelfde neer, veel minder berekeningen. Eventueel kan je eens naar Goertzel algoritme kijken
RobK
Vertel welk probleem je wilt oplossen, niet met welke oplossing je een probleem hebt.
Aangezien je hebt te maken met één vaste frequentie zou je eens moeten kijken naar het Goertzel algoritme.
Bandpassfilteren alleen is niet voldoende. Je wilt het signaal in de donkerperiode (lekstroom, ruis) aftrekken van het signaal in de lichtperiode.
Met 1 of 2 cmos switches maak je zo een synchrone detector die dat doet en dat is bovendien al inherent een bandpassfilter. Zie bv lock in amplifier, alleen hier heb je de lock in niet nodig omdat je al een mooi referentie signaal van je chopper hebt.
Je kan ook eens kijken naar een compleet IC zoals AD630
http://www.analog.com/static/imported-files/data_sheets/AD630.pdf
Maar je zou dat ook digitaal kunnen doen. Je sampelt bv 16x je signaal in de lichtperiode en telt deze bij elkaar op. Idem 16x in de donkerperiode. Het donkersignaal trek je van het lichtsignaal af en stuur dit door een digitaal lowpass filter.
[Bericht gewijzigd door floppy op (19%)]
stecj366
Sonar is meer dan Ping...
Dat is niet wat hij nu met zijn FFT doet... De berekeningen van zijn FFT kunnen voor een enkele frequentie wel benaderd worden door bandpass filter en rms berekening. Maar dat neemt niet weg dat jouw synchrone detectie optimaler is.
Alles hangt af van de signal-noise verhouding. Als die heel goed is, is synchrone detectie niet nodig..
Volgens mij beschrijven jullie gewoon dezelfde meting.
De één met het verschil tussen het niveau (gemiddeld) tijdens licht en het niveau (gemiddeld) tijdens donker.
De ander meet de (gemiddelde) amplitude van het signaal dat ontstaat doordat het achtereenvolgens licht en donker is.
Dat komt dus op hetzelfde neer. Alleen pak je in het eerste geval de hele periode mee (dus de blok), terwijl je in het tweede alleen de 1e harmonische van de 5Hz meet (dus de sinus).
Als het te meten signaal erg zwak is, is er een voordeel de hele periode te gebruiken.
Kortom, een synchrone detector is het effectiefst. Het eenvoudigst is die in software te maken, want dan hoeft er aan de schakeling niets te veranderen ten opzichte van de FFT methode.
@rbeckers: mijn ADC is 16bit
Op 29 augustus 2012 08:29:56 schreef Frederick E. Terman:
Volgens mij beschrijven jullie gewoon dezelfde meting.
De één met het verschil tussen het niveau (gemiddeld) tijdens licht en het niveau (gemiddeld) tijdens donker.
De ander meet de (gemiddelde) amplitude van het signaal dat ontstaat doordat het achtereenvolgens licht en donker is.Dat komt dus op hetzelfde neer. Alleen pak je in het eerste geval de hele periode mee (dus de blok), terwijl je in het tweede alleen de 1e harmonische van de 5Hz meet (dus de sinus).
Als het te meten signaal erg zwak is, is er een voordeel de hele periode te gebruiken.Kortom, een synchrone detector is het effectiefst. Het eenvoudigst is die in software te maken, want dan hoeft er aan de schakeling niets te veranderen ten opzichte van de FFT methode.
Zo zie ik het in ieder geval ook. Mijn signaal is niet heel zwak, maar het verschil tussen de amplitude van mijn bloksignaal (+/-800mV) en het niveau van mijn 5Hz sinus in mijn FFT(200mV) is best groot.
Vandaag is een aangepaste software versie van de uC klaar en kan ik een vergelijking maken tussen FFT benadering en niveau bepaling van de blokgolf maken.
Als je toch de FFT wil gebruiken moet je natuurlijk niet alles uitrekenen, als je slechts 1 frequentie wil hebben kun je enkel die uitrekenen.
Zie ook goertzel algortime.