Matlab DWT через указанное измерение - PullRequest
1 голос
/ 12 октября 2011

У меня есть набор данных Sig размера 65536 x 192 в Matlab. Если я хочу взять одномерный fft вдоль второго измерения, я мог бы сделать цикл for:

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

или я мог бы указать размер и сделать это без цикла for:

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

, что примерно в 20 раз быстрее для моего набора данных.

Я искал что-то подобное для дискретного вейвлет-преобразования (dwt), но не смог его найти. Поэтому мне было интересно, если кто-нибудь знает способ сделать DWT через указанное измерение в Matlab? Или я должен использовать для петель?

Ответы [ 3 ]

2 голосов
/ 12 октября 2011

В вашем примере с циклом FFT кажется, что вы работаете с линиями.Matlab использует мажорный столбец порядка .Это может объяснить разницу в производительности.Является ли производительность одинаковой, если вы работаете со столбцами?Если это правильное объяснение, вы можете использовать dwt в цикле.

1 голос
/ 12 октября 2011

Решение, если вам действительно нужна производительность, - это сделать свой собственный MEX, вызывающий библиотеку дискретного вейвлет-преобразования C, так, как вы хотите.

0 голосов
/ 12 октября 2011

Полагаю, вы используете функцию из набора инструментов Wavelet: http://www.mathworks.co.uk/help/toolbox/wavelet/ref/dwt.html

Документация не описывает действия с массивом, поэтому, вероятно, она не поддерживается.Если он позволяет вам вводить массив, он будет работать с первым не-одиночным измерением или игнорирует форму и обрабатывает ее как вектор.

...