我正在尝试在Matlab中查找周期信号的最大频率,并且我知道当您将周期信号转换为频谱时,您只会得到delta函数,但是在生成的delta函数之间却得到了一些曲线。这是代码:
t=[-0.02:10^-3:0.02];
s=5.*(1+cos(2*pi*10*t)).*cos(2*pi*100*t);
figure, subplot(211), plot(t,s);
y=fft(s);
subplot(212), plot(t,y);
答案 0 :(得分:1)
以下代码段可帮助您了解如何使用matlab
中的 fft 获得频率频谱。
要记住的是:
您需要根据奈奎斯特准则确定一个采样频率,该频率应该足够高(您需要采样数量,至少要大于最高频率的两倍,否则我们将产生混叠)。这意味着,本例中的fs不能低于2 * 110
。最好让它更高,以便看到更好的信号外观。
对于真实信号,您想要的是作为fft()函数输出的绝对值的平方得到的功率谱。包含相位的虚部应该只包含噪声。 (我没有在此处绘制阶段,但是您可以这样做检查一下自己。)
fftshift
来移位信号,以便获得零频率附近的镜像频谱。 100Hz +- 10Hz
附近还有两个波瓣,分别是90Hz和110Hz。显然,在您的示例中, 110Hz 是最高频率。
代码:
fs = 500; % sampling frequency - Should be high enough! Remember Nyquist!
t=[-.2:1/fs:.2];
s= 5.*(1+cos(2*pi*10*t)).*cos(2*pi*100*t);
figure, subplot(311), plot(t,s);
n = length(s);
y=fft(s);
f = (0:n-1)*(fs/n); % frequency range
power = abs(y).^2/n;
subplot(312), plot(f, power);
Y = fftshift(y);
fshift = (-n/2:n/2-1)*(fs/n); % zero-centered frequency range
powershift = abs(Y).^2/n;
subplot(313), plot(fshift, powershift);
输出图: