Estoy tratando de calibrar un altavoz ultrasónico con el objetivo de emitir señales predecibles, pero lamentablemente sigo teniendo problemas, probablemente debido a mi falta de DSP-fu.
Un poco de historia
Quiero poder reproducir sonidos lo más cerca posible de una grabación calibrada que tengo. Hasta donde entiendo la teoría, necesito encontrar la función de transferencia de altavoces y desconvolver las señales que quiero emitir con ella. Algo como esto (en el dominio de la frecuencia):
X -> H -> XH
Donde X
está la señal emitida H
es la función de transferencia de los altavoces y XH
son los X
tiempos H
. Una división ( ./
) ahora debería darme H
.
Ahora, para emitir una señal calibrada, debe dividirse entre H
:
X/H -> H -> X
Que se ha hecho
- Altavoz colocado y un micrófono calibrado a 1 m de distancia sobre trípodes.
- Grabado 30+ barridos lineales 150KHz-20KHz, 20ms de largo, y grabado a 500 KS / s.
- Señales alineadas y promediadas con el script Matlab / Octave a continuación, debajo del script se puede ver la señal resultante.
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 se transformó
X
eXH
hizo los cálculos mencionados anteriormente, el resultado parece plausible. A continuación se muestra una gráfica normalizada deH
(púrpura) yX/H
(verde).
La trama se ha truncado a las frecuencias relevantes.
Por favor, avíseme si voy por el camino equivocado.
Mi pregunta
Después de calcular X/H
que necesito transformarlo nuevamente en el dominio del tiempo, asumí que esto sería simple ifft(X./H)
y wavwrite
, pero todos mis intentos hasta ahora no han logrado obtener una respuesta plausible. Un vector de frecuencias Hf
, H
y X
se puede encontrar aquí en formato binario mat7.
Quizás estoy cansado y hay una solución simple aquí, pero por el momento no puedo verla. Cualquier ayuda / consejo es muy apreciada.