如何用matlab计算2个已经采集到的信号之间的相位差

如何用matlab计算2个已经采集到的信号之间的相位差,第1张

这里给出一个例子,是由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);

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12186342.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存