1

Matlabにサイズのデータ​​セットSigがあります。65536 x 1922 番目の次元に沿って1 次元のfftを取得する場合は、for ループを実行できます。

%pre-allocate ect..
for i=1:65536
   F(i,:) = fft(Sig(i,:));
end

または、ディメンションを指定して、for ループなしで実行することもできます。

F = fft(Sig,[],2);

これは、私のデータセットでは約 20 倍高速です。

離散ウェーブレット変換 (dwt) に似たものを探しましたが、見つかりませんでした。だから、Matlabで指定された次元でdwtを行う方法を誰かが知っているかどうか疑問に思っていましたか? または、for ループを使用する必要がありますか?

4

3 に答える 3

2

ループFFTの例では、ラインで操作しているようです。Matlab は列優先順を使用します。それは性能の違いを説明するかもしれません。列を操作してもパフォーマンスは同じですか? これが正しい説明であればdwt、ループで使用できます。

于 2011-10-12T13:26:47.877 に答える
1

本当にパフォーマンスが必要な場合の解決策は、C離散ウェーブレット変換ライブラリを希望どおりに呼び出す独自のMEXを実行することです。

于 2011-10-12T14:17:39.553 に答える
0

Wavelet Toolbox の関数を使用していると思います: http://www.mathworks.co.uk/help/toolbox/wavelet/ref/dwt.html

ドキュメントには、配列に対する操作については説明されていないようです。そのため、おそらくサポートされていません。配列を入力できる場合は、大きさが 1 でない最初の次元で動作するか、形状を無視してベクトルとして扱います。

于 2011-10-12T14:12:38.693 に答える