完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
转dsp系列教程
本章主要讲解复数FFT的逆变换。 本章节使用的复数FFT函数来自ARM官方库的TransformFunctions部分 31.1 复数FFT 的逆变换实现 31.2 总结 31.1 复数FFT的逆变换实现 本小节主要讲解复数FFT的逆变换实现,通过函数arm_cfft_f32实现浮点数的逆变换。 31.1.1 arm_cfft_f32逆变换 函数定义如下: void arm_cfft_f32( const arm_cfft_instance_f32 * S, float32_t * p1, uint8_t ifftFlag, uint8_t bitReverseFlag) 参数定义: [in] *S points to an instance of the floating-point CFFT structure. [in, out] *p1 points to the complex data buffer of size 2*fftLen . Processing occurs in-place. [in] ifftFlag flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. [in] bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. 注意事项: 结构const arm_cfft_instance_f32的定义如下(在文件arm_math.h文件): typedef struct { uint16_t fftLen; const float32_t *pTwiddle; const uint16_t *pBitRevTable; uint16_t bitRevLength; } arm_cfft_instance_f32; |
|
相关推荐
|
|
下面通过函数arm_cfft_f32计算一个正弦波的FFT,然后再使用函数arm_cfft_f32做FFT逆变换,并使用 Matlab计算变换前后的结果对比。
复制代码 /* ********************************************************************************************************* * 函 数 名: arm_cfft_f32_app * 功能说明: 调用函数arm_cfft_f32_app计算CFFT正变换和你变换。 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ static void arm_cfft_f32_app(void) { uint16_t i; fftSize = 1024; ifftFlag = 0; doBitReverse = 1; /* 按照实部,虚部,实部,虚部..... 的顺序存储数据 */ for(i=0; i<1024; i++) { testInput_f32_10khz[i*2+1] = 0; /* 50Hz正弦波,采样率1KHz */ testInput_f32_10khz[i*2] = arm_sin_f32(2*3.1415926f*50*i/1000); printf("%frn", testInput_f32_10khz[i*2]); } /* CFFT变换:FFT正变换 */ arm_cfft_f32(&arm_cfft_sR_f32_len1024, testInput_f32_10khz, ifftFlag, doBitReverse); ifftFlag = 1; /* CFFT变换:FFT逆变换 */ arm_cfft_f32(&arm_cfft_sR_f32_len1024, testInput_f32_10khz, ifftFlag, doBitReverse); printf("****************************分割线***************************************rn"); /* 串口打印求解的模值 */ for(i=0; i<1024; i++) { printf("%frn", testInput_f32_10khz[i*2]); } } |
|
|
|
|
|
运行如上函数可以通过串口打印出原始正弦波和经过CFFT,CIFFT的正弦波,下面我们就通过Matlab对比变换前和变换后的波形。
对比前需要先将串口打印出的两组数据加载到Matlab中,并给原始正弦波起名signal,变换后的数组起名sampledata,加载方法在前面的教程中已经讲解过,这里不做赘述了。Matlab中运行的代码如下: Fs = 1000; % 采样率 N = 1024; % 采样点数 n = 0:N-1; % 采样序列 f = n * Fs / N; %真实的频率 subplot(2,1,1); plot(f, signal); %绘制原始信号 title('原始信号'); xlabel('时间'); ylabel('幅值'); subplot(2,1,2); plot(f, sampledata); %绘制CFFT和CIFFT后的信号 title('CFFT和CIFFT后的信号'); xlabel('时间'); ylabel('幅值'); Matlab运行的结果如下: |
|
|
|
|
|
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
72 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
509 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
546 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
545 浏览 0 评论
1008 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11763 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 14:24 , Processed in 0.733464 second(s), Total 77, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号