-1

我想通过 VHDL 实现 Loeffler 快速 dct 算法。在此之前,我检查了给定数据的算法结果,如下所示:

x=[0 1 2 3 4 5 6 7]

然后我使用这个算法计算了 dct 等效值,结果如下:

y=[28  -8.47  0  -4.6638  0  10.43  0  -5.966 ]

但是matlab的结果是这样的:

y=dct(x)

y =

第 1 至 6 列

9.8995   -6.4423         0   -0.6735         0   -0.2009

第 7 至 8 列

     0   -0.0507

我的错误是什么?

谢谢

4

2 回答 2

0

我不明白为什么 Loeffler 算法的结果与 matlab 的结果不同。

顺便说一句,在此页面中:

http://calculator.vhex.net/post/calculator-result/discrete-cosine-transform

输入序列 a:i ai 1 0 2 1 3 2 4 3 5 4 6 5 7 6 8 7 结果:i
1 56 2 -25.769292 3 0 4 -2.693819 5 0 6 -0.803612 7 0 8 -0.202809

结果与 matlab 或 Loeffler 算法的任何结果都不匹配!!!

我真的很困惑。为什么每个都有与其他人不匹配的结果。

于 2014-05-14T08:57:25.220 回答
0

您的实现计算非标准化 DCT-II。您可以简单地乘以以下公式来标准化您的结果:

1

您的结果现在应该是:

y = [9.899  -4.235  0  -2.316  0  5.215  0  -2.983]

确保结果不等于 matlab,您的 Loeffler 结果应该是这样的:

y = [28  -12.8846  0  -1.3469  0  -0.4018  0  -0.1014]

资料来源: https ://help.scilab.org/doc/5.5.2/en_US/dct.html

于 2017-06-06T21:30:06.800 回答