| 查看: 377 | 回复: 0 | |||
[求助]
用相位变换法(PHAT)计算时延
|
|
采集到四个通道音频以后在MATLAB中用相位变换法(PHAT)处理得之间的时延,用软件可以看出四个通道的波形有却别,MATLAB中的实验结果确是0,附上代码求高手指点。 a=wavread('KinectAudio 211'); b=wavread('KinectAudio 212'); c=wavread('KinectAudio 213'); d=wavread('KinectAudio 214'); l1=length(a); e=1; l2=e*l1; signal=zeros(l2,1); signal1=zeros(l2,1); signal2=zeros(l2,1); signal3=zeros(l2,1); for m=1:e; for n=1:l1; signal(n+(m-1)*l1)=a(n); signal1(n+(m-1)*l1)=b(n); signal2(n+(m-1)*l1)=c(n); signal3(n+(m-1)*l1)=d(n); end end signallength=length(signal); p=1; for n=1:signallength; if 2.^n<(signallength*2); p=p+1; end end assumesignallength=2.^p; signal4=zeros(assumesignallength,1); signal5=zeros(assumesignallength,1); signal6=zeros(assumesignallength,1); signal7=zeros(assumesignallength,1); for n=1:signallength; signal4(n)=signal(n); signal5(n)=signal1(n); signal6(n)=signal2(n); signal7(n)=signal3(n); end cccorrelation=xcorr(signal4,signal5); cccorrelation1=xcorr(signal4,signal6); cccorrelation2=xcorr(signal4,signal7); gcc=zeros((assumesignallength*2-1),1); gcc1=zeros((assumesignallength*2-1),1); gcc2=zeros((assumesignallength*2-1),1); phatfilter=zeros((assumesignallength*2-1),1); phatfilter1=zeros((assumesignallength*2-1),1); phatfilter2=zeros((assumesignallength*2-1),1); crossspectrum=fft(cccorrelation); crossspectrum1=fft(cccorrelation1); crossspectrum2=fft(cccorrelation2); for n=1: (assumesignallength*2-1); phatfilter(n)=abs(crossspectrum(n)); phatfilter1(n)=abs(crossspectrum1(n)); phatfilter2(n)=abs(crossspectrum2(n)); gcc(n)=crossspectrum(n)/phatfilter(n); gcc1(n)=crossspectrum1(n)/phatfilter1(n); gcc2(n)=crossspectrum2(n)/phatfilter2(n); end gcccorrelation=ifft(gcc); gcccorrelation1=ifft(gcc1); gcccorrelation2=ifft(gcc2); for n=1: (assumesignallength*2-1); gcccorrelation(n)=abs(gcccorrelation(n)); gcccorrelation1(n)=abs(gcccorrelation1(n)); gcccorrelation2(n)=abs(gcccorrelation2(n)); end [gccmaximum,gcctime]=max(gcccorrelation); [gccmaximum1,gcctime1]=max(gcccorrelation1); [gccmaximum2,gcctime2]=max(gcccorrelation2); gccestimation=abs(assumesignallength-gcctime); gccestimation1=abs(assumesignallength-gcctime1); gccestimation2=abs(assumesignallength-gcctime2); gccestimation,gccestimation1,gccestimation2 lag=zeros((assumesignallength*2-1),1); for n=1: (assumesignallength*2-1); lag(n)=assumesignallength-n; end subplot(3,1,1); plot(lag,gcccorrelation,'b') axis([-inf inf -inf inf]); legend('MIC12'); subplot(3,1,2); plot(lag,gcccorrelation1,'r') axis([-inf inf -inf inf]); ylabel('cross-correlation'); legend('MIC13'); subplot(3,1,3); plot(lag,gcccorrelation2,'g') axis([-inf inf -inf inf]); legend('MIC14'); xlabel('time lag'); |
» 猜你喜欢
推荐一款可以AI辅助写作的Latex编辑器SmartLatexEditor,超级好用,AI润色,全免费
已经有20人回复
【EI|Scopus 双检索】第六届智能机器人系统国际会议(ISoIRS 2026)
已经有1人回复
物理学I论文润色/翻译怎么收费?
已经有219人回复
2026年第四届电动车与车辆工程国际会议(CEVVE 2026)
已经有0人回复
德国亥姆霍兹Hereon中心招收两位医用镁合金腐蚀与LPSO相变方向2026公派博士生
已经有0人回复
找到一些相关的精华帖子,希望有用哦~
零相位滤波器、傅里叶变换及逆变换滤波器
已经有4人回复
【求助】在matlab中如何用希尔伯特变换定义相位
已经有22人回复
科研从小木虫开始,人人为我,我为人人













回复此楼
点击这里搜索更多相关资源