1

我在 Matlab 中有一个大小为Sig的数据集。65536 x 192如果我想沿第二维取一维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 使用Column-major order。它可以解释性能的差异。如果对列进行操作,性能是否相同?如果这是正确的解释,您可以dwt循环使用。

于 2011-10-12T13:26:47.877 回答
1

如果您真的需要性能,一个解决方案是按照您想要的方式调用 C 离散小波变换库来执行您自己的 MEX。

于 2011-10-12T14:17:39.553 回答
0

我想你正在使用小波工具箱中的功能:http: //www.mathworks.co.uk/help/toolbox/wavelet/ref/dwt.html

该文档似乎没有描述对数组的操作,因此它可能不受支持。如果它确实允许您输入一个数组,那么它将在第一个非单维维度上进行操作,或者它将忽略形状并将其视为向量。

于 2011-10-12T14:12:38.693 回答