Forum: Digitale Signalverarbeitung / DSP / Machine Learning Asynchronous Sample Rate Converter - Implementierungsfrage


von DSP Noob (Gast)


Lesenswert?

Hey Leute,

folgendes Problem:

Ich arbeite an einem Hobbyprojekt mit dem STM32F7 wo dieser per SPDIF 
ein Audio-Signal empfangen soll und das Signal per I²S rausgeben soll. 
Der STM32 ist hier im I²S slave-mode (der Takt kommt von extern).

Klar könnte ich das mit einem SPDIF Receiver-Chip und einem ASRC chip 
realisieren, will es aber selber lösen wegen dem Lerneffekt :-)
Außerdem muss der uC noch paar andere Managementsachen auf dem Board 
machen.

Wie auch immer:
Ich habe mal im Internet ein bisschen gestöbert und bin hier auf ein 
Patentschreiben von Altera gekommen.
https://patents.google.com/patent/US7369637B1/en
Für Hobbyzwecke/Lernzwecke mit nicht-kommerziellen Absichten sollte es 
in Ordnung sein, zu versuchen, ein Patent nachzuimplementieren.

Prinzipiell ist es mir top-level zumindest soweit klar wie das Teil 
funktionieren.
Man hat die Farrow-Struktur am Eingang, die jedes mal "geupdated" wird, 
wenn ein neues Sample reinkommt. Mithilfe dieser Struktur lässt sich 
dann ein Sample beliebigen Phasenwinkels interpolieren, den man über das 
µ angibt, welches an die Multiplizierer der Farrow-Struktur geht (eine 
kommabehaftete Zahl zwischen 0-1, die angibt wie groß das Delay sein 
soll). Ich würde hierzu einfach alles direkt in floating-point rechnen - 
sollte also kein Problem sein.

Mir wird aus dieser Patentschrift nur ein paar Sachen nicht ganz so 
klar:
- Wie genau wird dieser µ Wert bestimmt -> klar man braucht als Trigger 
jeweils die exakte Eingangsfrequenz und die exakte Ausgangsfrequenz. 
Daraus wird dann der "Conversion Faktor" berechnet. Sagen wir mal am 
Eingang habe ich 48.0001 kHz und am Ausgang 47.9998 kHz -> Wären also 
0,97958 oder so. Das wäre ja noch recht einfach mit Timern oder so zu 
realisieren.
Mein Bauchgefühl ist aber, dass der Phasenwinkel sich ja immer 
weiterschieben muss und hier verstehe ich nicht, wie genau da die 
Berechnungen weiterlaufen um für jedes interpolierte Sample jedes mal 
genau das µ zu bestimmen.

Außerdem verstehe ich nicht, was die Triggerbedingung am Fifo ist um 
hier einen Eintrag zu schreiben. Auf der Lese-Seite wird der Fifo mit 
der Ausgangsfrequenz geleert. Über das zeitliche Mittel müssen also 
genauso viele Einträge geschrieben werden, weshalb ich eigentlich 
dachte, dass man jedes mal ein Sample interpoliert, wenn es der Ausgang 
"anfragt". Wozu dann aber der Fifo?

Vielleicht kann es mir einer erklären. Wäre super lieb, danke!

Grüße

von Michael W. (Gast)


Lesenswert?

DSP Noob schrieb:
> wie genau da die
> Berechnungen weiterlaufen um für jedes interpolierte Sample jedes mal
> genau das µ zu bestimmen.
du musst den Interpolationspunkt so lange schieben, bis er am Ende eines 
Samples angekommen ist und dann um 1 Sample nach vorn oder hinten 
springen.

Das wirst du aber mit einem DSP nicht hinbekommen, weil du die Frequenz 
nicht genau genug bestimmen kannst, um den T-Wert auf der Quell- und 
Zielseite zu haben.

Du musst also über mehrer Punkte interpolieren und einen Puffer 
verwenden.

von Kommentator (Gast)


Lesenswert?

DSP Noob schrieb:
> Für Hobbyzwecke/Lernzwecke mit nicht-kommerziellen Absichten sollte es
> in Ordnung sein, zu versuchen, ein Patent nachzuimplementieren.
Das sollte auch für kommerzielle Zwecke kein Problem sein, denn wenn ich 
den Status der Registrierung ansehe, so steht dort ein "free" und zwar 
"paymant related". Da wurde also nichts mehr für gezahlt.

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.