自编SCOT互相关时延估计matlab程序
clear all;clc;close all;N=1024;%信号长度
fs=1000;%采样频率
n=0:N-1;
t=n/fs;%时间序列
a1=5;%信号幅度
a2=5;%信号幅度
d=26;%延迟点数
x1=a1*sin(2*pi*10*t)+1.9*sin(2*pi*18*t)+2.8*sin(2*pi*55*t);
x1=x1+randn(size(x1));
x2=a2*sin(2*pi*10*(n+d)/fs)+1.9*sin(2*pi*18*(n+d)/fs)+2.8*sin(2*pi*55*(n+d)/fs);
x2=x2+randn(size(x2));
%x2=x2.*hamming(N);
subplot(311);
plot(t,x1,'r');
axis([-0.1 1.5 -6 6]);
%hold on;
subplot(312);
plot(t,x2,'g');
axis([-0.1 1.5 -6 6]);
%legend('x1信号','x2信号');
%xlabel('时间/s');ylabel('x1(t)x2(t)');
%title('原始信号');grid on;
%hold off;
%SCOT互相关算法
X1=fft(x1,2*N-1);
X2=fft(x2,2*N-1);
Sxy=X1.*conj(X2);
%Cxy=fftshift(ifft(Sxy));
%Sx=abs(X1).^2;
%Sy=abs(X2).^2;
%Pxy=Sxy./((sqrt(Sx.*Sy))+eps);
Pxy=Sxy./(abs(X1).*abs(X2)+eps);
Cxy=fftshift(real(ifft(Pxy));
t1=(0:2*N-2)/fs;
subplot(313);
plot(t1,Cxy,'b');
title('互相关函数');
xlabel('时间/s');ylabel('Cxy(t)');grid on;
=max(Cxy)%求出最大值及其所在位置
D=location-N
Delay=D/fs
基于SCOT的互相关时延估计,用这个程序仿真得到的估计值每次都不一样,请大侠看看是怎么回事。 回复 1 # lifeman001 的帖子
这是我参照别人的代码改的一段代码,看对你是否有帮助
clear;
N=1024;%信号长度
fs=1000;%采样频率
n=0:N-1;
t=n/fs;%时间序列
ts = 1/fs * (-N + (1 : 2*N - 1)); %互相关时间序列
a1=5;%信号幅度
a2=5;%信号幅度
d=26;%延迟点数
x1=a1*sin(2*pi*10*t)+1.9*sin(2*pi*18*t)+2.8*sin(2*pi*55*t);
x2=a2*sin(2*pi*10*(n+d)/fs)+1.9*sin(2*pi*18*(n+d)/fs)+2.8*sin(2*pi*55*(n+d)/fs);
%x2=awgn(x1./4,-3); %噪声强度大于信号
%x2=x2 .* hamming(N);
x=awgn(x1,20); %加入噪声
y=awgn(x2,0.001);
S1=fft(x,2*N-1);
S2=fft(y,2*N-1);
X = S1.* conj(S2);
R1 =real(fftshift(ifft(X)));
subplot(211),plot(ts,R1);
xlabel('时间/s');ylabel('R1(t)');
title('ifft计算结果')
Cc=xcorr(x(1:N),y(1:N));
subplot(212),plot(ts, Cc);
xlabel('时间/s');ylabel('Cc(t)');
title('xcorr(x(1:N),y(1:N))');
c1=max(abs(R1));
a1=find(abs(R1)==c1) %找出最大点
m1=(a1-length(R1)/2)*1/fs %换算出信号的延迟时间
c2=max(abs(Cc));
a2=find(abs(Cc)==c2) %找出最大点
m2=(a2-length(Cc)/2)*1/fs %换算出信号的延迟时间 {:{23}:}
页:
[1]