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 に答える