如枫 发表于 2011-4-23 09:13

请教频谱分析程序,奇怪的现象

我用下面的程序对余弦信号做频谱分析,当信号频率大于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", "振幅"}]

如枫 发表于 2011-4-23 09:13

下面是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('相位-频率曲线图');

如枫 发表于 2011-4-24 20:06

下午想了一下,试过了,应该是采样时间取得不够长
页: [1]
查看完整版本: 请教频谱分析程序,奇怪的现象