完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
模拟ADC采样数据实现FFT
使用Matlab生成AM调制波形 波形公式为:AM_50= sin(2πfc)*(1 50%*sin(2πfm)), 其中fc 为载波频率,fm 为调制波频率,调制比50%。为了使用ADC 采样,将波形进行偏移处理,叠加1.5V 电压,最终波形展开公式如下: AM_50 = sin(2πfc) 50%*sin(2πfm))* sin(2πfc) 1.5 |
|
|
|
Matlab 程序如下:
x =sin(2*pi*fm*t); % modulation wave figure; plot(t,x); y =sin(2*pi*fc*t); % carrier wave figure; plot(t,y); z1 =y.*(1 m1*x) 1.5; % AM wave with 50% depth figure; %figure 1 plot(t,z1); xlabel(‘Time’); ylabel(‘Amplitude’); title(‘AM with50% depth’); Z1 =z1*4096/3.3; % 12-bit ADC Value 产生波形如下: |
|
|
|
生成模拟ADC数据,使用STM32F30x进行FFT运算
生成数据存于AM_50_ADC_Data[]数组中,实数转换为复数,进行CFFT 的运算,调用arm_cfft_f32 库函数,1024 点FFT。 /* Real data to magnitudedata */ for(i=0; i{ testInput_f32_10khz[i*2 1] =0; testInput_f32_10khz[i*2] = AM_50_ADC_Data; } /* Process the data throughthe CFFT/CIFFT module */ arm_cfft_f32(&arm_cfft_sR_f32_len1024,testInput_f32_10khz, ifftFlag, doBitReverse); /* Process the data throughthe Complex Magnitude Module for calculating the magnitude ateach bin */ arm_cmplx_mag_f32(testInput_f32_10khz,testOutput, fftSize); 结果打印并和Matlab计算结果进行比较 为方便显示只取整数部分比较:图【二】为Matlab 输出,图【三】为经过STM32F30x计算后的结果。 从数据上看Matlab 仿真以及STM32F30x的FFT 两者非常吻合,数据可以直接使用。基于时间数据转换到频域上,理论上直流分量,频率fc处,以及频率fc-fm,fc fm 处都会有波峰出现,实际看FFT 波形如下: |
|
|
|
实际ADC采样并进行FFT操作
使用波形发生器产生50% 调幅波,载波10KHz,调制波1KHz,调制比50%,偏移1.5V。 使用STM32F30x进行ADC 采样,采样结果存于数组,数据导入到Matlab 显示波形如下: 根据ADC采样数据进行FFT 变换,分析结果如下面所示: |
|
|
|
只有小组成员才能发言,加入小组>>
801 浏览 1 评论
999 浏览 1 评论
12433 浏览 0 评论
5885 浏览 3 评论
17675 浏览 6 评论
996浏览 1评论
971浏览 1评论
805浏览 1评论
3846浏览 1评论
1003浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 10:34 , Processed in 0.847029 second(s), Total 54, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号