|
关于V5开发板 实数FFT例程的问题:由于自己对FFT不了解 之前没有接触过,问的问题可能比较低级。。。。 别见笑
/*
*********************************************************************************************************
* 函 数 名: arm_rfft_fast_f32_app
* 功能说明: 调用函数arm_rfft_fast_f32计算1024点实数序列的幅频响应并跟使用函数arm_cfft_f32计算的结果做对比。
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
static void arm_rfft_fast_f32_app(void)
{
uint16_t i;
arm_rfft_fast_instance_f32 S;
/* 实数序列FFT长度 */
fftSize = 1024;
/* 正变换 */
ifftFlag = 0;
/* 初始化结构体S中的参数 */
arm_rfft_fast_init_f32(&S, fftSize);
/* 按照实部,虚部,实部,虚部..... 的顺序存储数据 */
for(i=0; i<1024; i++)
{
/* 50Hz正弦波,采样率1KHz */
testInput_f32_10khz = 1.2f*arm_sin_f32(2*3.1415926f*50*i/1000)+1;
}
/* 1024点实序列快速FFT */
arm_rfft_fast_f32(&S, testInput_f32_10khz, testOutput_f32_10khz, ifftFlag);
/* 为了方便跟函数arm_cfft_f32计算的结果做对比,这里求解了1024组模值,实际函数arm_rfft_fast_f32
只求解出了512组
*/
arm_cmplx_mag_f32(testOutput_f32_10khz, testOutput, fftSize);
/* 串口打印求解的模值 */
for(i=0; i<fftSize; i++)
{
printf("%f\r\n", testOutput);
}
printf("****************************分割线***************************************\r\n");
for(i=0; i<1024; i++)
{
/* 虚部全部置零 */
testInput_f32_10khz[i*2+1] = 0;
/* 50Hz正弦波,采样率1KHz ,作为实部 */
testInput_f32_10khz[i*2] = 1.2f*arm_sin_f32(2*3.1415926f*50*i/1000)+1;
}
arm_cfft_f32(&arm_cfft_sR_f32_len1024, testInput_f32_10khz, ifftFlag, doBitReverse);
/* 求解模值 */
arm_cmplx_mag_f32(testInput_f32_10khz, testOutput, fftSize);
/* 串口打印求解的模值 */
for(i=0; i<fftSize; i++)
{
printf("%f\r\n", testOutput);
}
}
问题1:
在调用了 以下语句之后
/* 按照实部,虚部,实部,虚部..... 的顺序存储数据 */
for(i=0; i<1024; i++)
{
/* 50Hz正弦波,采样率1KHz */
testInput_f32_10khz = 1.2f*arm_sin_f32(2*3.1415926f*50*i/1000)+1;
}
testInput_f32_10khz数组的排列是 testInput_f32_10khz[0]实部,testInput_f32_10khz[1]虚部。。。。。。。。。。。testInput_f32_10khz[1022]实部,testInput_f32_10khz[1023]虚部 这样吗?
这得到了一个复数形式的数组 对吗?
问题2:如果上面得到的数组是复数形式,那么arm_rfft_fast_f32进行的是实数的FFT ,那么 这样子有没有冲突?
问题3:在运行arm_rfft_fast_f32(&S, testInput_f32_10khz, testOutput_f32_10khz, ifftFlag);之后,
会发现testInput_f32_10khz数组的值跟运行函数arm_rfft_fast_f32前是有变化的,
同时 testOutput_f32_10khz也有数据了。这个时候,两者之间的关系是怎么样的,FFT后,输入信号的实数部分和虚数部分都在 testOutput_f32_10khz能反应出来吗
那这个实数和虚数 跟testInput_f32_10khz[i*2] = 1.2f*arm_sin_f32(2*3.1415926f*50*i/1000)+1;所产生的实部和虚部又有什么区别?
本身如果testInput_f32_10khz[i*2] = 1.2f*arm_sin_f32(2*3.1415926f*50*i/1000)+1;已经产生了实数+虚数的数据的情况下!
谢谢! |
|