Polyphase Interpolation

OP #823247
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
#823314
>>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
OP #823365
> 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
#823508
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
OP #824613
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.