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