打印

定点c64 fft 数据出错

[复制链接]
862|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
masege|  楼主 | 2015-8-5 15:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用dspC6455调用DSP_fft32x32这个函数最后得到的数据与matlab的数据不对。测试输入数据[1,0,2,0,3,0,..63,0]; 最后得出来的数据列举前面几个
DSP:                                                                                                       matlab:
FFT_output[0] = 8256                                                                           FFT_output[0] = 8256        
FFT_output[1] = 0                                                                                  FFT_output[1] = 0      
FFT_output[2] = -102                                                                            FFT_output[2] = -64   
FFT_output[3] = 2638                                                                           FFT_output[3] = 2607      
FFT_output[4] = -96                                                                              FFT_output[4] = -64   
FFT_output[5] = 1338                                                                           FFT_output[5] = 1302     
FFT_output[6] = -128                                                                            FFT_output[6] = -64      
FFT_output[7] = 856                                                                             FFT_output[7] = 867     
...
程序如下。也是按照手册,先生成相应旋转因子,然后调用库函数。为什么结果会不对呢相差还挺大。是我输入数据的格式有问题吗。还有关于这个函数,如果 我是小数数据又该如何处理呢。求用过的大神解答一下,已经卡很久了。程序如下。
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
#include "string.h"
#include "ctype.h"

#define NSize 128
#define PI 3.1415926
#pragma DATA_SECTION (twiddle_factor, "mysect");
#pragma DATA_ALIGN (twiddle_factor,8)
int twiddle_factor[NSize*2];
#pragma DATA_SECTION (PImgTmp_double, "mysect");
#pragma DATA_ALIGN (PImgTmp_double,8)
int PImgTmp_double[NSize*2];
#pragma DATA_SECTION (FFT_output, "mysect");
#pragma DATA_ALIGN (FFT_output, 8)
int FFT_output[NSize*2];
int gen_twiddle(int *w, int n, double scale);
void DSP_fft32x32(int *w, int nx,int *x,int *y);
void main()
{
int i,j;
for(i=0;i<NSize;i++)
{
PImgTmp_double[2*i] = i+1;
PImgTmp_double[2*i+1] = 0;
}

gen_twiddle(twiddle_factor, NSize,2147483647.5);
DSP_fft32x32(twiddle_factor,NSize,PImgTmp_double,FFT_output);
}

相关帖子

沙发
masege|  楼主 | 2015-8-5 15:40 | 只看该作者
前面的测试数据应为【1,0,2,0,3,0...128,0】发帖时写错了,程序内是对的。

使用特权

评论回复
板凳
aresc| | 2015-8-5 21:57 | 只看该作者
楼主要搞清楚定点数的表示和运算。

使用特权

评论回复
地板
masege|  楼主 | 2015-8-10 09:02 | 只看该作者
aresc 发表于 2015-8-5 21:57
楼主要搞清楚定点数的表示和运算。

请问能说得详细一点吗?我看输入数据只要是int型的就行,我试过把输入数据变成Q31,但是数据不对,应该是溢出了。您认为是什么问题呢?

使用特权

评论回复
5
masege|  楼主 | 2015-8-10 09:51 | 只看该作者
aresc 发表于 2015-8-5 21:57
楼主要搞清楚定点数的表示和运算。

这个数据也差的太大了吧。定点的计算也不该这么大的误差吧。

使用特权

评论回复
6
aresc| | 2015-8-11 22:12 | 只看该作者
masege 发表于 2015-8-10 09:51
这个数据也差的太大了吧。定点的计算也不该这么大的误差吧。

大了去了,比如你用Q31格式,定点数只能表示的数值范围是[-1.0,1.0),在网上搜一下,先弄清楚定点数,你的问题就解决了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

24

帖子

0

粉丝