Преобразование DST в Matlab Vs FFTW3

Я переношу код Matlab/Octave на C. Одной из реализаций, которые мне нужно перенести, является преобразование DST. В Matlab/Octave это делается с помощью

A =[0.00000   4.24264   5.65685   7.07107   8.48528   0.00000]
res = dst(A)
ans =
22.3599   -4.7499   -4.4287    2.9465   -6.8864    1.9383

В C я сделал то, что написано в документации FFTW3:

n = 6;
fftw_plan plan = fftw_plan_r2r_1d( n, in, out, FFTW_RODFT10, FFTW_ESTIMATE);
fftw_execute ( plan );

где in — входной массив. Результатом этого является out:

 42.588457
-9.899495
 0.000000
 2.449490
-11.411543
 5.656854

Почему эти результаты такие разные? Любые идеи о том, что я делаю неправильно здесь, если таковые имеются?


person Manolete    schedule 02.04.2014    source источник


Ответы (2)


Если вы ищете точно такое же преобразование, вы можете вместо этого попробовать флаг RODFT00.

По документам fftw, matlab, octave вроде подходит, кроме 2 фактора. Вывод fftw может быть в два раза больше, чем у matlab или octave.

http://www.mathworks.fr/fr/help/pde/ug/dst.html

http://octave.sourceforge.net/signal/function/dst.html

http://www.fftw.org/doc/1d-Real_002dodd-DFTs-_0028DSTs_0029.html

До свидания,

person francis    schedule 02.04.2014
comment
классно! Вы правы, я использовал неправильное преобразование - person Manolete; 02.04.2014

попытался это х = [0 -0,041389004581424 -0,049979175343607 -0,057007496876302 -0,062473969179509 -0,066378592253228 -0,068721366097459 -0,069502290712203 -0,068721366097459 -0,066378592253228 -0,062473969179509 -0,057007496876302 -0,049979175343607 -0,041389004581424 0,500000000000000 -0,500000000000000]

ДСТ от Matlab дает: DST (х) = [- +0,524649937006448 -0,208549082037091 +0,175438242940290 -0,201365706563574 +0,122632326416342 +0,023410695189363 -0,170916792532103 +0,404635063593086 -0,557336293807673 +0,766827077578399 -0,834391996423464 +0,916008576298954 -0,836787527646708 +0,743037852780101 -0,522660424688284 0.285317021943821]

Используя FFTW с флагом «FFTW_RODFT00» дает [-1.0493 -0.417098 0.350876 -0.402731 0.245265 0.0468214 -0.341834 0.80927 -1.11467 1.53365 -1.66878 1.83202 -1.67358 1.48608 -1.04532 0.570634]

В основном разница в два раза, даже если используется один и тот же флаг

person JimBamFeng    schedule 15.01.2018