如何在Mathematica或C# (.NET 4.0)中重写MATLAB pmtm函数?
我以这种方式使用pmtm:
[p,f] = pmtm(data,tapers,n,fs);或者使用spectrum.mtm和psd在不使用pmtm的情况下编写。
Hs = spectrum.mtm(tapers,'adapt');
powerspectrum = psd(Hs,data,'Fs',fs,'NFFT',n);
p = powerspectrum.data;
f = powerspectrum.Frequencies;其中data是具有2048个元素的列向量,fs = 40,tapers =8,n= 2^nextpow2(size(data,1)) = 2048;
谢谢。
发布于 2015-01-07 20:46:55
pmtm (多锥形法)是一种计算功率谱的非参数方法,类似于周期图法。
在这种方法中,功率谱是通过对数据加窗并计算傅立叶变换,取结果的大小并对其平方来计算的。多锥度方法平均预定数量的周期图,每个周期图用不同的窗口计算。此方法之所以有效,是因为选定的窗口具有两个数学属性。首先,窗口是正交的。这意味着每个周期图是不相关的,所以平均多个周期图给出的估计比只使用一个锥度的方差更低。其次,对于固定的信号长度,窗口在频域中具有最佳的可能浓度。这意味着这些窗口在泄漏方面表现得尽可能好。
Mathematica有一个包含像PowerSpectralDensity这样的函数的time series包。
如果您还有其他问题,请在https://mathematica.stackexchange.com/中提问
https://stackoverflow.com/questions/27817934
复制相似问题