J'essaie de calibrer un haut-parleur à ultrasons dans le but d'émettre des signaux prévisibles, mais hélas, je continue de rencontrer des problèmes, probablement en raison de mon manque de DSP-fu.
Un peu de fond
Je veux pouvoir lire des sons aussi près que possible d'un enregistrement calibré que j'ai. Pour autant que je comprends la théorie, je dois trouver la fonction de transfert des haut-parleurs et déconvolver les signaux que je veux émettre avec. Quelque chose comme ça (dans le domaine fréquentiel):
X -> H -> XH
Où X
est le signal émis H
est la fonction de transfert des haut-parleurs et XH
est le X
temps H
. Une division ( ./
) devrait maintenant me donner H
.
Maintenant, afin d'émettre un signal calibré, il doit être divisé par H
:
X/H -> H -> X
Ce qui a été fait
- Haut-parleur placé et un microphone calibré à 1 m de distance sur les trépieds.
- Enregistré plus de 30 balayages linéaires 150KHz-20KHz, 20ms de long, et enregistré à 500 KS / s.
- Signaux alignés et moyennés avec le script Matlab / Octave ci-dessous, sous le script, le signal résultant peut être vu.
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 s'est transformé
X
etXH
et a fait les calculs mentionnés ci-dessus, le résultat semble plausible. Vous trouverez ci-dessous un tracé normalisé deH
(violet) etX/H
(vert).
Le tracé a été tronqué aux fréquences pertinentes.
S'il vous plaît, faites-moi savoir si je m'y trompe.
Ma question
Après avoir calculé que X/H
je devais le reconvertir dans le domaine temporel, j'ai supposé que ce serait simple ifft(X./H)
et wavwrite
, mais toutes mes tentatives jusqu'à présent n'ont pas réussi à obtenir une réponse plausible. Un vecteur de fréquence Hf
, H
et X
peut être trouvé ici en format mat7 binaire.
Peut-être que je suis juste fatigué et qu'il y a une solution simple ici, mais pour le moment je ne la vois pas. Toute aide / conseil est très apprécié.