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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.