예측 가능한 신호를 방출하기 위해 초음파 스피커를 보정하려고하지만 DSP-fu가 없기 때문에 문제가 계속 발생합니다.
작은 배경
보정 된 녹음에 최대한 가깝게 사운드를 재생할 수 있기를 원합니다. 이론을 이해하는 한, 스피커 전송 기능을 찾아서 방출하고자하는 신호를 분리해야합니다. 주파수 영역에서 이와 같은 것 :
X -> H -> XH
여기서 X
방출 된 신호는 H
스피커 전달 함수이고 XH
이다 X
시간 H
. ./
이제 부서 ( )가 나에게 줄 것 H
입니다.
이제 교정 된 신호를 방출하려면 다음과 같이 나누어야합니다 H
.
X/H -> H -> X
완료된 사항
- 삼각대에서 1m 떨어진 스피커와 보정 된 마이크를 배치했습니다.
- 기록 된 30+ 선형 스위프는 150KHz-20KHz, 20ms 길이이며 @ 500 KS / s로 기록되었습니다.
- 아래의 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);
푸리에 (Fourier) 는 위에서 언급 한 계산을 변형
X
하고 수행XH
했으며 그 결과는 그럴듯 해 보인다. 아래는H
(보라색)과X/H
(녹색) 의 정규화 된 음모입니다 .
플롯이 관련 주파수로 잘 렸습니다.
내가 잘못 가고 있다면 알려주세요.
내 질문
계산 후 X/H
시간 도메인으로 다시 변환해야한다고 생각했는데 이것이 간단 ifft(X./H)
하고 가정 wavwrite
했지만 지금까지의 모든 시도는 그럴듯한 대답을 얻지 못했습니다. 주파수 벡터 Hf
, H
및 X
찾을 수 있습니다 여기 mat7 바이너리 형식으로.
어쩌면 피곤하고 여기에 간단한 해결책이 있지만 현재는 볼 수 없습니다. 모든 도움 / 조언을 부탁드립니다.