计算阻尼波的fft

时间:2013-04-30 20:59:01

标签: matlab fft physics

我有一个时间序列,它是阻尼波的线性组合。数据是真实的。

Y(t)= SUM_w exp( - gamma t)sin(ωt)

没有分析形式,但这是最接近的猜测。我想对这些数据进行傅立叶分析(FFT)并获得实际频率和阻尼率。

我正在使用matlab,但任何工具都没问题 谢谢!

2 个答案:

答案 0 :(得分:0)

您的问题更适合http://math.stackexchange.com,其中LaTeX渲染可用于公式。相反,你必须使用例如这个书签正确显示:

javascript:(function(){function%20a(a){var%20b=a.createElement('script'),c;b.src='https://c328740.ssl.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML.js',b.type='text/javascript',c='MathJax.Hub.Config({tex2jax:{inlineMath:[[\'$\',\'$\']],displayMath:[[\'\\\\[\',\'\\\\]\']],processEscapes:true}});MathJax.Hub.Startup.onload();',window.opera?b.innerHTML=c:b.text=c,a.getElementsByTagName('head')[0].appendChild(b)}function%20b(b){b.MathJax===undefined?a(b.document):b.MathJax.Hub.Queue(new%20b.Array('Typeset',b.MathJax.Hub))}var%20c=document.getElementsByTagName('iframe'),d,e;b(window);for(d=0;d<c.length;d++)e=c[d].contentWindow||c[d].contentDocument,e.document||(e=e.parentNode),b(e)})()

首先,我认为你的功能更准确的是那种 $ \ sum \ limits_k e ^ { - \ gamma_k t} \ sin(\ omega_k t)$ for $ t&gt; 0 $和$ 0 $ for $ t&lt; 0 $(否则函数将趋于无穷大$ t \ to- \ infty $)。由于阻尼函数不是周期性的,因此不能使用傅立叶分析,但必须使用Fourier transform,这会产生连续频率而非离散频率的幅度。使用复数表示$ \ sin(x)= \ frac {e ^ {ix} -e ^ { - ix}} {2i} $,总和中的每个项都可以单独进行傅里叶变换,得出

$ \ frac1 {2 \ pi} \ int_0 ^ \ infty e ^ { - \ gamma_k t} \ sin(\ omega_k t)e ^ { - i \ omega t} \,dt = \ frac {\ omega_k} {2 \ pi [(\ gamma + i \ omega)^ 2 + \ omega_k ^ 2]} = \ frac {\ omega_k} {2 \ pi} \ frac {(\ gamma ^ 2- \ omega ^ 2 + \ omega_k ^ 2)+ 2i \ gamma \ omega \ omega_k} {[\ gamma ^ 2- \ omega ^ 2 + \ omega_k ^ 2] ^ 2 + 4 \ gamma ^ 2 \ omega ^ 2} $

由于你说的是阻尼正弦只是一个猜测,你必须以某种方式离散这个无限的积分,尽管由于阻尼在一个足够大的时间$ t $的截止值应该是有序的。 如果阻尼$ \ gamma_k $对于所有加数实际上是相同的,那么您的生活将变得更加容易:将数据乘以$ e ^ {+ \ gamma t} $以获得周期性信号,您现在可以真的是FFT。

答案 1 :(得分:0)

首先将您的功能数字化:

t=0:dt:T; % define sampling interval dt and duration T according to your needs
Y=sum(exp(-gamma*t).*sin(omega*t));

然后做fft和情节:

Y_f=fft(Y);
plot(abs(Y_f));