2842|1

764

帖子

2

TA的资源

纯净的硅(中级)

楼主
 

BBB频谱仪经验分享之频谱图 [复制链接]

本帖最后由 airqj 于 2014-7-20 22:08 编辑

老天这回可别把我辛辛苦苦写出来的好一大段字弄没了,可不想加班到半夜,明天还要上班呢
上一帖子说道波形的显示,这里要说的就是频谱仪的主要功能了--绘制频谱图。
大家都知道,要得到波形的频谱就得对信号做FFT。当初在学习FFT的时候可花了不少时间,自己也曾经自己实现了一下,可惜效果不好。就在想着不会还要让俺用汇编实现吧,网上查资料的时候发现了好东西fftw,这东西性能不错,可以根据处理器在运行的时候自动优化代码,特别是像俺做的这个频谱仪,因为在运算的时候不会对参数做太多的改变,fftw的性能这就体现出来了。关于fftw在BBB上的移植可以参考我之前的帖子https://bbs.eeworld.com.cn/thread-435319-1-1.html。由于咱们的BBB是支持硬件浮点数计算的,所以可以将ARM_FLOAT_ABI改为hard。
频谱仪中fft的相关代码
  1. read_size= read(soundcardfd,&buffer,sizeof(buffer));
  2.            buf_ptr=&buffer;
  3.            for(int i=0;i<N_FFT;i++)
  4.            {
  5.                float_buffer[i]=(float)(*buf_ptr)/65536.0;
  6.                buf_ptr+=1;
  7.            }
  8.            if(fft_flag)
  9.            {
  10.                 buf_fft_ptr=&buffer;
  11.                 for(i=0;i<N_FFT;i++)
  12.                 {
  13.                     in[i][0]=(float)((*buf_fft_ptr)/256.0);
  14.                     in[i][1]=0.0;
  15.                     buf_fft_ptr++;
  16.                 }
  17.                 fftwf_execute(plan);
  18.                 float_buffer[0]=sqrt(pow(out[0][0],2)+pow(out[0][1],2))/(float)N_FFT;
  19.                 for(i=1;i<N_FFT;i++)
  20.                 {
  21.                     float_buffer[i]=sqrt(
  22.                                             pow(out[i][0],2) +
  23.                                             pow(out[i][1],2)
  24.                                 );
  25. //                    printf("%f\n",float_buffer[i]);
  26.                 }
  27. //                printf("%f\n",float_buffer[2]);
  28. //                printf("%f\n",float_buffer[2046]);
  29.                 fflush(stdout);
复制代码
printf主要是用于调试用的,大家可以忽略。关于fftw具体如何使用,可以参考官方文档http://www.fftw.org/#documentation
这里为了将全部的音频信息显示出来就没有只读取低八位,而是全部读取。而且fft输出相对与波形信号来说大小变化不会很大
这个是属于服务端的程序的,就是将前面所说的波形信号进行FFT变换后根据fft储存到Qt显示波形的数组中。具体请看fft的物理意义
有什么疑欢迎大家提出

最新回复

很给力!  详情 回复 发表于 2014-7-20 22:17

赞赏

1

查看全部赞赏

点赞 关注
 

回复
举报

224

帖子

3

TA的资源

一粒金砂(中级)

沙发
 
很给力!
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【回帖赢京东卡】说说无线技术那些事儿
即日起—2月28日,参与回帖讨论都有机会赢取【30元京东卡】

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表