确定给定时期的周期

时间:2014-04-11 19:35:04

标签: matlab numerical-methods

我想考虑在math.stackexchange.com上提出以下问题

https://math.stackexchange.com/questions/732563/detect-largest-period-in-non-harmonic-components

在数学上清楚地说,在一般情况下,确定给定信号的基本周期并不是由不同周期(1 /频率)组成的不同周期分量,但是我怎么能用程序来应用呢?让我们假设我们有输入周期数组,当然一种方法只是在数学上解决它并使用计算机软件来解决它,但是可以应用直接程序吗?例如让我们再次考虑来自这个网站的例子,我们只看到13.99是包含的数字更多的数字。,但实际上可以编程检测并解决?或者更好的解析我们分析然后应用代码或简单的计算器?提前感谢

2 个答案:

答案 0 :(得分:1)

只要输入像1/13.99这样的双精度表,就会丢失,因为它会导致精度错误。我选择了一种简单的方法,将分子和分母分开。

T=[100,100,100,100;1350,1399,2530,2600];
%assume all nominators are equal, if this is not the case for your data the code must be extended
assert(~any(diff(T(1,:))))
%enable vpa, this line can be commented out if double precission is
%sufficient.
T=vpa(T);
%get E=(bcd,acd,abd,abc)
E=prod(T(2,:))./T(2,:);
%get l=lcm(E)
l=1;
for ix=E
    l=lcm(l,ix);
end
period=T(1,1)/prod(T(2,:))*l;

答案 1 :(得分:1)

如果我理解你的问题,“你想要将信号分解成单独的正弦波”数字。

可以使用程序获得信号的频率(f)或时间段(1 / f)。您可以通过在时域中使用离散值(DFT)使用快速傅里叶变换(FFT)来实现。在您描述的示例中,有4个不同的频率,当转换到频域(使用FT)时,将在这4个频率处产生四个支柱,而在其他地方,该值将为零(由于计算机的有限精度,几乎为零) )。阅读维基百科上的文章:Fast Fourier transform

我不是这方面的专家,但这是我对傅立叶变换的理解。希望它对你有所帮助。