如何使用FFT查找周期函数的周期?

时间:2017-04-02 15:40:42

标签: matlab fft

假设我有一个平滑的函数(表示为向量):

<div>

我希望找到它的周期性 - pi(甚至它的频率-2)。 我尝试过以下方法:

x=0:0.1:1000; 
y=sin(2*x); 

但显然它不起作用(情节不会给我一个“2”的峰值)。

请您帮我找到找到值“2”的方法吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

这里有几个问题:

  1. 当您的实际信号为fft

    时,您正计算x y
  2. x应该是弧度

  3. 您需要定义采样率并使用它来确定沿x轴的频率值

  4. 因此,一旦我们纠正了所有这些事情,我们就会得到:

    samplingRate = 1000;   % Samples per period
    nPeriods = 10;
    nSamples = samplingRate * nPeriods;
    
    x = linspace(0, 2*pi*nPeriods, nSamples);
    y = sin(2*x);
    
    F = fft(y);
    
    amplitude = abs(F / nSamples);
    
    f = samplingRate / nSamples*[0:(nSamples/2-1),-nSamples/2:-1];
    
    plot(f, amplitude)
    

    enter image description here

答案 1 :(得分:1)

通常,您不能单独使用FFT来查找周期信号的周期。这是因为FFT进行正弦基分解(或基变换),并且可以重复许多非正弦波形(看起来绝对不像正弦波或单个正弦基矢量的信号)以形成周期函数,波形或信号。因此,很可能在FFT结果中根本不显示周期函数或波形的频率(它被称为缺失的基本问题)。

只有在接近或接近正弦信号的情况下,FFT才能可靠地报告该周期函数周期的倒数。

有很多音高检测/估算算法。您可以使用FFT作为某些复合方法的子组件,包括倒谱或倒谱分析,以及谐波产品谱间距检测方法。