Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何用FFT求周期函数的周期?_Matlab_Fft - Fatal编程技术网

Matlab 如何用FFT求周期函数的周期?

Matlab 如何用FFT求周期函数的周期?,matlab,fft,Matlab,Fft,假设我有一个平滑函数(表示为向量): 我想找出它的周期性π(甚至是它的频率-2)。 我尝试了以下方法: nfft=1024; Y=fft(y,nfft); Y=abs(Y(1:nfft/2)); plot(Y); 但显然它不起作用(图中没有给我“2”处的峰值) 你能帮我找到一个方法来找到值“2”吗 提前感谢您这里有几个问题: 当实际信号为y x应以弧度为单位 您需要定义采样率并使用它来确定沿x轴的频率值 因此,一旦我们纠正了所有这些问题,我们得到: samplingRate = 1000;

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

我想找出它的周期性π(甚至是它的频率-2)。 我尝试了以下方法:

nfft=1024;
Y=fft(y,nfft);
Y=abs(Y(1:nfft/2));
plot(Y);
但显然它不起作用(图中没有给我“2”处的峰值)

你能帮我找到一个方法来找到值“2”吗


提前感谢

您这里有几个问题:

  • 当实际信号为
    y

  • x
    应以弧度为单位

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

  • 因此,一旦我们纠正了所有这些问题,我们得到:

    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)
    

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

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


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

    有关FFT bin index与频率的关系的解释,请参阅。您是在寻找未知频率的谐波信号的周期还是任何信号的周期?我有$f(x)$作为某些偏微分方程的(周期性)数值解,我想用FFT求它的周期性。所以我想你提到的第二个选择是正确的。谢谢你是对的,我指的是fft(y),当然,并且修正了它。我想我理解你的答案,但现在假设我无法控制x的值。i、 e.-我得到一个函数(作为向量),它是在另一个向量-x上定义的(我想找到它的频率)。如何确定采样率并使用您刚刚编写的代码?多谢各位@约翰博士要确定频率,你必须知道输入的采样率。所以当我得到函数(“输入”)作为偏微分方程的数值解时,我不能用fft来求周期?(也就是说,在我的例子中,我想用傅里叶变换来求一个函数的周期,这是一个非常混乱的偏微分方程组的解。在数值求解这个问题之后,我得到一个向量x(这是我的域)和另一个向量f(数值解)…在这种情况下,我如何获得采样率?)@约翰博士,在你的情况下,采样率仅仅是样本数吗?我不确定。让我们回到我的第一个公式,并假设我只有x=linspace(01000);y=sin(2*x);从这些数据中,我想得到“2”处的峰值。有没有可能在不改变“x”的情况下得到它?(例如,写一些类似fft(y)的东西,然后得到“2”)?这种情况的抽样率是多少?(当我无法控制x值时)
    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)