|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
%使用两种方法求时延,xcorr和通过fft求
%具体为1、[c,lags]=xcorr(x,y);
%2、X=fft(x,2*N-1);Y=fft(y,2*N-1);gcc=X.*conj(Y);gcc=fftshift(ifft(gcc));
% 贴程序
% 备注:设,使用10khz的采样频率,对1khz的声源采样。两信号时间时延为0.0004
clc,clear;
N=512; %长度
Fs=10000; %采样频率10khz
n=0:N-1;
t=n/Fs; %时间序列
%信号
x=cos(2*pi*1000*t);
y=cos(2*pi*1000*(t+0.0004));
x=awgn(x,30); %信噪比10db
y=awgn(y,30);
subplot(211);
plot(t(1:128),x(1:128),'r');
hold on;
plot(t(1:128),y(1:128),':');
legend('x信号', 'y信号');
xlabel('时间/s');ylabel('x(t) y(t)');
title('原始信号');grid on;
hold off
%互相关函数
figure(2);
tic
X=fft(x,2*N-1);
Y=fft(y,2*N-1);
gcc=X.*conj(Y);
% G=abs(X).*abs(Y);
% gcc=gcc./G;
gcc=fftshift(ifft(gcc));
% gcc=abs(gcc);
toc
lags=-N+1:1:N-1; %使用时间坐标
subplot(211),plot(lags/Fs,gcc),title('gcc'),grid on;
tic
[c,lags]=xcorr(x,y);
toc
subplot(212),plot(lags/Fs,c,'r'),title('xcorr'),grid on;
%计算两种方法的时延
[Am,Lm]=max(c); %使用xcorr
d1=Lm-N
Delay1=d1/Fs
[Am,Lm]=max(gcc); %使用fft
d2=Lm-N
Delay2=d2/Fs
% plot(lags/Fs,c,'r');
% title('相关函数');
% xlabel('时间/s');ylabel('Rxy(t)');
结果为:
Elapsed time is 0.001596 seconds.
Elapsed time is 0.001157 seconds.
d1 =
4
Delay1 =
4.0000e-004
d2 =
4
Delay2 =
4.0000e-004
未使用加权函数
原始信号
问题:
但我修改程序如:(将注释去掉即可)
G=abs(X).*abs(Y);
gcc=gcc./G; %使用加权函数为PHAT:A=1/abs(X.*conj(Y));
gcc=fftshift(ifft(gcc));
gcc=abs(gcc);
%得到的结果却是不正确的,但图形感觉挺好的,尖峰突出!可是就是得不到时延!
结果:
Elapsed time is 0.002830 seconds.
Elapsed time is 0.001097 seconds.
d1 =
4
Delay1 =
4.0000e-004
d2 =
0
Delay2 =
0
使用加权函数之后PHAT
%更改时延,0.0005,0.0006,0.0007等等,都得不到正确结果
请各位大侠帮忙解答,感激不尽!
|
|