0

通常我使用 pmtm 计算信号的频谱:

signal = rand(1000,1);
NW = 4;
Fr = 1:50;
Fs = 200;
[p, fr] = pmtm( signal, NW, Fr, Fs);

但是,我正在寻找一种对其进行矢量化的方法,以便我可以同时计算多个光谱。我试过了:

signal = rand(1000,10); %<--- notice I have 10 columns instead of 1
NW = 4;
Fr = 1:50;
Fs = 200;
[p, fr] = pmtm( signal, NW, Fr, Fs);

但它会产生一个错误,并不能真正告诉我我做错了什么。我知道我可以将调用包装pmtm在一个循环中。

这是错误:

错误使用 .* 矩阵尺寸必须一致。

pmtm>mtm_spectrum 中的错误(第 231 行)[Xx,w] = computeDFT(E(:,1:k).*x(:,ones(1,k)),nfft,Fs);

pmtm 中的错误(第 142 行)[S,k,w] = mtm_spectrum(x,params);

这让我怀疑没有一种矢量化的方式来实现我想要的。我希望这里有人知道如何做到这一点。

4

1 回答 1

0

是什么让您认为 pmtm 旨在处理矩阵?帮助菜单特别需要一个向量:

>> help pmtm
 pmtm   Power Spectral Density (PSD) estimate via the Thomson multitaper 
    method (MTM).
    Pxx = pmtm(X) returns the PSD of a discrete-time signal vector X in 
    the vector Pxx.  Pxx is the distribution of power per unit frequency.
    The frequency is expressed in units of radians/sample.  pmtm uses a 
    default FFT length equal to the greater of 256 and the next power of
    2 greater than the length of X.  The FFT length determines the length
    of Pxx.
...

如果您追求性能,您可能希望使用 2D fft (fft2) 获得信号的频谱表示,然后自行计算功率分布。这将允许您在没有任何 for 循环的情况下处理 2D 数组,但这肯定意味着您需要更多编码:-(

于 2013-03-04T05:25:43.183 回答