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.
Rolf S. schrieb: > Darf man mal fragen, was das werden soll? > > Rolfi Klar, am Ende wird es ein harley Simulator.
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
http://www.samplerbox.org/ ok ok, aber das Prinzip ist ähnlich, es geht um Multisamples mit Interpolation dazwischen...
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!)?
Das ist quatsch mit dem resamplen. Das was Du brauchst ist ein granular synthesis.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.