Я намагаюся відкалібрувати ультразвуковий динамік з метою випромінення передбачуваних сигналів, але, на жаль, я все ще натрапляю на проблеми, можливо, через відсутність DSP-фу.
Трохи фону
Я хочу мати можливість відтворювати звуки максимально наближеними до каліброваної запису. Наскільки я розумію теорію, мені потрібно знайти функцію передачі динаміків і відключити сигнали, які я хочу випромінювати. Щось подібне (у частотній області):
X -> H -> XH
Де X
це випромінюється сигнал H
є передавальна функція колонки і XH
це X
раз H
. Відділення ( ./
) тепер має дати мені H
.
Тепер, щоб випромінювати калібрований сигнал, його слід розділити на H
:
X/H -> H -> X
Що зроблено
- Розміщений динамік та калібрований мікрофон на відстані 1 м на штативах.
- Записано 30+ лінійних розгортків 150 КГц-20КГц, довжиною 20 мс, та записано при 500 к.с. / с.
- Вирівняні та усереднені сигнали зі сценарієм Matlab / Octave нижче, під сценарієм видно отриманий сигнал.
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);
Фур'є перетворив
X
іXH
зробив вищезазначені розрахунки, результат виглядає правдоподібно. Нижче - нормалізований сюжетH
(фіолетовий) таX/H
(зелений).
Сюжет обрізаний до відповідних частот.
Будь ласка, дайте мені знати, чи буду я про це неправильним шляхом.
Моє запитання
Після підрахунку X/H
мені потрібно перетворити його на часову область, я припустив, що це буде просто ifft(X./H)
і wavwrite
, але всі мої спроби поки що не змогли отримати жодної правдоподібної відповіді. Вектор частоти Hf
, H
і X
може бути знайдений тут в mat7 довічного формату.
Можливо, я просто втомився, і тут є просте рішення, але на даний момент я його не бачу. Будь-яка допомога / порада високо цінується.