Forum: Digitale Signalverarbeitung / DSP / Machine Learning Polyphase Interpolation


von Thomas P. (pototschnig)


Lesenswert?

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

von Detlef _. (detlef_a)


Lesenswert?

>>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

von Thomas P. (pototschnig)


Lesenswert?

> 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

von Detlef _. (detlef_a)


Lesenswert?

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

von Thomas P. (pototschnig)


Lesenswert?

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