lofky 发表于 2015-8-10 22:53:50

如何利用TI提供的FFT的汇编算法?

小弟用ti提供的高度优化了的FFT汇编算法,一直用不好。
这样的:一个正弦函数,用数组离散化,256个点,通过黑匣子(汇编FFT算法,我不懂),用ccs自带的graph显示处理之后output数组,结果不正确。
而用网上提供的FFT算法,按同样的思路,最后得到的频谱和书中描述差不多,是对的。
现有如下资料:官方程序一份(改了数据来源:用数组离散化一个正弦函数)英文解释手册一份
请指教,谢谢

siyeb 发表于 2015-8-13 10:57:49

得把你的程序和CMD文件发上来,FFT库没问题。

lofky 发表于 2015-8-14 09:52:23

本帖最后由 lofky 于 2015-8-14 10:01 编辑

siyeb 发表于 2015-8-13 10:57
得把你的程序和CMD文件发上来,FFT库没问题。
cmd是这个,程序就是上面那个,谢谢
再请问下,你怎么知道FFT库没问题?看得懂汇编吗?是不是我graph还是哪操作不对,感觉官方的程序不会有问题的

siyeb 发表于 2015-8-14 10:06:52

本帖最后由 siyeb 于 2015-8-14 10:22 编辑

lofky 发表于 2015-8-14 09:52
cmd是这个,程序就是上面那个,谢谢
再请问下,你怎么知道FFT库没问题?看得懂汇编吗?是不是我graph还是 ...

能不能把程序粘出来?我一下载就报恶意软件。

这个库我用过,是没有问题的。

lofky 发表于 2015-8-14 10:31:38

siyeb 发表于 2015-8-14 10:06
能不能把程序粘出来?我一下载就报恶意软件。

这个库我用过,是没有问题的。 ...


这是.c文件,你看还需要什么

siyeb 发表于 2015-8-14 11:05:05

本帖最后由 siyeb 于 2015-8-14 11:13 编辑

lofky 发表于 2015-8-14 10:31
这是.c文件,你看还需要什么

你把NL改成1024 或者把RFFT_STATES 成7 再试一下~

啊,不对不对,等我方针一下啊

lofky 发表于 2015-8-14 11:21:26

siyeb 发表于 2015-8-14 11:05
你把NL改成1024 或者把RFFT_STATES 成7 再试一下~

啊,不对不对,等我方针一下啊 ...

好 ,不急不急

siyeb 发表于 2015-8-14 11:47:51

lofky 发表于 2015-8-14 11:21
好 ,不急不急

你的频谱图是这样么?

这个谱图不对。

siyeb 发表于 2015-8-14 12:48:26

本帖最后由 siyeb 于 2015-8-14 12:51 编辑

lofky 发表于 2015-8-14 11:21
好 ,不急不急

问题解决。你用他给的工程得把那堆asm文件包含进去,要不然无法完成计算。

就是下面这一堆。

你现在的工程,你把断点打在RFFT_adc_f32(&rfft_adc );        处,然后asm stepinto 你会发现找不到代码,所以这个计算根本就没进行。


lofky 发表于 2015-8-14 22:45:18

本帖最后由 lofky 于 2015-8-15 15:23 编辑

siyeb 发表于 2015-8-14 12:48
问题解决。你用他给的工程得把那堆asm文件包含进去,要不然无法完成计算。

就是下面这一堆。

我把那些asm加进去了,再asm step into,可以找得到函数了。但是,我的结果还是不对,我的图片属性是这样配置的,你看是不是这有问题?

siyeb 发表于 2015-8-16 11:40:48

本帖最后由 siyeb 于 2015-8-16 11:42 编辑

lofky 发表于 2015-8-14 22:45
我把那些asm加进去了,再asm step into,可以找得到函数了。但是,我的结果还是不对,我的图片属性是这样 ...

不对,你的显示输出应该是RFFTmagBuff。outbuff里面存储的是实部虚部,不是频谱。

lofky 发表于 2015-8-16 16:07:28

siyeb 发表于 2015-8-16 11:40
不对,你的显示输出应该是RFFTmagBuff。outbuff里面存储的是实部虚部,不是频谱。 ...


谢谢你的耐心解答,终于得到了结果,心中还有点点疑问:这个结果和matlab结果不太一样,不大懂这个程序,你当初是怎么利用这个fft库的,只要知道 rfft_adc.InBuf = &Input是输入,RFFTmagBuff是输出就可以吗?

siyeb 发表于 2015-8-16 17:51:54

本帖最后由 siyeb 于 2015-8-16 18:46 编辑

lofky 发表于 2015-8-16 16:07
谢谢你的耐心解答,终于得到了结果,心中还有点点疑问:这个结果和matlab结果不太一样,不大懂这个程序 ...

你这个怎么变成128点的FFT了?不是256的么?

FFT具体的应用一句两句说不清楚,建议研读参考手册。

它里面有好几个asm文件,除了phase和mag这两个asm,其他的都是做fft的。输出是fftoutbuf。这里面存储的是fft的结果,包含虚部和实部。

你要看频谱也就是幅度谱,得对fftout这里面的数据做处理,具体就是虚部实部的平方和开根号。从而得出幅度谱。

相位谱同理。

所以才会调用fft_f32.asm和mag。asm两个函数。

另,你的这个波形应该不是露出位的程序吧?是不是做了修改?

lofky 发表于 2015-8-16 21:03:10

本帖最后由 lofky 于 2015-8-17 10:19 编辑

siyeb 发表于 2015-8-16 17:51
你这个怎么变成128点的FFT了?不是256的么?

FFT具体的应用一句两句说不清楚,建议研读参考手册。


非常感谢!让我懂了不少知识。这个波形是我用matlab里y=fft(x,SAMPLE_NODES)的波形,我对fft还不是很了解,你问的问题(波形应该不是露出位的程序吧?)没看懂。。
fftoutbuf怎么一个排列呢直流分量基波 一次 二次 。。。
介意留个qq号么?我正在学28335和6748,我们相互学习交流下,如果你想要6748的什么资料,我找了挺多的

siyeb 发表于 2015-8-17 13:52:35

lofky 发表于 2015-8-16 21:03
非常感谢!让我懂了不少知识。这个波形是我用matlab里y=fft(x,SAMPLE_NODES)的波形,我对fft还不是很了 ...

从图上来看,你的SAMPLE_NODES应该是128.

fftoutbuf的排列是 实部在buf的前面正序排列,虚部从buf的最后一位逆序向前排列。

具体描述在fft_f32.asm文件中有描述。

你所说的基频、二次三次谐波是原信号的频率分量,不同波形的分量所在位置是不同的。fftoutbuf中所储存的是FFT的结果,并不能等同于频率。具体的频率值还和采样频率和采样点数有关。

我猜楼主还没理解FFT,建议谷歌《fft的物理意义》,相信楼主君会有所得。

另外楼主要有问题的话,可以发帖讨论,我们彼此学习,兴许别人也能有所借鉴。这也是本坛的原旨之所在呦~

lofky 发表于 2015-8-17 14:35:02

本帖最后由 lofky 于 2015-8-17 21:54 编辑

siyeb 发表于 2015-8-17 13:52
从图上来看,你的SAMPLE_NODES应该是128.

fftoutbuf的排列是 实部在buf的前面正序排列,虚部从buf的最后 ...

{:3_48:}太赞了,大概懂了
还有一点点,为什么计算2+3*sin(pi*20*x)时,必须在sin里面除以N,否则结果就不对呢?
for(i=0; i < N; i++)
{
              RFFTin1Buff=2+3*sin(pi*20*i/N);
}

lofky 发表于 2015-8-18 15:43:47

lofky 发表于 2015-8-17 14:35
太赞了,大概懂了
还有一点点,为什么计算2+3*sin(pi*20*x)时,必须在sin里面除以N,否则结果就 ...


我把input显示出来了
页: [1]
查看完整版本: 如何利用TI提供的FFT的汇编算法?