Part Number:TMS320VC5509A
有1000点的16位整数数据,
做2048点的fft
matlab结果(没有去掉负频部分)
实部
虚部
dsp结果 (语句:rfft(rcv,2048,NOSCALE);)
手册上说 输出结果是 第一个数的实部、第一个数的虚部、第二个数的实部、第二个数的虚部…..以此类推,并且去除了负频率部分。从图中可以看出第一个频带的位置是正确的,但是第二个频带据应该是多余的,不知道为什么会有。
求大佬解答
Shine:
请看下面user guide里对rfft函数的说明。 Comparing the results to MATLAB https://www.ti.com/lit/ug/spru422j/spru422j.pdf
,
wang jin:
1.非常感谢您的回答,我也看了您发的手册,并且怀疑与下面这两点有关
2.但是,我又发现:当我把fft点数改为1024时,同一组数据就与matlab上的1024点的fft结果相同了;并且修改做fft的数据后两边依然能得到相同的数据,这是因为什么我也没有想清楚。
3.另外,我尝试修改‘1’中所提到的两点,在cmd文件中做如下改动
(画红线部分位后添加的语句)
但所得结果依然不正确(相比于之前,不应该出现的部分,相对位置向后移动了)
4.同时我也看到有人说:这种情况可能是twiddle table的问题,需要对 “twiddle.asm” 文件进行修改,但是我没太看懂修改方法。
论坛地址In the DspLib example for the rfft the alignment of the twiddle-factor table is only coincidentally right – Processors forum – Processors – TI E2E support forums
然后还有一个相关的文件Microsoft Word – TMS320C5500 DSPLIB库twiddle表对齐的问题.doc (qsl.net)
5.所以我想了解一下依您的经验是如何看待这个问题的。
,
Shine:
wang jin 说:2.但是,我又发现:当我把fft点数改为1024时,同一组数据就与matlab上的1024点的fft结果相同了;并且修改做fft的数据后两边依然能得到相同的数据,这是因为什么我也没有想清楚。
您的意思是只要超过1024点就不正确了?在cfft函数最大支持1024点,请看下面的说明。nx Number of complex elements in vector x. Must be between 8 and 1024.
,
wang jin:
我调用的是rfft函数,手册上说是可以取2048,难道是写错了吗,实际上就是能计算1024点是这样吗
,
wang jin:
然后下面是一组计算结果
原信号
matlab计算结果的实部(只有正频率)
dsp计算结果的实部
dsp绘图参数
,
wang jin:
我试着把rfft换成了rfft32,修改了一下输入数据类型,做2048点的傅里叶变换,结果就与matlab给出的结果相同了。
但是呢,调用函数rfft32会有一个警告,
“#225-D</a> function declared implicitly”
理论上这是一个严重的问题,但是在这里似乎可以忽略。
,
Shine:
抱歉,看成cfft了。rfft支持2048点的。
“#225-D</a> function declared implicitly”这个报错信息,请看下面的FAQ。https://software-dl.ti.com/ccs/esd/documents/dmed/HTML/225.html
,
wang jin:
那既然rfft支持2048点的fft,为什么计算1024点的结果是正确的,而2048点就是错误的,这二者在计算时有什么不同吗,是有什么东西被我忽略了吗
,
wang jin:
我想明白了,rfft只能计算1024点的fft,想要计算2048点的fft,这里有一个方法:
2048点FFT在定点DSP上的实现 – 中国知网 (cnki.net)
非常感谢您这几天的帮助!
,
Shine:
不客气~
感谢分享解决方法!
,
wang jin:
还有一点忘了说了,在cmd文件中应该使 .data 段位于 以2000h为起始的一段内存中,应该是和旋转表的位置有关,虽然不太清楚是为什么,但确实是要这样设置。