TI中文支持网
TI专业的中文技术问题搜集分享网站

C6670的fft

C6670的DSP_fft16x16怎么用呀,输入是short x[NUM_INPUTS][2*N + 2*PAD] ={},然后,short x_cn[NUM_INPUTS][2*N + 2*PAD];和short x_i[NUM_INPUTS][2*N + 2*PAD];分别是什么,short y_cn[NUM_INPUTS][2*N + 2*PAD];和short y_i[NUM_INPUTS][2*N + 2*PAD];分别是什么呢,fft计算的结果在哪里,请大神指教。

哪个大神可以给我说明一下,这个函数的输入和输出分别在哪里?

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <limits.h>

/* Defines */
#if defined(__TI_EABI__)
#define kernel_size _kernel_size
#endif

extern char kernel_size;
#define CYCLE_FORMULA_NX_PT1  128
#define CYCLE_FORMULA_NX_PT2  256
#define FORMULA_SIZE2
intform_cycle [FORMULA_SIZE];

#include "DSP_fft16x16_cn.h"
#include "DSP_fft16x16.h"
#include "gen_twiddle_fft16x16.h"

/* ======================================================================== */
/*  Kernel-specific alignments*/
/* ======================================================================== */
#pragma DATA_ALIGN(w, 8);

#pragma DATA_ALIGN(x, 8);
#pragma DATA_ALIGN(x_cn, 8);
#pragma DATA_ALIGN(x_i, 8);

#pragma DATA_ALIGN(y_cn, 8);
#pragma DATA_ALIGN(y_i, 8);

/* ======================================================================== */
/*  Parameters of fixed dataset.*/
/* ======================================================================== */
#define N(256)
#define PAD (16)

/* ======================================================================== */
/*  Number of input arguments:*/
/* ======================================================================== */
#define NUM_INPUTS (1)

/* ======================================================================== */
/*  Initialized arrays with fixed test data.*/
/* ======================================================================== */
short x[NUM_INPUTS][2*N + 2*PAD] =
{
/* Input Number: 0 */

{0x393D,  0x144A,  0x0F1F, -0x72ED, -0x5689, -0x64C1,  0x6193,  0x54CD,0x7E16, -0x2016, -0x6AEF,  0x4922, -0x5368,  0x0897,  0x54EB,  0x0084,0x1FAE,  0x1489,  0x1EC9, -0x6F5E,  0x5BE8, -0x024A,  0x75B7,  0x2217,-0x2EB6,  0x4D81,  0x0757,  0x254F, -0x7FCC, -0x6A05,  0x65AE, -0x5AC9,0x5D3B,  0x4219, -0x47E8,  0x4A2C, -0x03AD,  0x6576,  0x00D7,  0x7AA6,-0x0016, -0x2FEE,  0x55CB,  0x1E2C, -0x32AC,  0x2494, -0x4F3C, -0x6FFF,0x0826,  0x4087, -0x4C0A,  0x2E16,  0x4CEB, -0x6DE1, -0x03EC,  0x0BC2,-0x484A, -0x2E04,  0x7E82,  0x4FAD, -0x55DF, -0x6293,  0x5530, -0x4875,0x5E20,  0x7DB6, -0x516A, -0x47EE, -0x4EC0, -0x3429,  0x2649, -0x3754,-0x3F41, -0x00AD,  0x37BA,  0x5271, -0x3CFA, -0x1F8B,  0x2494, -0x371C,-0x51F4,  0x1E9F, -0x0CCB,  0x59E3,  0x180D, -0x38F2, -0x2132, -0x2B94,-0x17D1,  0x31A9, -0x275A,  0x2993,  0x417D, -0x49B1, -0x750B,  0x123F,0x3CCC, -0x18E2,  0x61E9,  0x5E28, -0x1D06, -0x68BA,  0x1647,  0x6698,-0x18EE,  0x50D8,  0x4231,  0x2468, -0x4A2F, -0x4FED,  0x7584,  0x6DC2,0x3008,  0x23BA,  0x5366, -0x2ADE, -0x379A, -0x751F,  0x3367, -0x4DE8,0x4A1C,  0x42C4, -0x3A38, -0x34B1, -0x031A,  0x161B,  0x3F68,  0x244D,0x75F3, -0x7695, -0x7439,  0x797D, -0x3AD0,  0x18E2, -0x0248, -0x2D0D,0x5974, -0x31D6,  0x0D25, -0x3A8C,  0x2907, -0x343B, -0x6A7F, -0x24C1,-0x56E9,  0x2A61,  0x1653, -0x66E7, -0x0081, -0x3549, -0x7E9C, -0x52ED,0x0077, -0x7C9D,  0x0411, -0x3E67,  0x6FA9,  0x3843,  0x5D37,  0x7640,0x021C,  0x52D1,  0x3649, -0x0232, -0x5179,  0x2204, -0x06FF, -0x20F1,-0x4878, -0x59D2, -0x42CF,  0x5DE2,  0x0334,  0x305C, -0x5CC4,  0x0208,0x338C,  0x74B7,  0x4AA6, -0x2CC7,  0x0256, -0x7E98, -0x46AF, -0x5D0B,0x6BD0,  0x1578,  0x5DCD,  0x0E96,  0x0CCB, -0x23C8,  0x7A56, -0x5FD6,0x5AA2,  0x13A3, -0x4913, -0x6E7F,  0x0E97,  0x1045,  0x1310, -0x4AF4,0x6109,  0x2E24,  0x0194,  0x09EE, -0x7CEC, -0x5FDA, -0x13D6,  0x68D8,-0x1CF3, -0x5984, -0x3410, -0x1BDF, -0x50A2, -0x5676,  0x3DBA,  0x45A4,0x2648, -0x412D, -0x5694,  0x2AD7,  0x2202,  0x0767, -0x2503,  0x54AD,0x72B7, -0x7AB2, -0x516B, -0x6D54,  0x74ED, -0x4088,  0x4054, -0x2C2A,0x71C3, -0x2056,  0x1932, -0x2341,  0x4799, -0x5911, -0x157C,  0x2875,-0x336D, -0x34F4,  0x43A4,  0x669B, -0x7B82,  0x456D, -0x25CD,  0x1E52,0x0D98, -0x15E3, -0x337B,  0x025A, -0x2145,  0x0537,  0x6CA7,  0x58F5,-0x42A1,  0x455D,  0x1087,  0x130F, -0x75F6, -0x6A54,  0x66C3,  0x0B25,-0x3D68,  0x58B8, -0x2E70, -0x2196,  0x49EA, -0x7203,  0x4449, -0x0D4E,0x006E,  0x545F,  0x291A,  0x239D, -0x64EF,  0x5A21, -0x36AE, -0x7482,0x390C, -0x5420, -0x4630, -0x0778,  0x4816,  0x660F, -0x30ED, -0x7944,0x2971, -0x288A,  0x176E, -0x25EA,  0x1B62,  0x792E,  0x55D6, -0x7A84,-0x1682,  0x5CA4,  0x7FDC,  0x0AED, -0x1EA0,  0x6813, -0x31C6,  0x0C70,-0x74C0,  0x150B, -0x3E70,  0x1F4C, -0x551A, -0x0990, -0x4C4C, -0x410F,-0x027E, -0x4782,  0x6F2C, -0x1CC9,  0x47E7, -0x01B2,  0x4D47, -0x31B9,0x229D, -0x5EA5,  0x5057,  0x65DB,  0x0A61, -0x237A, -0x3476, -0x41D3,0x3A7E, -0x2BE0,  0x0CE4,  0x5334, -0x3A76,  0x1070, -0x7421,  0x5099,0x7900,  0x483E,  0x1C26, -0x6E0C,  0x0741,  0x28DE, -0x530A, -0x403D,-0x1390,  0x6D37, -0x0467,  0x10A9, -0x5E49, -0x16AC, -0x1F75,  0x3668,-0x6C9F, -0x0D13, -0x6D49, -0x1ADE,  0x5D62, -0x4F88,  0x7560, -0x74AC,-0x3848, -0x2FC7, -0x15E4, -0x5EE8,  0x072C,  0x21D0, -0x567F,  0x2F26,-0x2D06, -0x7038,  0x1AE2, -0x19ED, -0x5B26,  0x08B0,  0x38BD,  0x6C56,-0x2A22, -0x36D8,  0x773F,  0x428D, -0x0B3D, -0x7A88,  0x2C6A, -0x2783,-0x1DEB, -0x04DB,  0x0265,  0x435E,  0x34B9,  0x6F06, -0x15A2,  0x11DB,0x5D5D, -0x7CA5,  0x199E, -0x2FA2,  0x183B, -0x0196, -0x7BD1, -0x53E6,-0x6332, -0x12EF,  0x65AC, -0x40B1,  0x10DC, -0x4D1C,  0x45B1,  0x7759,-0x3898,  0x7549,  0x0967, -0x5103, -0x3E04,  0x7912, -0x7A49, -0x1A90,-0x0C1F, -0x2AE4,  0x139B,  0x19AB, -0x3354,  0x176B, -0x4DF2, -0x318A,-0x774C,  0x474C,  0x2825, -0x4E4A, -0x3B1D, -0x300C, -0x5944,  0x6485,-0x2692, -0x32E1,  0x7752, -0x0C84,  0x76E9,  0x4535,  0x307E,  0x67C8,0x093F, -0x4492, -0x187F,  0x0280,  0x6307, -0x518D, -0x1579, -0x5F48,0x28C4,  0x7C05, -0x7B06, -0x442B, -0x7F8C,  0x2C22,  0x3F7F, -0x695A,-0x6FE8, -0x67D2,  0x3112,  0x0CBE,  0x3684, -0x7F64, -0x3A40, -0x797B,-0x76DC, -0x006D, -0x6979, -0x6F65, -0x5DEB, -0x16E5, -0x3B2D, -0x6416,0x2528, -0x72B7,  0x511F,  0x600A,  0x133F,  0x53EA,  0x0832,  0x6556,0x5F8F, -0x2DD1,  0x6285,  0x2F50, -0x36BE, -0x4921, -0x0CBE, -0x7045,0x7CF9,  0x1B81, -0x2396, -0x6102, -0x0A4E, -0x3CF0, -0x396A, -0x29BE,-0x5575, -0x4855, -0x2921, -0x2929, -0x0518, -0x3637,  0x3766,  0x4454,-0x2183,  0x7F66, -0x6708,  0x5EF9, -0x184F, -0x213F,  0x3B57, -0x5C25,-0x0B16, -0x60F7,  0x08A5,  0x3140,  0x3C37,  0x4495,  0x1A70,  0x36CD,0x0FDA, -0x67E1,  0x60D7,  0x17EC, -0x18CC,  0x1078, -0x46A2, -0x4F0F,0x3694, -0x6FBD,  0x18D6,  0x3D8A, -0x7E9F,  0x162E,  0x2EF0,  0x6AE5,0x372C, -0x30D1,  0x16E8,  0x081A, -0x2DE1,  0x0940, -0x7429, -0x209F
},

};

short x_cn[NUM_INPUTS][2*N + 2*PAD];
short x_i[NUM_INPUTS][2*N + 2*PAD];

short y_cn[NUM_INPUTS][2*N + 2*PAD];
short y_i[NUM_INPUTS][2*N + 2*PAD];

short w[NUM_INPUTS][2*N + 2*PAD];

/* ======================================================================== */
/*  Prototypes for timing functions.*/
/* ======================================================================== */
clock_t time_cn(int cur_input, int n);
clock_t time_i(int cur_input, int n);

/* ======================================================================== */
/*  MAIN -- Top level driver for the test.*/
/* ======================================================================== */
int main()
{clock_t t_overhead, t_start, t_stop;clock_t t_cn, t_i;int i, j, k, m, n, radix, fail, p, q;short diff, diff_max;/* -------------------------------------------------------------------- *//*  Compute the overhead of calling clock() twice to get timing info.*//* -------------------------------------------------------------------- */t_start = clock();t_stop = clock();t_overhead = t_stop - t_start;for (j = 0; j < NUM_INPUTS; j++) {for (i = 0; i < 2*N + 2*PAD; i++)x[j][i] = x[j][i] >> 4;}for (j = 16, k = 1, fail = 0; j <= N; k++, j *= 2) {for (n = 31, m = 1; (j & (1 << n)) == 0; n--, m++);radix = m & 1 ? 2 : 4;/* -------------------------------------------------------------------- *//*  Generate twiddle factors for fft of size 'j'*//* -------------------------------------------------------------------- */gen_twiddle_fft16x16(&w[0][PAD], j);/* -------------------------------------------------------------------- *//*  Copy vector to all inputs.*//* -------------------------------------------------------------------- */memcpy(x_cn, x, sizeof(x_cn));memcpy(x_i, x, sizeof(x_i));memcpy(y_i, y_cn, sizeof(y_i));/* -------------------------------------------------------------------- *//*  Check the results arrays, and report any failures.*//* -------------------------------------------------------------------- */for(i = 0; i < NUM_INPUTS; i++) {t_cn = time_cn(i, j) - t_overhead;t_i  = time_i(i, j) - t_overhead;}printf("DSP_fft16x16\tIter#: %d\t", k);diff_max = 0;for (p = 0; p < NUM_INPUTS; p++) {for (q = 0; q < 2*N + 2*PAD; q++) {diff = y_cn[p][q] - y_i[p][q];if (diff < 0)diff = -diff;if (diff > diff_max)diff_max = diff;}}if (diff_max > 15) {fail++;printf("Result Failure (y_i) ");}elseprintf("Result Successful (y_i) ");printf("\tRadix = %d\tN = %d\tnatC: %d\tintC: %d\n", radix, j, t_cn, t_i);if (j == CYCLE_FORMULA_NX_PT1)form_cycle[0] = t_i;if (j == CYCLE_FORMULA_NX_PT2)form_cycle[1] = t_i;}/* Provide memory information */printf("Memory:  %d bytes\n", &kernel_size);/* Provide profiling information */printf("Cycles:  %d (N=128) %d (N=256)\n", form_cycle[0], form_cycle[1]);return (fail);
}

/* ======================================================================== */
/*  TIME_CN  -- Measure elapsed time for natural C version.*/
/* ======================================================================== */
clock_t time_cn(int cur_input, int n)
{clock_t t_start, t_stop;t_start = clock();DSP_fft16x16_cn(&w[cur_input][PAD], n, &x_cn[cur_input][PAD], &y_cn[cur_input][PAD]);t_stop  = clock();return  t_stop - t_start;
}

/* ======================================================================== */
/*  TIME_I-- Measure elapsed time for intrinsic C version.*/
/* ======================================================================== */
clock_t time_i(int cur_input, int n)
{clock_t t_start, t_stop;t_start = clock();DSP_fft16x16(&w[cur_input][PAD], n, &x_i[cur_input][PAD], &y_i[cur_input][PAD]);t_stop  = clock();return  t_stop - t_start;
}
Allen35065:

函数原型 C:\ti\dsplib_c66x_3_4_0_0\packages\ti\dsplib\src\DSP_fft16x16\c66

API 手册C:\ti\dsplib_c66x_3_4_0_0\docs

chao zhang7:

回复 Allen35065:

DSP_fft16x16_cn和DSP_fft16x16,两个函数有什么区别呀,我看到写的是 Measure elapsed time for natural C version. 和Measure elapsed time for intrinsic C version.  不知道是什么意思?

/* ======================================================================== */
/*TIME_CN-- Measure elapsed time for natural C version.*/
/* ======================================================================== */
clock_t time_cn(int cur_input, int n)
{clock_t t_start, t_stop;t_start = clock();DSP_fft16x16_cn(&w[cur_input][PAD], n, &x_cn[cur_input][PAD], &y_cn[cur_input][PAD]);t_stop= clock();returnt_stop - t_start;
}/* ======================================================================== */
/*TIME_I-- Measure elapsed time for intrinsic C version.*/
/* ======================================================================== */
clock_t time_i(int cur_input, int n)
{clock_t t_start, t_stop;t_start = clock();DSP_fft16x16(&w[cur_input][PAD], n, &x_i[cur_input][PAD], &y_i[cur_input][PAD]);t_stop= clock();returnt_stop - t_start;
}/* ======================================================================== */
/*End of file:DSP_fft16x16_d.c*/

Lin Jia-Hung:

回复 chao zhang7:

DSP_fft16x16_cn所使用的是natural C可以在任何C compiler下执行

而DSP_fft16x16经过优化将部分指令取代成DSP指令(intrinsic C), 在执行结果下DSP_fft16x16要来的快速

另外, 可以看到DSPF_xxxx.sa是使用汇编语言, 这又更为快速

 

前面你所提问到的输入通常是x, 输出是y

x_i为DSP_fft16x16的输入

y_i为DSP_fft16x16的输出

x_cn为DSP_fft16x16_cn的输入

y_cn为DSP_fft16x16_cn的输出

diff是在比较精准度(误差)

chao zhang7:

回复 Lin Jia-Hung:

short x[NUM_INPUTS][2*N + 2*PAD] 

这个输入x定义为什么是[2*N + 2*PAD],后边的2*PAD是做什么用的?

Lin Jia-Hung:

回复 chao zhang7:

之前执行DSPF_sp_ifftSPxSP(DSPF_sp_ifftSPxSP_d.c)也有相同的问题, 没有PAD也并不影响结果

从名称看来应该是buffer的考虑, 但不清楚真正用途

这里找到可能的答案

http://e2e.ti.com/support/dsp/tms320c6000_high_performance_dsps/f/115/t/220132

Lucas Chen:

回复 chao zhang7:

做信号处理时,信号首和尾要补上一定长度的数据,PAD就是要补充的数据。

赞(0)
未经允许不得转载:TI中文支持网 » C6670的fft
分享到: 更多 (0)