0

让我们考虑以下代码

function [ x ] = generate1(N,m,A3)
f1 = 100;
f2 = 200;
T = 1./f1;
t = (0:(N*T/m):(N*T))'; %'
wn = randn(length(t),1); %zero mean variance 1
x = 20.*sin(2.*pi.*f1.*t) + 30.*cos(2.*pi.*f2.*t) + A3.*wn;
%[pks,locs] = findpeaks(x);
 %plot(x);
end

正如我所知,傅里叶域中的峰值代表这个频率,它们存在于信号中,例如让我们绘制这个信号的傅里叶变换图让我们运行这个信号

y=generate1(3,500,1);

和情节

plot(abs(fft(y)))

在此处输入图像描述

但很明显,它没有显示信号中给定频率的峰值,有什么问题?请帮助我,通常它是固定信号,为什么这张图应该显示准确的图片但它没有,为什么?

编辑:

y1=generate1(3,500,0); 在此处输入图像描述

4

1 回答 1

1
function [ x, fs ] = generate1(N,m,A3)
f1 = 100;
f2 = 200;
T = 1./f1;
t = (0:(N*T/m):(N*T))'; %'
wn = randn(length(t),1); %zero mean variance 1
x = 20.*sin(2.*pi.*f1.*t) + 30.*cos(2.*pi.*f2.*t) + A3.*wn;
%[pks,locs] = findpeaks(x);
 %plot(x);
 fs = 1/(t(2)-t(1));
end

看看

absfft = abs(fft(y));
plot(fs/2*linspace(0,1,length(absfft)/2+1),2*absfft(1:end/2+1))

或者

plot(linspace(-fs/2,fs/2,length(absfft)),fftshift(absfft))

绘图中的 x 轴从 0 到 fs/2,然后从 -fs/2 到 0

于 2014-01-04T10:24:06.550 回答