Forum: Digitale Signalverarbeitung / DSP / Machine Learning Resampling von zwei Kanälen


von Audioaner (Gast)


Lesenswert?

Moin,

für ein Projekt muss ich zwei I2S PCM Kanäle (Rechts/Links) unabhängig 
zueinander resamplen. Es wird immer jeweils ein Kanal down- und das 
andere up resampled. Eventuell muss das ganze auch noch durch einen 
tief-pass Filter.
Das Ergebnis muss dann wieder mit unterschiedlichen Pegeln in den 
Kanälen vermischt werden.
Beispiel:
Links:   L=1,5 (L=3, D=2) > Pegel: 80%
Rechts:  D=1,5 (L=2, D=3) > Pegel: 20%
Frequenz der Abtastratenänderung liegt bei 100Hz (gtriggert durch ein 
externes Signal)

Die Source (I2S DMA curricular stream) ist 4096 lang (int16)bei 8kHz.
Ausgang ist Mono.

Mit welchem DSP würde sich das einfach bewerkstelligen lassen, oder 
brauche ich dafür überhaupt einen DSP, da der I2S Stream vom STM32F446 
kommt, könnte dieser diesen Job ja erledigen?!
Das Problem liegt eher bei den 100Hz Änderungen der Samplingrate.
Je Kanal 2048 Werte durch drei Filter, wo zwischendurch auch 
interpoliert wird und dadurch mehr Werte zustande kommen die durch den 
Filter gehen müssen. Ich vermute mal das der STM32F4 mit 180MHz es nicht 
schaffen könnte innerhalb von 10ms die 6 Filter Durchgänge zu erledigen.

Danke für die Hinweise und Grüße,
Der Audioaner

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Audioaner schrieb:
> Ich vermute mal das der STM32F4 mit 180MHz es nicht
> schaffen könnte innerhalb von 10ms die 6 Filter Durchgänge zu erledigen.

Ohne, dass ich jemals was auf einem STM32 gemacht haette: Doch, ich 
denke schon, dass der das kann. Wenn er nicht vorher schon am Japsen 
war.
Mir ist noch nicht ganz klar, was genau du machen willst - 2x 
Samplerateconversion und danach gewichtetes Aufaddieren; OK.
Aber was ist die Frequenz der Abtastratenaenderung?
Was mit jeweils welcher Rate muss da jetzt rein und raus?


Gruss
WK

von Audioaner (Gast)


Lesenswert?

Die Abtastrate beider Kanäle wird jeweils entweder nach unten oder nach 
oben geändert. Zweimal nach oben oder nach unten kommt nicht vor. Zudem 
soll der Pegel beider zusammen in Summe 100 Prozent betragen.
Diese drei Änderungen müssen alle 10ms also in 100Hz geschehen. Die 
Parameter hierfür werden durch ein externes Signal definiert.

von Dergute W. (derguteweka)


Lesenswert?

Also z.b. sowas:
Aufm I2S Eingang A kommt was mit 8100Hz Samplingrate an, aufm I2S 
Eingang B mit 7900Hz; die sollen beide auf 8000Hz Samplingrate gebracht 
werden und gewichtet aufaddiert. Gewichtung und Eingangssamplingraten 
aendern sich alle 10msec.

Klingt fuer mich immernoch machbar. Braucht halt 'ne Tabelle irgendwo 
mit vielen Filterkoeffizienten und dann fuer jedes Sample ein FIR-Filter 
N-ter Ordnung, das sich seine Koeffizenten eben aus dieser Tabelle 
angelt, danach noch ein bisschen Rechnerei welchen Koeffizientensatz 
fuer's naechste Sample und fertsch. Filterordnung N wird wohl auch eher 
< 10 sein; Multiplikationen 16x16bit; sollte die CPU also mit Rechnen 
nachkommen koennen.

Gruss
WK

von Rolf S. (audiorolf)


Lesenswert?

Darf man mal fragen, was das werden soll?

Rolfi

von --- (Gast)


Lesenswert?

> Filterordnung N wird wohl auch eher < 10 sein;

Resampling braucht wesentlich höhere Filterordnungen.
Insoweit ist die Frage des TO schon berechtig.
Mit pauschal < 10 wird das nichts.

von Audioaner (Gast)


Lesenswert?

Dergute W. schrieb:
> Also z.b. sowas:
> Aufm I2S Eingang A kommt was mit 8100Hz Samplingrate an, aufm I2S
> Eingang B mit 7900Hz; die sollen beide auf 8000Hz Samplingrate gebracht
> werden und gewichtet aufaddiert. Gewichtung und Eingangssamplingraten
> aendern sich alle 10msec.


Fast richtig. Nur das beide Kanäle mit 8kHz kommen, der eine wird auf zb 
7kHz runter gesetzt und der andere auf 9kHz hoch. Beim ersteren wird der 
Pegel auf 80 und beim zweiteren auf 20 Prozent reduziert.

von Rolf S. (audiorolf)


Lesenswert?

Wenn ich Weka richtig verstehe, resampelt er nicht pauschal mit Rate1 
gegen Rate X über alle Frequenzen, sondern benutzt mehrere optimierte 
Filter für alle erdenklichen Konstellationen. Die liessen sich in der 
Tat auf wenige TAPs herunterbrechen.

von Audioaner (Gast)


Lesenswert?

Rolf S. schrieb:
> Darf man mal fragen, was das werden soll?
>
> Rolfi

Klar, am Ende wird es ein harley Simulator.

von Rolf S. (audiorolf)


Lesenswert?

Ein Harley Simulator? Sound Design also?

von Audioaner (Gast)


Lesenswert?

Rolf S. schrieb:
> Ein Harley Simulator? Sound Design also?

Ja genau

von Rolf S. (audiorolf)


Lesenswert?

Wieso muss man dort Klänge resampeln? Reicht es nicht, ein sample eines 
Auspuffs und Motors aufzunehmen und zu mischen?

Woher kommen die 10ms Taktumschaltung?

Dir ist klar, dass Du dann immer ein hartes 100Hz-Knacken im Signal 
haben wirst?

von Audioaner (Gast)


Lesenswert?

Rolf S. schrieb:
> Wieso muss man dort Klänge resampeln? Reicht es nicht, ein sample
> eines
> Auspuffs und Motors aufzunehmen und zu mischen?
Es wird nicht Auspuff und Motor vermischt, sondern Sounds aus 
verschiedenen Drehzahlbereichen. Man kann ein einzelnes Soundstück nur 
mit dem Faktor 2 up- oder downsamplen. Damit es noch authentisch wirkt, 
werden zwei Sounds vermischt.

Beispiel:
Ich fahre auf dem Simulator mit 125. Den Sound dafür erzeuge ich aus 
zwei Sound samples eins a)normalisiert auf 100 und eins b)normalisert 
auf 150.
a) wird einem up sampling unterzogen und 60% Pegel
b) einem downsampling unterzogen und 40% Pegel
Das wird solange vermischt bis ich 150 erreicht habe, dann b) mit c) 
vermischt usw.
>
> Woher kommen die 10ms Taktumschaltung?
Aus der Beschleunigung der Harley
>
> Dir ist klar, dass Du dann immer ein hartes 100Hz-Knacken im Signal
> haben wirst?
Wenn ich die samples sauber (Ende und Anfang mit längerem Nulldurchgang) 
als Loops immer wieder abspiele dann eher nicht, oder?

In Spielen macht man dies auch so denke ich.


Um auf meine Ursprungsfrage zurück zu kommen, welcher DSP ( wenn ich 
denn eines brauche) wäre für dieses Vorhaben angebracht?

von Audioaner (Gast)


Lesenswert?

Audioaner schrieb:
> Beispiel:
> Ich fahre auf dem Simulator mit 125. Den Sound dafür erzeuge ich aus
> zwei Sound samples eins a)normalisiert auf 100 und eins b)normalisert
> auf 150.
> a) wird einem up sampling unterzogen und 60% Pegel
> b) einem downsampling unterzogen und 40% Pegel
> Das wird solange vermischt bis ich 150 erreicht habe, dann b) mit c)
> vermischt usw.

Zusatz: Es wird nicht mit den gleichen Faktoren resampled, sondern 
dieser wird der Drehzahl angepasst, also z.B. wenn ich weiter Gas gebe 
und auf 140 komme wird a) stärker up gesampled und b) niedriger, wobei 
dann auch der Pegel bei b) näher an die 100% kommt.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

--- schrieb:
>> Filterordnung N wird wohl auch eher < 10 sein;
>
> Resampling braucht wesentlich höhere Filterordnungen.
> Insoweit ist die Frage des TO schon berechtig.
> Mit pauschal < 10 wird das nichts.

Na, das nenn' ich mal konstruktiv.


Da mittlerweile ja der TO sich langsam die Rosinen aus der Nase ziehen 
laesst, wobei z.B. sich die 2xI2S aus dem Eingangspost als voelliger 
Mumpitz herausgestellt haben, kommt man ja den eigentlichen Problemen 
naeher:
Weiter voelliger Mumpitz ist ja dann "unabhängig zueinander resamplen".
Da ist nix unabhaengig. Die beiden Samples muessen doch einigermassen 
phasenstarr zueinander bleiben, egal bei welcher 
Drehzahl/Resamplingrate. Wenns zwischen denen irgendwelche Schwebungen 
gibt, dann klingt das sicher sehr eigenartig.

Aber sei's drum. Ich bleib' dabei: Dafuer brauchts keinen DSP, das kann 
ein STM32. Aber natuerlich nicht, wenn die Samples in einer Datenbank 
stehen, die ueber ein javabasiertes Webfrontend virtualisiert wird...

Gruss
WK

von Audioaner (Gast)


Lesenswert?

Dergute W. schrieb:
>
> Da mittlerweile ja der TO sich langsam die Rosinen aus der Nase ziehen
> laesst, wobei z.B. sich die 2xI2S aus dem Eingangspost als voelliger
> Mumpitz herausgestellt

Da liegt wohl ein Missverständnis vor. Ich meinte einen I2S mit zwei 
Kanälen. Daher schrieb ich ja weiter unten, das zwischen Links und 
Rechts unterteilt wird.

Dergute W. schrieb:
> Weiter voelliger Mumpitz ist ja dann "unabhängig zueinander resamplen".
> Da ist nix unabhaengig. Die beiden Samples muessen doch einigermassen
> phasenstarr zueinander bleiben, egal bei welcher
> Drehzahl/Resamplingrate. Wenns zwischen denen irgendwelche Schwebungen
> gibt, dann klingt das sicher sehr eigenartig.

Was ist unter "Phasenstarr" zu verstehen?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Audioaner schrieb:
> Da liegt wohl ein Missverständnis vor.

Ja, wahrscheinlich. Ein I2S Kanal besteht immer aus einem L und einem R 
Signal, beide zwangslaeufig mit der selben Samplingfrequenz. Sei's drum.

Audioaner schrieb:
> Was ist unter "Phasenstarr" zu verstehen?

Wenn dein eines Sample das Mopped bei 2000U/min darstellt, dein anderes 
Sample das Mopped bei 4000U/min, und du willst 3000U/min hoeren, dann 
musst du das langsame Sample 1.5=3/2 mal schneller abspielen und das 
schnelle Sample mit 0.75 =4/3. Diese Faktoren muessen exakt zueinander 
passen und duerfen auch durch Rundungsfehler nicht auseinanderlaufen.
Auch nicht bei z.B. 3010U/min - nur kommen da nicht so schoene, "glatte" 
Zahlen raus. Aber sie duerfen trotzdem nicht auseinanderlaufen...

Gruss
WK

von Goldwing (Gast)


Lesenswert?

http://www.samplerbox.org/

ok ok, aber das Prinzip ist ähnlich, es geht um Multisamples mit 
Interpolation dazwischen...

von Goldwing (Gast)


Lesenswert?

Ne Harley wird in jedem Drehzahlbereich irgendwie anders klingen - sonst 
wär's ja langweilig... ;-) Um mehere Samples der Maschine kommt man 
deshalb, glaube ich, nicht rum, wenn es authentisch klngen soll. Sonst 
könnte man es gleich synthethisch machen.

Auf jeden Fall würde ich den Sound berechnen, bevor er mit I2S zu nem 
DAC geschoben wird.

Und ein, äh, F4, sollte das doch hinkriegen (ein Ton, keine 
Polyphonie!)?

von Bülent C. (mirki)


Lesenswert?

Das ist quatsch mit dem resamplen. Das was Du brauchst ist ein granular 
synthesis.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Interessanter Ansatz. Womit soll er synthetisieren? Mit Samples nehme 
ich an?

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.