Forum: Digitale Signalverarbeitung / DSP / Machine Learning FIR/CIC Interpolation mit Matlab


von Kai W. (kaiw)


Angehängte Dateien:

Lesenswert?

Servus,

ich bin Student der Technischen Informatik und leider bislang noch nie 
wirklich in Kontakt mit digitaler Signalverarbeitung gekommen. Deshalb 
hoffe ich das ihr mir weiterhelfen könnt.

Folgendes Problem:
Je nach Eingangsparametern habe ich ein Multisinussignal, was um den 
Faktor 1-2000 interpoliert werden muss/soll. Wir wurde empfohlen dies 
durch eine Kombination aus FIR und CIC Interpolationsfiltern zu 
erreichen.

Aktuell nutze ich dazu in Matlab noch die Default-Werte des FIR 
Interpolationsfilters. Jedoch sieht das resultierende Spektrum recht 
bescheiden aus. Insbesondere die sehr schlechten Signalpegel um die 
Mittenfrequenz. Im Anhang findet ihr ein Bild des Spektrums 
(Signalabstand 1kHz, 101 Sinussignale).

Wie kann ich dies korrigieren? Was sollte ich ebenfalls beachten? Gibt 
es "leicht" verständliche Literaturempfehlungen?

Gruß
Kai

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Kai W. schrieb:
> Je nach Eingangsparametern
Die wären?

Kai W. schrieb:
> die Default-Werte des FIR
Die wären?

Einzustellen wäre das grundsätzlich ja so, dass die GF im Bereich der 
des CIC. Diese wiederum wäre auf das Spektrum der Eingangsfrequenz 
anzupassen.

Zur Verdeutlichung: Das Interpolationsfilter ist nichts anderes, als ein 
Tiefpass, der die diskreten Eingangswerte so glättet, dass Zwischenwerte 
entstehen, die am Ausgang wieder mit einer anderen (hier höheren) 
Frequenz abgetastet werden. Solange die Eingangsfrequenz und die 
Ausgangsfrequenz in einem ganzzahligen N:M Verhältnis stehen, ist das 
CIC vom Aufwand her das Optimum, um das effektiv zu leisten.

Kai W. schrieb:
> Wir wurde empfohlen dies
> durch eine Kombination aus FIR und CIC Interpolationsfiltern zu
> erreichen.
dies tut man oft, weil der CIC zwar einfach zu implementieren ist, aber 
einen beträchtlichen ripple im stop band besitzt, der bei allgemeinen 
Signalgemischen stört. Der zusätzliche FIR lindert das Problem.

Je nach Signalspektrum und Steilheit/Verzerrung des FIR macht es nun 
Sinn, die GF etwas vor oder hinter die des CIC zu legen. Bei hohen 
Anteilen des Signalspektrums im oberen Bereich wird man ein steiles FIR 
nehmen und dessen GF oberhalb der des CICs anordnen. Bei geringeren 
Anteilen des Signalspektrums im oberen Bereich kann man das FIR früher 
starten lassen, was zu geringeren Gesamtverzerrungen des CIC führt.

Solange eine ausreichende Abtastfrequenzreserve herrscht, kann man das 
FIR auch sehr flach laufen- und dennoch oberhalb des CIC einsetzen 
lassen. Bei APPs bei denen es auf Genauigkeit ankommt, wird man wiederum 
nur den FIR nehmen.

von Kai W. (kaiw)


Lesenswert?

Hallo Jürgen,

erstmal Danke für die bisherige Antwort.

>Eingangsparameter:
Die Abtastrate des Grundsignales beträgt im schlimmsten Fall 128kHz. Die 
des Ausganges ist mit 256MHz fix. Die Grundabtastrate ist aber wie 
bereits geschildert, im Bereich 1x bis 2000x 128kHz variabel. Beim 
Faktor 2000 findet natürlich keine Interpolation statt.
Stufen: 2000,1000,200,100,50,20,10,5,2,1

>Default-Werte:
Aktuell nur ein FIR-Filter in der MATLAB-Simulation implementiert.
--> Interpolationsfaktor (L) wird zur Laufzeit bestimmt
-->  The default filter design is a Nyquist filter with a cutoff 
frequency of pi/L and a gain of L.

Kann man denn einen CIC-Filter auf ein breites Band an 
Eingangsabtastfrequenzen optimieren?

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Nun ja, du müsstest eben die Koeffizienten tauschen.

Im einen Fall der 128kHz bekommst Du ja nur maximal 30-60kHz vernünftig 
rein und dort müsste auch die GF des Filters liegen. Umgekehrt wird die 
Eingangsrate nicht nur rum Spass erhöht werden: Man möchte sicher auch 
mehr Bandbreite transportieren.

>Stufen: 2000,1000,200,100,50,20,10,5,2,1
Da würde ich jetzt allerdings pauschal mit Faktor 2000 sampeln und DDC 
betreiben. Ist ja alles ganzahlig.

Was ist denn das eigentlich für eine seltsame APP, nebenbei gefragt?

Hört sich nach praxisferner Hausaufgabe vom Betreuer nach 3 Gläsern Wein 
an :-)

von Kai W. (kaiw)


Lesenswert?

Leider garnicht so praxisfern wie du denkst ;-)

Es geht darum Möglichkeiten zufinden, ressourcenoptimiert ein 
Multisinussignal auf einem FPGA zuerzeugen. Dabei gibt es eine größere 
Anzahl an Eingangskombinationen (Anzahl, Signalabstand, Mittenfrequenz)

Die oben geschilderte Möglichkeit greift auf ein "Grundsignal" zurück 
und ändert durch Upsampling und Mischen die Signalabstände und 
Mittenfrequenz.

Bin über weitere Ideen natürlich nicht abgeneigt :-D

von Fragender (Gast)


Lesenswert?

Wie feinstufig kannst Du damit mischen?

Mir ist noch nicht klar, wie das Ergebnis aussehen soll.

Könntest Du ein Beispiel bringen?

von Kai W. (kaiw)


Angehängte Dateien:

Lesenswert?

Das Ergebnis soll ein äquidistantes Kammspektrum mit N Linien sein. 
Dabei dürfen sich die Pegel um 5-10 dB ändern. Im Anhang findest du ein 
Bild einer anderen Implementierung von mir. Dort erzeuge ich den 
Multisinus mit entsprechend vielen Signalgernatoren und addiere das 
ganze. Allerdings ist diese Lösung nicht gerade Resourcenoptimiert.

Min. Signalabstand beträgt 1kHz und max. 2MHz.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Aha, das müsste sich aber mit einigen Repräsentanten machen lassen, wie 
bei einfachen Audio-Synthesizern, die nur die 11 Töne generieren und 
dann teilen. Wenn Deine Sinüsse nicht zu gut sein müssen, könntest Du 
digital mischen und filtern.

von Kai W. (kaiw)


Lesenswert?

Könntest du das etwas weiter ausführen? Also was meinst du genau mit 
"teilen"?

Hab leider beim Thema meine "fachfremden" Kompetenzen überschätzt. ;-)

von Kai W. (kaiw)


Lesenswert?

Das Problem mit verzerrten Spektrum habe ich gelöst. Ich hatte einfach 
zu wenige Datenpunkte für die MATLAB-Simulation generiert.

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.