8122|24

774

帖子

2

TA的资源

纯净的硅(中级)

楼主
 

BBB频谱仪经验分享之音频数据采集 [复制链接]

今天是活动最后一天,恰好是周末,就有了点时间来写东西(一周要上六天班,每天七点下班.看了一天电脑回到住的地方就再也不想看着电脑屏幕了)
做的这个频谱仪在采集音频数据的时候本来是想用耳机自己搭一个音频采集电路,用AM3359的AD和耳机进行音频采集。但是在做AD数据采集的时候发现am3359可以用读取in_voltagex_raw文件(具体可以参考
wytalfred的文章的形式来采集数据样本,感觉达不到实时的要求,(尽管am3359的性能已经足够,但是感觉还是不合适)。具体可以参考http://beagleboard-gsoc13.blogspot.com/2013/07/sampling-analogue-signals-using-adc-on.html。文中使用echo 1 > /sys/bus/iio/trigger0/trigger_now的方式进行AD触发数据采集,在generic_buffer中使用poll等待数据可读。这个使用的是sysfstrig的方式进行触发。实际上在IIO中还有一种触发方式,就是使用GPIO进行触发,这个方法相对于使用sysfstrig来说实时行会有一定的提高,可以把linux内核源码翻了个底朝天也没有找到具体方式,应该是要重新写驱动的。 后来想起anananjjj的提醒,可以使用am3359的IIS进行数据采集,于是赶紧查资料然后买了USB声卡写了代码找了耳机来试了一下,果然效果不错.。详细介绍请看这个链接http://www.ibm.com/developerworks/cn/linux/l-audio/(网上中文的关于linux下音频编程的百分之八十都是抄这个的)。
我的代码
  1. #include "my_soundcard.h"

  2. void soundcard_init(int fd)
  3. {
  4.     int arg;
  5.     arg=SAMPLE_RATE;
  6.     if(ioctl(fd,SOUND_PCM_WRITE_RATE,&arg))
  7.     {
  8.         perror("set sample rate faild");
  9.         _exit(1);
  10.     }
  11.     arg=SIZE;
  12.     if(ioctl(fd,SOUND_PCM_WRITE_BITS,&arg))
  13.     {
  14.         perror("set sample size faild\n");
  15.         _exit(1);
  16.     }
  17.     arg=AFMT_U16_LE;
  18.     if(ioctl(fd,SNDCTL_DSP_SETFMT,&arg))
  19.     {
  20.         perror("set data format faild\n");
  21.         _exit(1);
  22.     }
  23. }
复制代码



最新回复

不错的好分享,喜欢,更喜欢你这头像,猪年看着就喜欢。  详情 回复 发表于 2019-2-26 09:19
点赞 关注(2)
 

回复
举报

774

帖子

2

TA的资源

纯净的硅(中级)

沙发
 
写了半天最好的那部分怎么没了
 
 

回复

774

帖子

2

TA的资源

纯净的硅(中级)

板凳
 
本帖最后由 airqj 于 2014-7-20 20:49 编辑
  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)/256.0;
  6.                buf_ptr+=2;
  7.            }
复制代码

这部分是音频读取和处理的代码.细心的同学可能会觉得奇怪buf_ptr为什么不是++而是+2呢。这里主要是因为使用的是16位的量化,而我只使用的其中的低八位。而且16位量化的话最高为65535,这样在显示波形的时候效果就不明显了.主要是因为其中的高八位除了在音量比较高的场合才会有变化,正常情况下是不会有变化的。不知道各位在我的演示视频https://bbs.eeworld.com.cn/thread-438420-1-1.html里有没有发现在音量高的时候波形好像有些奇怪,就是这个原因。有兴趣的同学可以等我把代码发上来后自己做一个
 
 
 

回复

774

帖子

2

TA的资源

纯净的硅(中级)

4
 
还有同学觉得奇怪数据为什么要除以65536呢?这主要是因为除了惯例要把数据保持在-1-1之间外,还是为了在使用Qt显示波形的时候减少cpu的使用率,因为要显示的内容如果跨度太大会使Qt不断的设置纵坐标,而不能在初始化显示类的时候直接指定y轴的范围,这样会有些浪费
 
 
 

回复

774

帖子

2

TA的资源

纯净的硅(中级)

5
 
先去吃点东西,吃饱了再写其他的
今晚争取都写出来
 
 
 

回复

6066

帖子

92

TA的资源

裸片初长成(初级)

6
 
好的,等着
 
 
 

回复

1560

帖子

24

TA的资源

五彩晶圆(初级)

7
 
楼主,你这怎么还连载上了。赶紧回来啊,求图~

点评

找一下我的帖子,有视频演示的  详情 回复 发表于 2014-7-20 21:47
不知道为什么,主楼只能写一小段,我又发了一个帖子还是这样 又得重写一遍了  详情 回复 发表于 2014-7-20 21:30
个人签名这孩子,成熟的象征,理智的典范。
 
 
 

回复

774

帖子

2

TA的资源

纯净的硅(中级)

8
 
lonerzf 发表于 2014-7-20 21:04
楼主,你这怎么还连载上了。赶紧回来啊,求图~

不知道为什么,主楼只能写一小段,我又发了一个帖子还是这样
又得重写一遍了
 
 
 

回复

774

帖子

2

TA的资源

纯净的硅(中级)

9
 
lonerzf 发表于 2014-7-20 21:04
楼主,你这怎么还连载上了。赶紧回来啊,求图~

找一下我的帖子,有视频演示的

点评

哦,还是原来那个视频啊。不过我对楼主Qt曲线显示部分的实现挺感好奇的。之前看到LCD屏有用链表做的,不知道你是怎么实现的呢。  详情 回复 发表于 2014-7-20 22:11
 
 
 

回复

1560

帖子

24

TA的资源

五彩晶圆(初级)

10
 
本帖最后由 lonerzf 于 2014-7-20 22:13 编辑
airqj 发表于 2014-7-20 21:47
找一下我的帖子,有视频演示的

哦,还是原来那个视频啊。不过我对楼主Qt曲线显示部分的实现挺感好奇的。

点评

Qvector估计还是用链表实现的,可以查一下Qt的源码。我没有重新实现任何数据结构  详情 回复 发表于 2014-7-20 22:14
个人签名这孩子,成熟的象征,理智的典范。
 
 
 

回复

774

帖子

2

TA的资源

纯净的硅(中级)

11
 
lonerzf 发表于 2014-7-20 22:11
哦,还是原来那个视频啊。不过我对楼主Qt曲线显示部分的实现挺感好奇的。

Qvector估计还是用链表实现的,可以查一下Qt的源码。我没有重新实现任何数据结构

点评

我做曲线的时候也没注意这个,只是直接用!  详情 回复 发表于 2014-7-20 22:23
 
 
 

回复

1246

帖子

19

TA的资源

五彩晶圆(初级)

12
 
airqj 发表于 2014-7-20 22:14
Qvector估计还是用链表实现的,可以查一下Qt的源码。我没有重新实现任何数据结构

我做曲线的时候也没注意这个,只是直接用

点评

Qt文档里面有具体的说明这些有什么区别的性能上有差别的  详情 回复 发表于 2014-7-20 22:25
个人签名
 
 
 

回复

1246

帖子

19

TA的资源

五彩晶圆(初级)

13
 
楼主做个总结的帖子呗!楼主的帖子搞得我有点晕!

点评

现在写完了才发现大家最想知道的东西没写出来 兄弟怎么办,看样子要加班了  详情 回复 发表于 2014-7-20 22:27
个人签名
 
 
 

回复

774

帖子

2

TA的资源

纯净的硅(中级)

14
 
anananjjj 发表于 2014-7-20 22:23
我做曲线的时候也没注意这个,只是直接用!

Qt文档里面有具体的说明这些有什么区别的性能上有差别的

点评

楼主还在逛论坛呢啊!哈哈!好的,我去看看手册!  详情 回复 发表于 2014-7-20 22:26
 
 
 

回复

1246

帖子

19

TA的资源

五彩晶圆(初级)

15
 
airqj 发表于 2014-7-20 22:25
Qt文档里面有具体的说明这些有什么区别的性能上有差别的

楼主还在逛论坛呢啊!哈哈!好的,我去看看手册!
个人签名
 
 
 

回复

774

帖子

2

TA的资源

纯净的硅(中级)

16
 
anananjjj 发表于 2014-7-20 22:25
楼主做个总结的帖子呗!楼主的帖子搞得我有点晕!

现在写完了才发现大家最想知道的东西没写出来
兄弟怎么办,看样子要加班了

点评

你理理你方案的思路啊!绘制个流程图!每一部分的东西估计你都发过帖子了,引用一下就可以了!可以加一些图片作为辅助!  详情 回复 发表于 2014-7-20 22:31
 
 
 

回复

1246

帖子

19

TA的资源

五彩晶圆(初级)

17
 
本帖最后由 anananjjj 于 2014-7-20 22:33 编辑
airqj 发表于 2014-7-20 22:27
现在写完了才发现大家最想知道的东西没写出来
兄弟怎么办,看样子要加班了

你理理你方案的思路啊!绘制个流程图!每一部分的东西估计你都发过帖子了,引用一下就可以了!可以加一些图片作为辅助!
给大家说说Qt数据处理过程呗!

点评

之前只有做出来后简单的发个视频演示一下。。。 而且我写代码没有画流程图的习惯,构思几天考虑所有问题后直接写代码....  详情 回复 发表于 2014-7-20 22:33
个人签名
 
 
 

回复

774

帖子

2

TA的资源

纯净的硅(中级)

18
 
anananjjj 发表于 2014-7-20 22:31
你理理你方案的思路啊!绘制个流程图!每一部分的东西估计你都发过帖子了,引用一下就可以了!可以加一些 ...

之前只有做出来后简单的发个视频演示一下。。。
而且我写代码没有画流程图的习惯,构思几天考虑所有问题后直接写代码....

点评

我看楼主BBB相关帖子也不少的呀,今天整理还来得及吧,反正已经是做好了的。  详情 回复 发表于 2014-7-21 09:08
别着急啊,老大你还是很有料的!跟你学了很多东西,也讨论了很多!加油!加油!  详情 回复 发表于 2014-7-20 22:37
 
 
 

回复

1246

帖子

19

TA的资源

五彩晶圆(初级)

19
 
airqj 发表于 2014-7-20 22:33
之前只有做出来后简单的发个视频演示一下。。。
而且我写代码没有画流程图的习惯,构思几天考虑所 ...

别着急啊,老大你还是很有料的!跟你学了很多东西,也讨论了很多!加油!加油!
个人签名
 
 
 

回复

1560

帖子

24

TA的资源

五彩晶圆(初级)

20
 
airqj 发表于 2014-7-20 22:33
之前只有做出来后简单的发个视频演示一下。。。
而且我写代码没有画流程图的习惯,构思几天考虑所 ...

我看楼主BBB相关帖子也不少的呀,今天整理还来得及吧,反正已经是做好了的。

点评

碰到过的问题一天之内全部都写出来还真有问题。。有些过去一段时间了,有些想不起来了  详情 回复 发表于 2014-7-21 09:11
个人签名这孩子,成熟的象征,理智的典范。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
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
快速回复 返回顶部 返回列表