请教频谱分析程序,奇怪的现象
我用下面的程序对余弦信号做频谱分析,当信号频率大于1的时候都正确,但是如果原始信号频率小于1时就不正确,请问是精度设置的不够高,还是采样频率和采样点数不对!
下面的程序是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;(*输入原始信号*)
Plot
Plot
b = Range;
g = S /. t -> b;
S1 = Take - 1];
Y = Fourier;
Ayy = Abs;
ListLinePlot
(*以下显示换算后的FFT模值结果*)
Ayy = Ayy/(NN/2);
Ayy[] = Ayy[]/2;
(*Ayy[]=0;*)
F = Range;
F = (F - 1)*Fs/NN;
FF = Array;
Do = F[]; h3 = 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=; %采样时刻
%信号
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)*Fs/N; %换算成实际的频率值
plot(F(1:N/2),Ayy(1:N/2)); %显示换算后的FFT模值结果
title('幅度-频率曲线图');
Y1=Ayy(1:N/2);
=max(Y1);
Y1(dda1)=0;
=max(Y1);
Y1(dda2)=0;
=max(Y1);
da1
da2
da3
figure;
Pyy=;
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('相位-频率曲线图'); 下午想了一下,试过了,应该是采样时间取得不够长
页:
[1]