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
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.
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?
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 :-)
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
Wie feinstufig kannst Du damit mischen? Mir ist noch nicht klar, wie das Ergebnis aussehen soll. Könntest Du ein Beispiel bringen?
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.
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.
Könntest du das etwas weiter ausführen? Also was meinst du genau mit "teilen"? Hab leider beim Thema meine "fachfremden" Kompetenzen überschätzt. ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.