Forum: Digitale Signalverarbeitung / DSP / Machine Learning Multirate CIC filter design


von Stefan W. (slev1n)


Lesenswert?

Hey Leute,

ich hätte mal eine Frage zu einem multirate dezimierungs Filtersystem.

Ist es besser einen CIC Filter mit Downsamplingfaktor 512 zu nehmen oder 
zwei CIC Filter mit 64 und 8 als Faktor?

Da mein Signal, das ich rausfiltern will, bei 0Hz liegt, ist die 
aliasing Dämpfung mehr als ausreichend.

Hoffe ihr könnt mir helfen.

Gruß

Stefan

von Sascha (Gast)


Lesenswert?

Hallo,
0 Hz mit CIC viel Spaß.
Nimm Sinc X oder einen FIR Filter aber keinen CIC wass macht denn der 
Integrator und der Differentiator mit DC?

Gruß Sascha

von Stefan W. (slev1n)


Lesenswert?

Hey Sascha,

ich hätte mich klarer ausdrücken sollen. Der CIC ist nur zum Downsamplen 
gedacht. Danach nutze ich entweder einen exponentiell gewichteten 
Mittelwertbildner oder einen gleitenden Mittelwert. Beide funktionieren 
soweit gut.

Für den "rate change" verwende ich nur 2er Potenzen, wodurch es ein 
leichtes ist mittels Bitshift den "unity gain" bei 0 Hz zu haben.

Mir geht es gerade rein um die Vorteile zwei CIC filter hintereinander 
zu schalten bzw Nachteile, gegenüber einem einzelnen CIC Filter mit der 
selben Stage anzahl (=1) und selben Gesamt-"rate change". Oder hat doch 
ein einzelner CIC mit 2 stages mehr Vorteile?

von W.S. (Gast)


Lesenswert?

Moment mal.. Du willst um den Faktor 512 die Samplerate dezimieren? Und 
du willst ein Signal um und bei Null dabei herausfiltern?

Warum digitalisierst du denn dann zuerst mit einer derart übertriebenen 
Samplerate?

Warum dezimierst du denn nicht einfach mit nem gleitenden Mittelwert, 
der ja die prinzipielle Signalform unverfälscht durchläßt und 
applizierst dann ein normales FIR Tief- oder Bandpsß-Filter je nach 
gewünschter Signallage?

W.S.

von derguteweka (Gast)


Lesenswert?

Moin,

Irgendwo mein' ich mich dunkel zu erinnern, dass es bei grossen 
Interpolations/Dezimationsverhaeltnissen vom Aufwand her guenstiger ist, 
das auf mehrere Haeppchen verteilt zu machen.

Kann mich aber grad' nicht erinnern, woher ich das hab' und wie dann die 
Abstufungen moeglichst guenstig sind - wird aber wohl auch davon 
abhaengen, was fuer eine Sperrdaempfung du brauchst, etc. pp.

Gruss
WK

von Tomb (Gast)


Lesenswert?

Also aus Sicht einer Hardware Implementierung (ASIC oder FPGA) ist ein 
einzelner CIC effizienter als mehrere zu Kaskadieren. Brauchst dir nur 
die Anzahl der bits für Register/Addierer für beide Fälle herleiten um 
den Unterschied zu sehen.

CIC nimmt solange der Roll-Off steil genug ist und die Samplingfrequenz 
nicht zu hoch ist (dann nimmt man eher Polyphase Strukturen). Mit 
steigender Ordnung nähert sich der CIC einem Gauss Filter an und die 
Stop-Band Attenuation wird größer, aber der Filter wird nicht mehr 
steiler. Ab einer gewissen Sampling Rate muss man dann auf andere 
Strukturen zurückgreifen. Sehr effizient sind dann Halfband-Dezimatoren.

von Tomb (Gast)


Lesenswert?

Sascha schrieb:
> 0 Hz mit CIC viel Spaß.
> Nimm Sinc X oder einen FIR Filter aber keinen CIC wass macht denn der
> Integrator und der Differentiator mit DC?

Der DC Gain von einem CIC (mit minimalen Delay) ist N^M, wobei N die 
Ordnung und M der Dezimationsfaktor ist. Er ist keineswegs 0, noch 
unendlich, da sich Null- und Polstellen exakt auslöschen (Fixed Point 
vorrausgesetzt).

W.S. schrieb:
> Warum dezimierst du denn nicht einfach mit nem gleitenden Mittelwert,
> der ja die prinzipielle Signalform unverfälscht durchläßt und
> applizierst dann ein normales FIR Tief- oder Bandpsß-Filter je nach
> gewünschter Signallage?

Ein CIC erster Ordnung ist ein Moving Average Filter, aber meist nicht 
ausreichend aufgrund der schlechten Stop-Band Attenuation und dem damit 
verbundenen Aliasing.

Effizienterweise dezimiert man solange mit einem CIC filter passender 
Ordnung bis die Steilheit des Filters nicht mehr ausreicht und fügt dann 
noch ein paar (meistens zwischen 1-3) Half-band Dezimator Stufen hinzu 
bis man die Sampling-Frequenz auf eine Mindestmaß (oft im Bereich der 
doppelten Nyqistfrequenz) reduziert hat.
Bei sehr hohen Samplingraten (zb eines Sigma-Delta ADCs) kann es 
sinnvoller sein einen Polyphase-Filter als ersten Dezimator zu verwenden 
um den Stromverbrauch bzw den kritischen Delaypfad zu reduzieren.

von Stefan W. (slev1n)


Lesenswert?

Hey Leute,

erstmal vielen Dank für die Antworten. Ich hätte zu Beginn noch genauer 
erklären sollen, was mein Gesamtkonzept ist.

Ich baue auf einem FPGA einen Lock In Verstärker. Ich habe eine 
Samplerate von 48kHz und mein Signal liegt bei ca. 4200Hz. Ich 
demoduliere mein Eingangssignal mit einem Sinus und Cosinus mit 
derselben Frequenz. Somit rutscht die Hälfte der Energie des 
Eingangssignals auf 0 Hz, die andere Hälfte auf ca. 8400kHz. (Dieser 
dual phase lock in ist unabhängig von der Phase des Signals)

Nun kommt das Tiefpassfiltern. Da das SNR ungefähr bei -60dB liegt, muss 
man schon recht viel wegfiltern. Ich habe ein bereits funktionierendes 
System, dass aus 2 CIC Filterstufen und einem anschließenden rekursiven 
moving average (MA) bzw. exponentiell gewichteten moving average (EWMA) 
besteht. Die beiden average filter möchte ich später vergleichen.

Grundsätzlich funktioniert mein System, ich wollte es nur optimieren.
CIC Filter nehme ich wegen dem geringen Ressourcenverbrauch. Beim 
rekursiven MA verbraucht man viel RAM, beim EWMA Multiplikatoren, mal 
sehen, wovon ich am Schluss mehr habe.

Das mehrere stages gut sind beim Dezimieren habe ich bisher nur für 
Filter mit Tabs gelesen. Hier aber kurz meine Erklärung, die ich mir 
selbst in den letzten Tagen "ausgedacht" habe.


2 CIC filter verbrauchen mehr Ressourcen als 1er aber, die aliasing 
Dämpfung ist besser. Beim ersten Filter (fs=48kHz, R=64) liegt die 
Dämpfung bei 57dB, sollte man später auf etwa fc=1Hz TP filtern. Beim 
zweiten Filter wurde die Bandbreite des Signals nun schon auf 750Hz 
heruntergesampled, was das SNR deutlich verbessert hat, da das Rauschen 
direkt proportional zur Wurzel der Bandbreite ist. Nun reichen schon die 
39dB aliasing Dämpfung. Bei der Version mit nur einem CIC Filter, müssen 
die 39dB für das Rauschen mit der Bandbreite von 48kHz reichen.

Nichts desto trotz, werde ich wohl einen CIC filter 2. Ordnung nehmen, 
also mit 2 Integrator und Kamm stages. Dieser hat bei R=512 und späteren 
Filtern mit den averagern auf fc=1Hz ca. 80dB Dämpfung. Da ich nur 
zweier Potenzen für R nehme, kann ich den gain durch bit shiften nach 
rechts wieder auf unity bringen und auch das Prolem mit dem größeren 
Bitwachstum bei CIC filter 2. Ordnung somit lösen.

Viele Grüße

Stefan

: Bearbeitet durch User
von Sascha (Gast)


Lesenswert?

Hallo Stefan W.,
warum überhaupt einen FPGA bei solch kleinen Frequenzen, da kommt man 
schon ganz gut mit einem Cortex M4 Controller sogar mit Floating Point 
(FPU-Unit) hin. Soll jetzt aber keine Kritik sein.

Gruß Sascha

von W.S. (Gast)


Lesenswert?

Sascha schrieb:
> bei solch kleinen Frequenzen..

sehe ich ähnlich. Von 48 kHz per simpelstem gleitendem MW aus zwei 
Samples herunter auf 24 kHz und dann ein FIR Bandpaß - und das geht 
alles mit einem kleinen 100 MHz Cortex M4F in float für so etwa 3 Euro.

...es sei denn, der TO hat eigentlich was ganz anderes im Sinn und 
selbiges hier bloß nicht geschrieben.

W.S.

von Tomb (Gast)


Lesenswert?

Stefan W. schrieb:
> Nichts desto trotz, werde ich wohl einen CIC filter 2. Ordnung nehmen,
> also mit 2 Integrator und Kamm stages

Nur als Tipp. Ein CIC 1. Ordnung lässt sich auch mittels Integrate & 
Dump implementieren -> 1 Akkumulator mit Reset.

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.