Matlab 如何用FFT求周期函数的周期?
假设我有一个平滑函数(表示为向量): 我想找出它的周期性π(甚至是它的频率-2)。 我尝试了以下方法: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;
nfft=1024;
Y=fft(y,nfft);
Y=abs(Y(1:nfft/2));
plot(Y);
但显然它不起作用(图中没有给我“2”处的峰值)
你能帮我找到一个方法来找到值“2”吗
提前感谢您这里有几个问题:
y
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)