Sto cercando di calibrare un altoparlante ad ultrasuoni con l'obiettivo di emettere segnali prevedibili, ma purtroppo continuo a correre nei guai, probabilmente a causa della mia mancanza di DSP-fu.
Un piccolo sfondo
Voglio essere in grado di riprodurre i suoni il più vicino possibile a una registrazione calibrata che ho. Per quanto ho capito la teoria, devo trovare la funzione di trasferimento degli altoparlanti e deconvolgere i segnali che voglio emettere con essa. Qualcosa del genere (nel dominio della frequenza):
X -> H -> XH
Dov'è X
il segnale emesso H
è la funzione di trasferimento degli altoparlanti ed XH
è il X
tempo H
. Una divisione ( ./
) ora dovrebbe darmi H
.
Ora, per emettere un segnale calibrato, dovrebbe essere diviso per H
:
X/H -> H -> X
Cosa è stato fatto
- Altoparlante posizionato e microfono calibrato a 1 m di distanza sui treppiedi.
- Oltre 30 sweep lineari registrati da 150 KHz a 20 KHz, lunghi 20 ms e registrati a 500 KS / s.
- Segnali allineati e medi con lo script Matlab / Octave di seguito, sotto lo script è possibile vedere il segnale risultante.
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 si è trasformato
X
e haXH
fatto i calcoli sopra menzionati, il risultato sembra plausibile. Di seguito è riportato un diagramma normalizzato diH
(viola) eX/H
(verde).
La trama è stata troncata alle frequenze pertinenti.
Per favore fatemi sapere se sto andando in questo modo nel modo sbagliato.
La mia domanda
Dopo il calcolo X/H
ho bisogno di riportarlo nel dominio del tempo, ho pensato che sarebbe stato un semplice ifft(X./H)
e wavwrite
, ma tutti i miei tentativi finora non sono riusciti a ottenere una risposta plausibile. Un vettore di frequenza Hf
, H
e X
può essere trovato qui in formato mat7-binario.
Forse sono solo stanco e qui c'è una soluzione semplice, ma al momento non riesco a vederlo. Qualsiasi aiuto / consiglio è molto apprezzato.