定点c64 fft 数据出错
用dspC6455调用DSP_fft32x32这个函数最后得到的数据与matlab的数据不对。测试输入数据; 最后得出来的数据列举前面几个DSP: matlab:FFT_output = 8256 FFT_output = 8256 FFT_output = 0 FFT_output = 0 FFT_output = -102 FFT_output = -64 FFT_output = 2638 FFT_output = 2607 FFT_output = -96 FFT_output = -64 FFT_output = 1338 FFT_output = 1302 FFT_output = -128 FFT_output = -64 FFT_output = 856 FFT_output = 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;
#pragma DATA_SECTION (PImgTmp_double, "mysect");
#pragma DATA_ALIGN (PImgTmp_double,8)
int PImgTmp_double;
#pragma DATA_SECTION (FFT_output, "mysect");
#pragma DATA_ALIGN (FFT_output, 8)
int FFT_output;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 = i+1;
PImgTmp_double = 0;
}
gen_twiddle(twiddle_factor, NSize,2147483647.5);DSP_fft32x32(twiddle_factor,NSize,PImgTmp_double,FFT_output);
}
前面的测试数据应为【1,0,2,0,3,0...128,0】发帖时写错了,程序内是对的。 楼主要搞清楚定点数的表示和运算。 aresc 发表于 2015-8-5 21:57
楼主要搞清楚定点数的表示和运算。
请问能说得详细一点吗?我看输入数据只要是int型的就行,我试过把输入数据变成Q31,但是数据不对,应该是溢出了。您认为是什么问题呢? aresc 发表于 2015-8-5 21:57
楼主要搞清楚定点数的表示和运算。
这个数据也差的太大了吧。定点的计算也不该这么大的误差吧。 masege 发表于 2015-8-10 09:51
这个数据也差的太大了吧。定点的计算也不该这么大的误差吧。
大了去了,比如你用Q31格式,定点数只能表示的数值范围是[-1.0,1.0),在网上搜一下,先弄清楚定点数,你的问题就解决了。
页:
[1]