Ich versuche, einen Ultraschalllautsprecher mit dem Ziel zu kalibrieren, vorhersagbare Signale zu senden, aber leider habe ich immer wieder Probleme, wahrscheinlich aufgrund meines Mangels an DSP-Fu.
Ein kleiner Hintergrund
Ich möchte in der Lage sein, Sounds so nah wie möglich an einer kalibrierten Aufnahme wiederzugeben, die ich habe. Soweit ich die Theorie verstehe, muss ich die Lautsprecherübertragungsfunktion finden und die Signale, die ich damit aussenden möchte, entfalten. So etwas (im Frequenzbereich):
X -> H -> XH
Wo X
ist das ausgesendete Signal H
ist die Lautsprecherübertragungsfunktion und XH
ist X
Zeiten H
. Eine Division ( ./
) sollte mir jetzt geben H
.
Um nun ein kalibriertes Signal zu senden, sollte es geteilt werden durch H
:
X/H -> H -> X
Was wurde getan?
- Platzierter Lautsprecher und ein kalibriertes Mikrofon in einem Abstand von 1 m auf Stativen.
- Aufgezeichnete 30+ lineare Sweeps von 150 kHz bis 20 kHz, 20 ms lang und aufgezeichnet bei 500 KS / s.
- Ausgerichtete und gemittelte Signale mit dem Matlab / Octave-Skript unten, unter dem Skript kann das resultierende Signal angezeigt werden.
files = dir('Mandag*');
rng = [1.5e6, 1.52e6];
[X, fs] = wavread(files(1).name, rng);
X = X(:,1);
for i=2:length(files)
[Y, fs] = wavread(files(i).name, rng);
sig = Y(:,1);
[x, off] = max(xcorr(X', sig'));
off = length(X) - off;
if(off < 0)
sig = [zeros(1, -off), sig(1:end+off)'];
elseif (off > 0)
sig = [sig(off:end)', zeros(1, off-1)];
end
X = X + sig';
end
X = X/length(files);
Fourier transformiert
X
undXH
und die oben genannten Berechnungen durchgeführt, sieht das Ergebnis plausibel aus. Unten ist eine normalisierte Darstellung vonH
(lila) undX/H
(grün).
Der Plot wurde auf die relevanten Frequenzen gekürzt.
Bitte lassen Sie mich wissen, wenn ich das falsch mache.
Meine Frage
Nach der Berechnung X/H
muss ich es zurück in den Zeitbereich transformieren, nahm ich dies ein einfacher wäre , ifft(X./H)
und wavwrite
, aber alle meine Versuche haben bisher eine plausible Antwort bekommen gescheitert. Ein Frequenzvektor Hf
, H
und X
kann gefunden werden hier in MAT7-Binärformat.
Vielleicht bin ich nur müde und es gibt hier eine einfache Lösung, aber im Moment kann ich es nicht sehen. Jede Hilfe / Beratung wird sehr geschätzt.