This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
现在、我尝试使用 DSP_16x16_FFT 函数。
但它与 MATLAB FFT 函数有所不同。 该函数为 short 类型、但在 MATLAB 中、FFT 函数为 double 类型。
因此、我将输入设为短类型。 但输出与 MATLAB 不同。
#include
#include
#include
#include "gen_twidede_fft16x16.h"
#include
#define N 256
#pragma DATA_ALIGN (x_16x16、8);
int16_t x_16x16 [2*N];
#pragma DATA_ALIGN (y_16x16、8);
int16_t y_16x16 [2*N];
#pragma DATA_ALIGN (w_16x16、8);
int16_t w_16x16 [2*N];
#pragma DATA_ALIGN (x_sp、8);
float x_sp [2*N];
#pragma DATA_ALIGN (y_sp、8);
float y_sp [2*N];
#pragma DATA_ALIGN (w_sp、8);
float w_sp [2*N];
unsigned char brev[64]={
0x0、0x20、0x10、0x30、0x8、 0x28、0x18、0x38、
0x4、0x24、0x14、0x34、0xc、 0x2C、0x1c、0x3c、
0x2、0x22、0x12、0x32、0xA、 0x2a、0x1a、0x3a、
0x6、0x26、0x16、0x36、0xe、 0x2E、0x1E、0x3E、
0x1、0x21、0x11、0x31、0x9、 0x29、0x19、0x39、
0x5、0x25、0x15、0x35、0xd、 0x2D、0x1d、0x3D、
0x3、0x23、0x13、0x33、0xb、 0x2b、0x1b、0x3b、
0x7、0x27、0x17、0x37、0xF、 0x2F、0x1f、0x3f
};
void generateInput (){
int32_t i、j;
对于(i = 0;i < N;i++){
x_16x16[2*i]= 1;
X_16X16[2*I + 1]= 1;
x_sp[2*i]=1;
x_sp[2*i+1]= 1;
}
}
void gen_twiddle FFT_sp (float *w、int n)
{
int i、j、k;
CONST 双 PI = 3.141592654;
对于(j = 1、k = 0;j <= n >> 2;j = j << 2)
{
对于(I = 0;I < n >> 2;I += j)
{
#ifdef _lif_ENDIAN
w[k]=(float) sin (2 * pi * I / n);
w[k + 1]=(浮点) cos (2 * pi * I / n);
w[k + 2]=(float) sin (4 * pi * I / n);
w[k + 3]=(float) cos (4 * pi * I / n);
w[k + 4]=(float) sin (6 * pi * I / n);
w[k + 5]=(浮点) cos (6 * pi * I / n);
其他
w[k]=(浮点) cos (2 * pi * I / n);
w[k + 1]=(float)-sin (2 * pi * I / n);
w[k + 2]=(浮点) cos (4 * pi * I / n);
w[k + 3]=(float)-sin (4 * pi * I / n);
w[k + 4]=(浮点) cos (6 * pi * I / n);
w[k + 5]=(float)-sin (6 * pi * I / n);
#endif
k +=6;
}
}
}
/*
epardRealImg 函数将实数和虚数数据分开
输出的频率。 这是需要的、以便可以绘制数据
使用 CCS 图形功能
*
int16_t y_Real_16x16 [N];
int16_t y_imag_16x16 [N];
int16_t x_real_16x16 [N];
int16_t x_imag_16x16 [N];
float y_real-sp [N];
float y_imag_sp [N];
float x_real_sp [N];
float x_imag_sp [N];
独立输入 RealImg (){
int32_t i、j;
对于(i = 0、j = 0;j < N;i+=2、j++){
x_real-16x16[j]= x_16x16[i];
x_imag_16x16[j]= x_16x16x16[i + 1];
}
}
indepateInputRealImgsp (){
int32_t i、j;
对于(i = 0、j = 0;j < N;i+=2、j++){
x_real-sp[j]= x_sp[i];
x_imag_sp[j]= x_sp[i + 1];
}
}
独立 RealImg (){
int32_t i、j;
对于(i = 0、j = 0;j < N;i+=2、j++){
y_Real_16X16[j]= y_16X16[i];
y_imag_16x16[j]= y_16x16[i + 1];
}
}
独立 RealImgsp (){
int32_t i、j;
对于(i = 0、j = 0;j < N;i+=2、j++){
y_real-sp[j]= y_sp[i];
y_imag_s[j]= y_sp[i + 1];
}
}
void main (){
/*生成输入数据*/
generateInput ();
/*确定各种障碍因素*/
gen_twidle_fft16x16 (w_16x16、N);
gen_twidle_FFT_sp (w_sp、N);
分开输入 RealImg (x_16x16);
sepateInputRealImgsp (x_sp);
dspf_sp_fftSPxSP (N、x_sp、w_sp、y_sp、brev、 2、0、N);
/*调用各种 FFT 例程*/
DSP_fft16x16 (w_16x16、N、x_16x16、y_16x16);
/*调用测试代码以分离实数和虚数数据*/
独立 RealImg (y_16x16);
独立 RealImgsp (y_sp);
}
跟随的 photh 是我的输入和输出信号。
CCS 输出
MATLAB 输出
两种输出是不同的
尊敬的 Kwon:
很抱歉耽误你的回答。
请注明您使用的 DSPLIB 版本、以便我们有更深入的了解。
由于 MATLAB 不是 TI 的一部分、我们无法对输出进行评论。 但是、我们可以研究、可以通过 CCS 执行哪些操作。
在该链接中、我们将找到有关如何使用 FFT 在 CCS 中绘制图形的信息。 检查它是否有用。
https://software-dl.ti.com/ccs/esd/documents/users_guide/ccs_debug-graphs.html#
此致
Shankari
您好、Shankari G.
感谢你的答复
DSPLIB 的版本 为3.4.0版本。
2.我认为问题是关于比例问题,因为计算过程中每个阶段的比例都是一半。 因此、输出应缩放至2^级。
权
很好。
所以... 现在、您能够获得您想要获得的结果了吗?
如果是、我们是否会将此帖子的状态设置为"已关闭"?
此致
Shankari