Hallo! mein ADC liefert 16 bit werte (int16).Die sindalle positive. Soll man für diese werte (ADC output) künstlich einen Offset bauen befor man die daten zu den FIR liefert, und das gleiche nochmal nach dem FIR? oder soll man einfach die glieferte daten von ADC direct mit FIR filtern. Mit offset meine ich zB: 0x0003 ist kleinner als 0x8000--> 0x8003 0x8002 ist großer als 0x8000-->0x0002.
Der Offset stellt sich dar als 'überlagerter Gleichspannungsanteil'. Wenn Dich das nicht weiter stört kanst Du den drinlassen. Man kann auch ein FIR-Filter bauen, das den überlagerten Gleichspannungsanteil mit rausschmeisst. Cheers Detlef
Danke detlef! ich muss an der uni mit einem schon programmierten dsp arbeite. es geht um optimierungsarbeiten (FIR filter). in dem dsp wird der output vom ADC (1024 samples,400 KHz sampling frequency) umgeklappt mit diesem code: int i; for (i=0; i<VEC_SIZE; i++) { if (data_adc[i] < 0x8000) { data_adc[i] = data_adc[i] | 0x8000; } else { data_adc[i] = data_adc[i] & 0x7FFF; } } das gleiche geschieht mit den Daten nach dem FIR (bandpass filter)filter. Ich blicke noch nicht durch warum das so ablaufen wird. ist da etwas faul? danke
Ich hätte diese Optimierung anzubieten, für C: Weiss aber nicht ob der DSP-Compiler was besseres oder überhaupt was draus macht.
1 | for (int i=0; i<VEC_SIZE; i++) |
2 | data_adc[i]^=0x8000; |
oder
1 | for (int i=0; i<VEC_SIZE; i++) |
2 | data_adc[i]+=0x8000; |
Warum man jetzt immer gleich "FIR-filtern" muß, verstehe ich nicht.Falls man nicht unbedingt auf linearen Phasengang angewiesen ist, gibts überhaupt keinen Grund ein FIR Filter zu verwenden (es hat bis auf die Phase nur Nachteile). Ein IIR Filter kann man bei wesentlich weniger Rechenaufwand die besseren Resultate liefern. Grüsse
Z.B. ein einfaches Schleifenfilter für eine digital nachgebildete PLL als FIR auszuführen ist natürlich quatsch. Aber ein FIR ist "deterministischer" oder "leichter" in der Berechnung, leichter anzupassen. Bei einem IIR ist die Anpassungsfähigkeit beschränkt, fordert evtl. eine andere Topologie oder von vorneherein einen komplexeren IIR. Der einzige wirkliche Nachteil bei einem FIR den ich sehe sind die evtl. höheren Stückkosten, die jedoch meist eine untergeordnete Rolle im Vergleich zu Grund-, Entwicklungs- und Folgekosten spielen. Man sollte halt nicht alles als plumpen FIR machen wie z.B. einen Bandpass/Tiefpass bei Fs/100 und 100MHz. Da kann man mit Multirate und Multiplizierern im Zeitbereich also Frequenz-addierern (Multiplikation im Zeitberiech wird Konvolution im Frequenzbereich) trotz FIR einen geringeren Aufwand bei immer noch entsprechender leichterer Anpassbarkeit erreichen.
Hi! Ich bin auf linearphasigkeit angewiesen da ich mit den I und Q kanäle die Amplitude und Phase der S-parameter bestimme. Macht man das so in dasp das man das signal vor dem Filter umkalappt und danach das gleiche wieder? wie verarbeitet ihr eure datan nach dem ADC? Danke euch
Vllt. macht der AD Wandler den Ausgangswert 0x8000 bei anliegenden 0 Volt, also einen Offset. Dann würde der angegebene Algorithmus in einen signed int16_t umwandeln. Ist eine Eigenschaft des ADC, da muß Du in dessen Datenblatt kucken. Cheers Detlef
Ich vermute eher der DSP ("data_adc" array) ist signed und der ADC ist unsigned. Vermutlich macht der DSP nur signed Arithmetik mit seinem MAC, will man den ganzen Wertbereich eines Datentyps nutzen. Ist eine Ariane Rakete nicht mal wegen einem Zahlenüberlauf und folgendem "coredump"/systemhalt abgestürzt?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.