24小时热门版块排行榜    

CyRhmU.jpeg
查看: 377  |  回复: 0

hailiang

金虫 (正式写手)

[求助] 请教,对信号做傅里叶分析,当原始信号不是整数或加0.5时结果不对

我用下面的程序对余弦信号做频谱分析,当信号频率是整数或者是正负0.5的时候都正确,就是求出的振幅和频率刚好是原始信号一样,但是如果原始信号频率不是整数或正负0.5时就不正确,请问是精度设置的不够高,还是采样频率和采样点数不对!
下面的程序是Mathematica程序,Matlab程序试了也一样
A1 = 3;   (*% 频率F1信号的幅度*)
(*F1=1/(2 Pi);   (*% 信号1频率 (Hz)*)*)
F1 = 0.11;
Fs = 256;   (*% 采样频率 (Hz),要大于信号频率的两倍*)
P1 = 100;   (*% 信号1相位 (度)*)
NN = 2048;    (*% 采样点数,通常取2的整数次方*)
S = A1*Cos[2*Pi*F1*t + Pi*P1/180];  (*输入原始信号*)
Plot[S, {t, 0, 10}, PlotPoints -> 200, PlotLabel -> "原始信号"]
Plot[S, {t, 0, NN/Fs}, PlotPoints -> 200, PlotLabel -> "原始信号"]

b = Range[0, NN/Fs, 1/Fs];
g = S /. t -> b;
S1 = Take[g, Length[g] - 1];
Y = Fourier[S1, FourierParameters -> {1, -1}];
Ayy = Abs[Y];
ListLinePlot[Ayy, PlotRange -> All]

(*以下显示换算后的FFT模值结果*)
Ayy = Ayy/(NN/2);
Ayy[[1]] = Ayy[[1]]/2;
(*Ayy[[1]]=0;*)
F = Range[1, NN];
F = (F - 1)*Fs/NN;
FF = Array[h3, {NN/2, 2}];
Do[h3[i, 1] = F[]; h3[i, 2] = Ayy[], {i, 1, NN/2}];
ListLinePlot[FF, PlotRange -> All, Frame -> True,
FrameLabel -> {"频率/Hz", "振幅"}]



下面是matlab程序

close all; %先关闭所有图片
Adc=2;  %直流分量幅度
A1=3;   %频率F1信号的幅度

F1=0.1;  %信号1频率(Hz)

Fs=256; %采样频率(Hz)
P1=-30; %信号1相位(度)

N=1024;  %采样点数
t=[0:1/Fs:N/Fs]; %采样时刻
%信号
S=A1*cos(2*pi*F1*t+pi*P1/180);
%显示原始信号
plot(S);
title('原始信号');

figure;
Y = fft(S,N); %做FFT变换
Ayy = (abs(Y)); %取模
plot(Ayy(1:N)); %显示原始的FFT模值结果
title('FFT 模值');

figure;
Ayy=Ayy/(N/2);   %换算成实际的幅度
Ayy(1)=Ayy(1)/2;
F=([1:N]-1)*Fs/N; %换算成实际的频率值
plot(F(1:N/2),Ayy(1:N/2));   %显示换算后的FFT模值结果
title('幅度-频率曲线图');

Y1=Ayy(1:N/2);
[da1,dda1]=max(Y1);
Y1(dda1)=0;
[da2,dda2]=max(Y1);
Y1(dda2)=0;
[da3,dda3]=max(Y1);
da1
da2
da3

figure;
Pyy=[1:N/2];
for i=1:N/2
Pyy(i)=phase(Y(i)); %计算相位
Pyy(i)=Pyy(i)*180/pi; %换算为角度
end;
plot(F(1:N/2),Pyy(1:N/2));   %显示相位图
title('相位-频率曲线图');
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

相关版块跳转 我要订阅楼主 hailiang 的主题更新
信息提示
请填处理意见