Forum: Digitale Signalverarbeitung / DSP / Machine Learning Daten aus ADC mit DSP filter verabeiten


von samir salim (Gast)


Lesenswert?

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.

von Detlef _. (detlef_a)


Lesenswert?

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

von samir salim (Gast)


Lesenswert?

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

von Dogbert (Gast)


Lesenswert?

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;

von Gebhard R. (Firma: Raich Gerätebau & Entwicklung) (geb)


Lesenswert?

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

von Dogbert (Gast)


Lesenswert?

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.

von samir salim (Gast)


Lesenswert?

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

von Detlef _. (detlef_a)


Lesenswert?

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

von Dogbert (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.