【问题标题】:DST transform in Matlab Vs FFTW3Matlab Vs FFTW3中的DST变换
【发布时间】:2014-04-02 16:32:17
【问题描述】:

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

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

【问题讨论】:

    标签: matlab octave fftw


    【解决方案1】:

    如果您正在寻找完全相同的转换,您可以尝试使用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

    再见,

    【讨论】:

    • 太棒了!你是对的,我使用了错误的变换
    【解决方案2】:

    试过这个 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_RODFT00”标志的 FFTW 给 [-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]

    即使使用相同的标志,基本上也是两倍的差异

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 2016-01-07
      • 2011-06-15
      • 2014-08-09
      相关资源
      最近更新 更多