声源定位matlab模拟,matlab声源定位程序的一点小问题
這是通過(guò)傳統(tǒng)互相關(guān)的方法來(lái)進(jìn)行聲源定位的程序,做完互相關(guān)之后,紅色標(biāo)注的程序行,應(yīng)該如何理解呢,是通過(guò)什么方法來(lái)實(shí)現(xiàn)最終延遲差的估計(jì)的呢?
cl
clear all
close all
%%
% *各參數(shù)設(shè)置*
%--聲源相關(guān)參數(shù)
fm=2000;? ? %Hz: 信源調(diào)頻信號(hào)最高頻率 周期0.5ms
Ts=0.2;? ???%s: 信源周期 0.2s
%--采樣和信號(hào)處理相關(guān)參數(shù)
fs=10*fm;? ?%采樣率 也就是50us采一次樣
ts=1/fs;? ? %采樣間隔
T=0.2;? ?? ?%s: 搜集數(shù)據(jù)T秒,計(jì)算一次位置
tMic=0:1/fs:T-1/fs;? ?%接收數(shù)據(jù)時(shí)間
nMic=length(tMic);? ? %接收數(shù)據(jù)長(zhǎng)度
Rlen=nMic; %做相關(guān)的長(zhǎng)度
%--物理參數(shù)設(shè)置
v=340;? ?? ?%m/s: 音速
SNR=-10;? ? %dB
%--聲源和MIC位置
Lco_S = [20,30];
Loc_A = [10,0];
Loc_B = [0,10];
Loc_C = [20,0];
%%
% *模擬聲源信號(hào)及各MIC接收到的信號(hào)*
%--產(chǎn)生聲源
t = 0:ts:0.4; %假設(shè)聲波持續(xù)時(shí)間0.4秒,也就是有2個(gè)周期
s = chirp(mod(t,0.2),0,0.2,fm,'linear');%源信號(hào)
%--畫(huà)出聲源的波形
figure();
plot((1:8001)*0.05,s);
xlabel('時(shí)間/\itms');
ylabel('振幅');
title('聲音信號(hào)');
%--計(jì)算信源與個(gè)MIC之間的距離
dis_SA = sqrt(sum((Lco_S-Loc_A).^2));
dis_SB = sqrt(sum((Lco_S-Loc_B).^2));
dis_SC = sqrt(sum((Lco_S-Loc_C).^2));
%--信源到MIC的時(shí)間延遲
Lag_SA = dis_SA/v;
Lag_SB = dis_SB/v;
Lag_SC = dis_SC/v;
%--轉(zhuǎn)化成相差點(diǎn)數(shù)
diff_AB =round((Lag_SA-Lag_SB)/ts);
diff_AC =round((Lag_SA-Lag_SC)/ts);
%--MIC接收到的數(shù)據(jù)
sigMicA=s(1:nMic);
sigMicB=s(1+diff_AB:nMic+diff_AB);
sigMicC=s(1+diff_AC:nMic+diff_AC);
sigMicA=awgn(sigMicA,SNR,'measured');
sigMicB=awgn(sigMicB,SNR,'measured');
sigMicC=awgn(sigMicC,SNR,'measured');
%--信號(hào)時(shí)域圖
figure();subplot(3,1,1);
plot((1:4000)*0.05,sigMicA);
subplot(3,1,2);
plot((1:4000)*0.05,sigMicB);
subplot(3,1,3);
plot((1:4000)*0.05,sigMicC);
%%
% *用CC(Cross-Correlation)算法估計(jì)時(shí)延差*
%CC算法求延時(shí)差
rMicAB=xcorr(sigMicA,sigMicB,Rlen,'biased'); %求MIC A、B信號(hào)互相關(guān)
rMicAC=xcorr(sigMicA,sigMicC,Rlen,'biased'); %求MIC A、C信號(hào)互相關(guān)
[val,DelayDifferAB]=max(rMicAB);??%互相關(guān)最大值的位置體現(xiàn)了延遲差。
[val,DelayDifferAC]=max(rMicAC);
%最終延遲差估計(jì)
delayDifferABRes=-(Rlen+1)+rMicAB(DelayDifferAB+(-3:3))*(DelayDifferAB+(-3:3))'/sum(rMicAB(DelayDifferAB+(-3:3)));
delayDifferACRes=-(Rlen+1)+rMicAC(DelayDifferAC+(-3:3))*(DelayDifferAC+(-3:3))'/sum(rMicAC(DelayDifferAC+(-3:3)));
distDiffAB=delayDifferABRes/fs*v;
distDiffAC=delayDifferACRes/fs*v;
總結(jié)
以上是生活随笔為你收集整理的声源定位matlab模拟,matlab声源定位程序的一点小问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 职中计算机专业自我鉴定400字,中职计算
- 下一篇: 初至和背景噪声