这里给出一个例子,是由2个正弦信号构成的信号,x2对x1超前了35个样点,用求相关函数的方法求2信号之间的延迟。程序为:
N=1024;
fs=1000; f1=5; f2=20;
n=1:N; t=(n-1)/fs; t1=(n+34)/fs;
x1=cos(2pif1t)+05sin(2pif2t);
x2=cos(2pif1t1)+05sin(2pif2t1);
subplot 211; plot(n,x1,'r',n,x2,'b'); grid;
legend('x1','x2'); title('Signals Waveform');
R=xcorr(x1,x2);
nn=-N+1:N-1;
subplot 212; plot(nn,R); axis tight
grid; title('Correlation Function');
[Rmax,Rloc]=max(R);
Rloc=Rloc-N
最后计算出Rloc=35,表示x2对x1超前了35个样点。
% 下面的程序里Pn 存的就是基波相位 如果求的是谐波相位,稍微修改即可
x = load('datadat'); %load 数据
fs=10000; % 采样频率,自己根据实际情况设置
N=length(x); % x 是待分析的数据
n=1:N;
%1-FFT
X=fft(x); % FFT
X=X(1:N/2);
Xabs=abs(X);
Xabs(1) = 0; %直流分量置0
[Amax,index]=max(Xabs);
if(Xabs(index-1) > Xabs(index+1))
a1 = Xabs(index-1) / Xabs(index);
r1 = 1/(1+a1);
k01 = index -1;
else
a1 = Xabs(index) / Xabs(index+1);
r1 = 1/(1+a1);
k01 = index;
end
Fn = (k01+r1-1)fs/N; %基波频率
An = 2pir1Xabs(k01)/(Nsin(r1pi)); %基波幅值
Pn = phase(X(k01))-pir1; %基波相位 单位弧度
Pn = mod(Pn(1),pi);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)