Hallo, ich hab einen Polyphase Dezimator und Interpolator. Wie ich rausgefunden habe, braucht man den Dezimator einfach nur halb so schnell Takten. Der Interpolator bereitet mir aber noch Kopfzerbrechen. Ich hab einen Tiefpass+Dezimator, der funktioniert. Und ich hab einen Tiefpass+Interpolator, der funktioniert nicht. Berechnet wurde alles nach [1]. Also das Matlab-Zeug auf der Seite funktioniert natürlich, meine VHDL-Implementierung will nicht so recht und ich weiß nicht was Matlab da überhaupt implizit noch alles macht ... Taktet man den einfach nur 2mal so hoch, oder muss man trotzdem noch für jedes 2te Sample eine 0 einfügen? Fehlersuche ist irgendwie schwierig, wenn man das genaue Funktionsprinzip nicht kennt und man findet scheinbar nur bei ieeexplorer was brauchbares und da kostet es scheinbar was ... Mfg Thomas Pototschnig [1]: http://www.mathworks.fr/products/filterdesign/demos.html?file=/products/demos/shipping/filterdesign/pr2chfilterbankdemo.html
>>Also das Matlab-Zeug auf der Seite funktioniert natürlich, meine >>VHDL-Implementierung will nicht so recht hm >>Taktet man den einfach nur 2mal so hoch, oder muss man trotzdem noch für >>jedes 2te Sample eine 0 einfügen? Dezimation: filtern und dann jedes x-te sample wegschmeissen. Interpolation: 0 einschieben (oder sample wiederholen), dann filtern. Wie soll denn das sonst mit der Interpolation gehen, wenn Du 10 samples/s reinkriegst, aber 20/s rausschiebst !!?? Durch das Einschieben der Nullen erhälst Du im Spektrum zusätzliche Frequenzkomponenten, die Du rausfiltern willst/muß. Das ist in Matlab einfach zu sehen: nimm eine Sinuswelle, schiebe zwischen zwei samples immer ne Null rein und kuck Dir das Spektrum von dem Ding an, damit ist alles erklärt. Die Filterei des interpolierten Signals hat mit Polyphase erstmal nix zum tun. Bei einer FIR Filterstruktur kannst Du dann natürlich ausnutzen, daß jeder x-te sample 0 ist. >>Fehlersuche ist irgendwie schwierig, wenn man das genaue Funktionsprinzip >>nicht kennt Das ist wohl so, und daß Du in VHDL debugst machts nicht einfacher. Cheers Detlef
> Die Filterei des interpolierten Signals hat mit Polyphase erstmal nix > zum tun. Bei einer FIR Filterstruktur kannst Du dann natürlich > ausnutzen, daß jeder x-te sample 0 ist. Naja ... Bei der Matlab-Implementierung wird ein Tiefpass mit einem Polyphase Interpolations, bzw Dezimationsfilter kombiniert. Die werden dann Hlp und Glp genannt. Die Polyphase struktur kann ich mir schon vorstellen, die kommt ja durch die Ausnutzung der 0er zustande, die man in den FIR reinschieben würde. Soweit ich das verstehe braucht man das beim Polyphase Interpolator nicht machen, also man taktet die Samples einfach 2 mal so schnell in den Filter rein (d.h. 2 Samples sind immer gleich) und kriegt das richtige in der gewünschten Samplerate raus. Ist das so? Mfg Thomas Pototschnig
So ist das. Wenn Du jeweils eine Null einschieben willst, teilst Du Dein FIR Filter in even/odd Koeffizienten. Die Eingangsdaten schiebst Du in beide Filter rein, für ein Eingangssample gibts eine Ausgangssample aus dem Filter mit den even und eins aus dem Filter mit den odd Koeffs., also doppelt so viele. Das ist aber einfach zu sehen, wenn man sich vorstellt, wie die interpolierenden Nullen in ein FIR filter reinlaufen und wie man die Multiplikation mit 0 vermeiden kann. Cheers Detlef
Hallo nochmal :-) Also meine Filter machen jetzt das was sie sollen, allerdings scheint die filter()-Funktion von Matlab doch noch 0er einzufügen. Wenn man nur die Filterkoeffizienten verwendet, dann besitzt der Filter eine Verstärkung von 2. Wenn man 0er einfügt, beträgt die Skalierung wieder 1. Das Hauptproblem bei meinem VHDL-Code lag aber natürlich woanders ;-) So oder so, meine "perfect reconstruction" 2-Kanal-Filter-Bank funktioniert jetzt ... Danke für die Hilfe :-) Mfg Thomas Pototschnig
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.