Ich mach mal nen kleinen Zwischenbericht......
Wir hatten uns überlegt, dass Mikrofone und Soundkarten sehr präzise Geräte sind - jedenfalls im Vergleich zu Kraftverstärkern, Lautsprechern und Luftsäulen.
Ähnlich einem Tempomaten im Auto, der die Abweichung zwischen gewünschter und tatsächlicher Geschwindigkeit als Regelgröße für das automatische Gaspedal verwendet, wollen wir das Originalsignal mit dem Mikrofonsignal vergleichen und aus dieser Abweichung das Originalsignal so beeinflussen, dass sich die Abweichung vermindert.
Dazu spielen wir die Originaldatei per Soundkarte ab und nehmen gleichzeitig das Mikrofonsignal per Soundkarte auf. Die Originaldatei entspricht dem Sollwert und das Mikrofonsignal dem Istwert des Luftdrucks vor der Mikrofonmembran.
Zu unserem Entsetzen haben wir festgestellt, dass dieser Mechanismus Latenzzeiten erzeugt. Das Mikrofonsignal ist verzögert. Einerseits durch die Verzögerung des Kraftverstärkers, Lautsprechers und der Luftsäule und andererseits durch die Aufnahmetechnik.
Für einen erfolgreichen Soll-Istwertvergleich sind diese Latenzen zu entfernen. Zu diesem Zweck hab ich eine Korrelationssoftware entwickelt, die es allein mit einem simplen und sehr schnellen Amplitudenvergleich schon schafft, die beiden Dateien (Mikro und Original) bis auf wenige Millisekunden zu korrelieren (zur Deckung zu bringen). Diesen Restfehler kann man als Choruseffekt hören.
Heute habe ich diesem schnellen aber etwas rustikalen Vergleicher einen Kreuzkorrelator nachgeschaltet, der den Feinabgleich macht. Auch dieser Mechanismus ist extrem schnell, weil die zu korrelierenden Datenmengen zu diesem Zeitpunkt durch die Vorkorrelation schon sehr gering sind.
Nach diesen Korrelationen folgen Amplitudenskalierungen und Inversionen, denn zum Soll-Istvergleich müssen beide Signale gleich skaliert sein. Hier scheint noch ein Bug zu stecken.
Danach wird schließlich aus den in Amplitude, Inversion und Phase normierten zwei Signalen der Fehler ermittelt und die Originaldatei entsprechend korrigiert.
Die 'C'-Software hat eine sekundenkurze Laufzeit und verfügt zur Zeit über nur 170 Zeilen. Eine Portierung in andere Programmiersprachen oder Rechnerumgebungen ist daher simpel.
Soweit alle noch bei der Stange?
[Bild: can-stock-photo_csp5376323.jpg]