Matlab与FFTW3中的DST变换

时间:2014-04-02 16:32:18

标签: matlab octave fftw

我正在将一个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

为什么这些结果如此不同?如果有的话,我在这里做错了什么想法?

2 个答案:

答案 0 :(得分: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

再见,

答案 1 :(得分:1)

尝试了这个x = [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给出:  DST(X)= [ - 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]

基本上两个因素是差异,即使使用相同的标志