Mahlzeit zusammen! Zur Zeit interessiere ich mich für eine Realisierung eines Nachhalleffektes mit einem DSP, doch bin ich noch fern von einer Realisierung, denn zwei Probleme beschäftigen mich. 1. Raumimpulsantworten Bisher habe ich das so gemacht, dass ich mir mit Hilfe von Cool Edit Raumimpulsantworten für die Faltung erzeugt habe. Was mich aber eher interessieren würde: Wie kann ich Raumimpulsantworten mit Hilfe von Matlab erzeugen? Irgendwie fehlt mir da der springende Gedanke. Ich kann mir ein Signal mit zB einer Sekunde Länge erzeugen und den ersten Wert auf 1 setzen. Dann möchte ich dieses Signal irgendwie so verarbeiten, dass ich in etwa eine Impulsantwort erhalte, wie es bei Cool Edit der Fall ist. Ich habe mittlerweile einige Theorien zur Impulsantworterzeugung gelesen, aber anscheinend nicht wirklich verstanden oder die Beschreibung war einfach zu mangelhaft, als dass ich damit irgendwas in Matlab habe umsetzen können. Auf jeden Fall habe ich schon das Schrödermodell angewendet mit 4 Kammfiltern und einem oder 2 Allpässen, aber diese Lösung ist nicht wirklich etwas, was ich Nachhall nennen würde. 2. Faltung Also wie oben geschrieben habe ich mir die Impulsantworten mit Hilfe von Cool Edit generiert, die ich dann auch erfolgreich mittels Faltung in Matlab verwenden konnte. Das Ergebnis klingt wirklich sehr gut! Aber auch hier habe ich erstmal ein Problem: Bei einer Soundlänge von ca. 3 Sekunden und einer Raumimpulsantwort von 1 sec. bei jeweils 44100 Hz habe ich also 44100 * 44100 = 1.944.810.000 MACs pro Sekunde!! Und an sich würde ich den Nachhall auch noch länger ziehen wollen. Angeblich soll Nachhall mit Hilfe von DSPs in Echtzeit möglich sein, aber ich kann mir das bei der hohen Anzahl an Berechnungen schwer vorstellen. Bei meiner Soundkarte kann ich sowas ja auch aktivieren und es scheint wunderbar zu funktioneren, also muß es ja irgendwie gehen, hehe. Unter Matlab habe ich bisher die Funktion "conv" verwendet, um die Signale im Zeitbereich zu falten, aber auch das dauert Ewigkeiten (ca. 32 Sekunden auf einem AMD Athlon 64 X2 6000+) und ist nicht besonders akzeptabel. Klar, der Rechner hat auch noch anderes nebenbei zu tun im Gegensatz zu einem DSP, aber ich hatte gehofft, es gibt eine weitaus schnellere Möglichkeit dies zu schaffen. Jetzt könnte ich natürlich die Signale mittels FFT in den Frequenzbereich transformieren und dann eine Multiplikation ausführen. Habe das mal ausprobiert aber das erste Problem, was ich dann hatte, war, dass Matlab sagte, dass die Dimensionen der Matritzen nicht übereinstimmen (klar, das Eingangssignal ist länger als die Raumimpulsantwort). Und so wirklich weiter bin ich an dieser Stelle mit meinen Gedanken noch nicht gekommen. So, ich habe mein Problem versucht mal ordentlich zu erläutern. Sollten noch Fragen offenstehen, bitte stellen. Ich würde gerne wissen, was ich da noch machen könnte, um mein Projekt voranzubringen. Ich bin für jeden kleinen Hinweis dankbar. Zur Information: Ich habe derzeit 2 Bücher: Digital Audio Effects (DAFX) und Digitale Audiosignalverarbeitung, beide von Zölzer. Leider sind mir die Bücher an dieser Stelle keine Hilfe, oder ich habe Informationen dummerweise überlesen, die mir da hätten weiterhelfen können. Im Voraus schon mal Danke für Denkanstöße! Gruß, Rafael
Bei Google-Books kann man z.B. "Faltungshall" suchen, 3 Fundstellen, am interessantesten vielleicht: http://books.google.de/books?id=CSDaWtY2PBkC&output=html "Die Wahrheit über Faltungshall" ISBN 3638831302 Beispielseiten 29-31 ("Vergleiche Faltungshall/Algorithmus-Hall"): http://books.google.de/books?id=CSDaWtY2PBkC&pg=PA29&img=1&zoom=3&hl=de&q=Faltungshall&sig=ACfU3U1WxJR6nAz4GSxeq5NLITWQRxfE7g http://books.google.de/books?id=CSDaWtY2PBkC&pg=PA30&img=1&zoom=3&hl=de&q=Faltungshall&sig=ACfU3U1usKvfYeWO22axEzKm10EiQ0T9aA http://books.google.de/books?id=CSDaWtY2PBkC&pg=PA31&img=1&zoom=3&hl=de&q=Faltungshall&sig=ACfU3U0piC-WLnz79yx7WvXNJsQ85dZAQQ
Auf die Idee bei Google Books zu schauen bin ich noch gar nicht gekommen. Danke für den Tip. Ich werds mir direkt anschauen!
Rafael Kania wrote: > Unter Matlab habe ich bisher die Funktion "conv" verwendet, um die > Signale im Zeitbereich zu falten, aber auch das dauert Ewigkeiten Nimm die Funktion fftfilt.
@Christoph: Leider kann ich bei dem Buch nur die ersten 9 Seiten lesen (ich bin mir aber ziemlich sicher, dass das Inhaltsverzeichnis fast komplett verlinkt war, als ichs das erste Mal aufgerufen habe, später jedoch nicht mehr). Die 3 unteren Links sind leider alle 404. @Andreas: Vielen Dank! Was ein Erfolgserlebnis :D Anstatt >30sec. habe ich jetzt eine Berechnungszeit von unter 0.2sec. für die Funktion gehabt! Also das ist ja schon nahezu perfekt :) Ich hab die Impulsantwort mal auf 176400 Samples, also auf 4 Sekunden gestreckt und selbst da bin ich noch unter 0.5 Sekunden Bearbeitungszeit für die Funktion. Besten Dank!
Ja die machen es einem nicht leicht, ohne Bezahlung Bücher zu lesen. Ich dachte mir schon, dass die direkten Links nur temporär funktionieren. Inhaltsverzeichnis und Register kann man bei Amazon eigentlich immer lesen, aber Google bietet ja mit der Suchfunktion den Zugriff auf wesentlich spezifischere Seiten, mit Lücken natürlich. Die Bilder bekomme ich in Firefox durch Rechtsklick neben das Buch und "Seiteninformationen anzeigen", dort "Medien" und dann muß ich die Adresse des Bildes finden, kopieren und in einem neuen Tab aufrufen. Dort läßt sich die "Grafik abspeichern" wieder mit Rechtsklick.
So, einige Wochen sind vergangen und mein Effekt funktioniert, so wie ich ihn haben will. Zumindest bei Matlab. Natürlich war die einfachste Methode die fftfilt-Funktion zu verwenden, ich habe das aber noch etwas zum Verständnis auseinandergepflückt, bzw einen Algorithmus verwendet, wie er in "Digitale Signalverarbeitung" 6. Auflage (Teubner-Verlag) beschrieben wurde. Dies funktioniert auch soweit, nur würde ich das gerne irgendwie auf Simulink modellieren bzw. das Ganze auf einen DSP bringen und da stecke ich fest... Bisherige Idee ist natürlich, auch hier die Overlap-Add-Methode zu verwenden, aber ich bin mir noch nicht so ganz im Klaren, wie ich das in Simulink umsetzen kann. Idee ist in etwa Folgende: - Eingabe von Sound (Mikro/Wavedatei) - Buffer von zB 512 Samples - Verlängerung der Impulsantwort auf die nächste 2er-Potenz (zB. 44100->65536) (m.H. von Zero-Padding?) - Verlängerung des im Buffer befindlichen Inhalts auf die Länge der Impulsantwort (auch Zero-Padding?) - FFT des Signals - Punktweise Multiplikation des Signals mit Impulsantwort (wie?) - IFFT des Produktes - Realteil aus dem komplexen Teil holen - Ausgabe des Blocks oder mehrerer gesammelter Blöcke (realer Anteil) Leider hapert es hier an der Umsetzung. Problem ist, dass ich nicht genau weiß, wie ich Simulink sagen kann, dass es immer wieder diese punktweise Multiplikation ausführen soll. Ein weiteres Problem ist: Wie kann ich durch Variablen bestimmen, um wieviel Samples das Signal im Buffer verlängert werden soll. Kann ja auch mal sein, dass ich die Impulsantwort modifizieren möchte. Ich hab bisher auch nichts im Netz dazu finden können... hat da jemand vielleicht den Durchblick? Danke im Voraus!
Hier noch eine kleiner, etwas unorthodoxer Tip fuer die Praxis: 1. In eine Kirche gehen (oder den Raum mit dem bevorzugten Nachhall) und ein gutes Mikrofon und Aufnahmegeraet mitnehmen. 2. In die Haende klatschen, oder einen Knaller zuenden, und das ganze aufnehmen. 3. Das Audio-Signal mit dem Sample falten (entsprechend normierter FIR-Filter) Was der Bloedsinn soll? Der Knall ist ein ausreichend guter Impuls, um die Impulsantwort (so also die Frequenzcharakteristik) des Raumes in kurzer Zeit zu bestimmen. Funktioniert ganz ordentlich bei kleinen Raeumen, bei Kirchen wird ab einer gewissen Nachhall-Länge das FIR zu ineffektiv, da kommt man mit einem simplen Delay besser weg. Ich weiss nicht, was die Experten dazu sagen (ich bin keiner), aber ich denke, fuer's Nahfeld kommst du mit einem kurzen FIR gut weg, und fuers Fernfeld kannst Du die Frequenzcharakteristik weglassen, oder einfach vor dem Delay noch einen Bandpass einbauen. Wie das alles in Simulink oder Matlab gehen soll, weiss ich nicht, aber auf einem ollen Motorola 56k hat das damals ganz ordentlich funktioniert. Gruss, - Strubi
Hey Strubi, danke für den Tip aber soweit bin ich schon ^^ Also ne Impulsantwort habe ich, Faltunghall mit Matlab ist kein Problem, aber das ganze mit Simulink zu modellieren bereitet mir Kopfschmerzen... :/
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.