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
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
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.
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
> 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.
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.
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.
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?
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?
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.
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
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?
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
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!)?