如何用FFT算法转换成相位差
发布网友
发布时间:2023-01-09 18:40
我来回答
共1个回答
热心网友
时间:2023-10-24 03:32
%% FFT
f0 = 50;
X=fft(x); % x是信号离散值
N = length(x);
X=X(1:N/2);
Xabs=abs(X);
for i= 1 : m % m 是谐波次数
[Amax,index]=TriFind(Xabs,floor((i*f0-15)/fsN),ceil((i*f0+15)/fsN)); % 如果只求基波可以改成求最大值的 [Amax,index]=max(Xabs);
if(index==-1)
Fn(i) = 0;
An(i) = 0;
Pn(i) = 0;
else
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(i) = (k01+r1-1)*fs/N; %频率校正 fs 为采样频率
An(i) = 2*pi*r1*Xabs(k01)/(N*sin(r1*pi)); % 幅值校正
Pn(i) = phase(X(k01))-pi*r1; % 相位校正
% Pn(i,3) = mod(Pn(i),pi);
end
end
这是我写的一个FFT求取谐波参数的程序,Pn中存的就是各次谐波的相位,要是做相位差,分别对两个信号求取相位,再差就行了;如果是非同步采样,可能误差较大,需要加窗改进;
有问题可以追问。