Interpolation mit Filter oder per Hand?

Hallo,

folgende vielleicht etwas blöde Frage:

Ich möchte ein zeit- und wertdiskretes Signal von 5kSamples/s auf ca.

50kSamples/s in einem Mikrocontroller synchron interpolieren (upsamplen).

Wäre folgender einfacher Schleifen Ansatz dazu geeignet?

Differenz = Alter - Neuer; InterpolSummand = Differenz / Skalierungsfaktor; InterpolWerte[0] = Alter; for(i=1; i < Skalierungsfaktor; i++){ InterpolWerte[i] = InterpolWerte[i-1] + InterpolationsSummand; } DAC_FIFO = InterpolWerte; Warte_NeuerWert;

Oder sollte ich lieber tiefer in Digitale Filter einsteigen? Wikipedia hat mich über den Artikel zur Abtastratenkonvertierung [1] auf CIC-Filter [2] gestoßen.

Wenn ich richtig gezählt habe dann dürfte mein Schleifenansatz (Skallierungsfaktor = 8 und Division durch Bitschieben) insgesamt

1 + 3 + 8 = 12 Berechnungen umfassen.

Der dsPIC33FJ128GP802 bietet bei 40 MIPS / 5kSamples/s = 8000 Instruktionen pro Schleife, dass müsste doch eigentlich passen, oder?

[1]: [2]:

Grüße, Manuel

--
Die eMail-Adresse ist in angegebener Form gültig!
Reply to
Manuel J.
Loading thread data ...

"Manuel J." :

Das ist kein Filter sondern Interpolation. Die einfachste Realisierung verbindet die beiden Endpunkte durch Strecken (Polynom 1. Grades) - damit sind die Übergänge zwischen zwei Strecken relativ "eckig" - wenn Dir das genügt... Eine sehr gute Interpolation kann mit der kubischen Spline realisiert werden

- eine Verkettung von Polynomen 3. Grades -> die Übergänge sind schön gleichmässig, da die Spline unter Berücksichtigung der benachbarten Abschnitte berechnet wird. Ich denke mal für beide Algorithem findet man Sourcecode im Web.

M.

Reply to
Matthias Weingart

Aber auch ein lineares Filter, so wie immer, wenn Vergangenheits- (und/oder Zukunfts-)Werte linear kombiniert werden.

Man könnte auch sin(x)/x als Faltungskern verwenden.

Gruß Henning

--
henning paul home:  http://home.arcor.de/henning.paul
PM: henningpaul@gmx.de , ICQ: 111044613
Reply to
Henning Paul

Man könnte es auch sein lassen. Dieser Faltungskern gibt praktisch ausschließlich dann einen Sinn, wenn das Originalsignal aus einem digital reduzierten Oversamplingsignal oder einer komplett digitalen Wertschöpfungskette mit explizit bandbegrenzten Signalen stammt.

In allen anderen Fällen steht der Schaden durch die schlechte Lokalität dieses Filterkerns in keinem Verhältnis zu dem Nutzen aus dem steilstflankigen Frequenzgang.

--
David Kastrup
Reply to
David Kastrup

Hallo Matthias,

Matthias Weingart schrieb:

ich habe das Ursprungsposting nicht, deshalb kenne ich die Anforderungen zuwenig. Dieses Problem habe ich selbst kürzlich mit einem ARM LPC2468 und FIR-Filter als kleines Übungsprojekt gelöst, wobei ich relativ lange RIFF-Wave-Files als Samples in das Flash-ROM des Controllers programmiert habe, um irgendwelchen Sound abzuspielen. Die Anzahl der Samples ist dabei relativ hoch, sodaß die Lösung über Splines wegen der Konditionierung des zu lösenden Gleichungssystems mir nicht von vornherein sicher ist.

Ich habe die Samplerate gebrochen umgesetzt entweder nach oben oder nach unten mit wahlweiser Genauigkeit und als Interpolationsfilter einen FIR-Tiefpaß hoher Ordnung (ca. 300) genommen, der das offline filtert.

Im vorliegenden Fall, upsampling um 10, ist es relativ einfach. Nach jedem Sample werden 9mal 0en eingefügt, danach der nächste Sample usw. (Zero-Padding). Das Zero-Padding hat den Vorteil, daß die Sinx/x-Verzerrung eliminiert wird im Vergleich zum Wiederholen des alten Wertes.

Nach dem Zero-Padding kommt der Interpolations-TP, der konstante Gruppenlaufzeit hat (mit Remez erzeugt) mit Grenzfrequenz 2.5 KHz, damit sind alle Alias-Komponenten weg. Da die Laufzeit des Signals durch das FIR-Filter bekannt ist mit Tap/2, also 300/2, kann man sie leicht kompensieren. Nur an den Rändern sind einige wenige Samples falsch, da das Filter ein- und ausschwingen muß.

Man könnte anschließend noch dezimieren, um gebrochene Verhältnisse zu erreichen, ist hier aber nicht gefragt.

Das Ganze in Echtzeit zu machen dürfte schwieriger werden, mit Splines IMHO wohl so erstmal nicht möglich, mit Filtern müßte man schon einiges optimieren.

mfG. Winfried

Reply to
Winfried Salomon

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.