【问题标题】:How can i use fft to find the maximum frequency of a periodic signal?如何使用 fft 找到周期信号的最大频率?
【发布时间】:2019-01-15 15:34:40
【问题描述】:

我试图在 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);

【问题讨论】:

  • 你不应该使用plot(t, abs(y))吗?此外,您的时间向量太短,无法看到较小频率的效果。例如t=[-0.02:10^-3:0.2];
  • 我做到了,但我仍然得到小曲线,而不是专门的 delta 函数
  • @bill 因为 A)变换是离散的,并且 B)你用线连接点。主要是一个。
  • 另外,t 并不是您想要绘制 y 的轴。
  • @LuisMendo,你的意思是t=[-0.2:10^-3:0.2];?对?因为有了t=[-0.02:10^-3:0.2];,我们改变了整个情节。

标签: matlab max fft frequency


【解决方案1】:

这里有一个code-sn-p,可以帮助你了解如何使用matlab中的fft获取频谱。

要记住的是:

  1. 您需要根据奈奎斯特准则确定采样频率,该频率应该足够高(您需要采样的数量,至少是最高频率的两倍以上,否则我们将产生混叠)。这意味着,此示例中的 fs 不能低于 2 * 110。最好让它更高以看到更好的信号外观。

  2. 对于真实信号,您需要的是作为 fft() 函数输出的绝对平方的功率谱。包含相位的虚部应该只包含噪声。 (我没有在这里绘制相位,但您可以自己检查。)

  3. 最后,我们需要使用fftshift 来移动信号,以便我们获得零频率附近的镜像频谱。
  4. 峰值将出现在正确的频率上。现在只考虑正频率,如您所见,我们在 100Hz 处有最大的峰值,在 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);

输出图:

  1. 第一个图是时域中的信号
  2. 频域中的信号
  3. 移位的 fft 信号

【讨论】:

  • 非常感谢我之前在纸上发现了相同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 2015-08-08
  • 2013-04-01
  • 2022-11-07
相关资源
最近更新 更多