PDA

查看完整版本 : [MATLAB混合编程] 急求!关于MATLAB中FFT后的相位问题


bryan1897
2010-03-10, 22:49
针对一个普通的正弦信号使用FFT计算其整周期采样信号的幅值相位。标准情况下50Hz时,相频图形没有问题。但是由于我做这个的目的是考虑频率波动情况下,采样频率设置大小对信号幅值、相位的影响,所以我把信号频率改为49.8Hz,其他诸如采样频率等都没变,结果做出来的相频图形显示相位都成负的了,这是程序的问题,还是说本来就该如此?(主要我想0.2Hz的偏差不至于使相位都成负的了吧)~~希望高手解答,附件里是2个相频图。

程序如下:
clc;
clear;
A1=1; %频率F1信号的幅度
F1=49.8; %信号1频率(Hz)
Fs=3200; %采样频率(Hz)
P1=0; %信号1相位(度)
N=64; %采样点数
t=[0:1/Fs:N/Fs]; %采样时刻
%信号
S=A1*sin(2*pi*F1*t+pi*P1/180);
%显示原始信号
subplot(411);plot(S);
title('原始信号时域图');

Y = fft(S,N); %做FFT变换
Ayy = (abs(Y)); %取模
subplot(412);stem(Ayy(1:N)); %显示原始的FFT模值结果
title('FFT 模值');
Ayy=Ayy/(N/2); %换算成实际的幅度
Ayy(1)=Ayy(1)/2;
F=([1:N]-1)*Fs/N; %换算成实际的频率值,Fn=(n-1)*Fs/N
subplot(413);stem(F(1:N/2),Ayy(1:N/2)); %显示换算后的FFT模值结果
title('幅度-频率曲线图');
Pyy=[1:N/2];
for i=1:N/2
Pyy(i)=angle(Y(i)); %计算相位
Pyy(i)=Pyy(i)*180/pi; %换算为角度
end;
subplot(414);stem(F(1:N/2),Pyy(1:N/2)); %显示相位图
title('相位-频率曲线图');

_l_
2010-03-11, 10:10
程序计算的结果没错,但频率分辨力是50Hz,直接来分析49.8Hz的信号,这方法有问题,不能得到正确的结果

bryan1897
2010-03-11, 10:24
程序计算的结果没错,但频率分辨力是50Hz,直接来分析49.8Hz的信号,这方法有问题,不能得到正确的结果

谢谢你的回复~那么频率分辨率就是50Hz,就没法针对频率小的偏差进行计算了吗?我目的主要是在有小的频率偏差情况下,验证采样点越多,幅值、相位的计算就越接近实际值。还有其他办法吗?