ADC数据采集

[复制链接]
4343|18
 楼主| luning298 发表于 2010-2-13 22:39 | 显示全部楼层 |阅读模式
大家春节快乐……小弟我在做一个小项目的时候,遇到一个测试问题,项目要求是adc里面接个mic。用adc来采集数据。adc采集到数据从串口输出。可以利用终端保留采集的数据。但我按照wav的头文件格式加上去,但听到的声音都不符合要求。但adc的设置和mic那边都没问题,我想请教大家如何测试我采集到的数据?
 楼主| luning298 发表于 2010-2-14 17:31 | 显示全部楼层
虽然听到的声音不对,但用cooledit可以明显看到说话那段声音的变化。大家发表发表一下意见啊……
 楼主| luning298 发表于 2010-2-18 19:40 | 显示全部楼层
我为了测试串口那边输出有没有问题,就用了一小段的音频数据直接从串口输出,但接受保存后的数据的声音明显有不对,虽然还可以看到有波形变化。是不是我接送数据的方式不对,还是串口输出导致数据的丢失呢?
我是用终端直接保存数据的。不过可以看得很清楚,保存的数据基本上头不变还是wav格式的头。
chunyang 发表于 2010-2-19 00:18 | 显示全部楼层
输入幅值要在AD的动态范围内,且AD的转换速度要满足才行。

评分

参与人数 1威望 +1 收起 理由
luning298 + 1 我很赞同

查看全部评分

 楼主| luning298 发表于 2010-2-22 21:16 | 显示全部楼层
今天终于能在电脑上听到人类的声音出来了,哈哈,值得纪念一下下。:$毕竟是自己从头到尾,从一个IC的全英文资料开始,慢慢写的一个小项目。虽然是小,但对一个新人来说,也是值得自己稍微骄傲骄傲滴。
这里说一下自己今天的一个小发现,也希望有高手或者大家来讨论讨论我这个发现对不对。我是通过uart的中断程序把ADC中断程序采集到的数据发送出去,我开始运行的时候,串口那边老是没数据出来。有时会有。很奇怪的现象。后来我在debug程序的时候发现,好像还没启动adc的时候,uart的中断已经发生了。程序并不是到了while(1){}后才发生中断,从而导致了adc不能正常启动。
虽然我自己也觉得不可思议,但事实上,我把uart和adc的启动代码放在初始化后,即将要进入while函数时才启动它,程序就没问题了。
xwj 发表于 2010-2-22 21:33 | 显示全部楼层
哈哈,你确定听到的是人类的声音吗?
kubuco 发表于 2010-2-23 21:36 | 显示全部楼层
。。。
顶XWJ
 楼主| luning298 发表于 2010-2-23 21:52 | 显示全部楼层
当然是人类的声音啦……哈哈……原来设置好ADC的采样率,一般就可以输出能听到的声音了,不过噪音很大。
现在是想办法把噪音弄掉,但滤波的话比较麻烦,现在不想采用滤波的办法。大家有经验能交流交流一下么?
 楼主| luning298 发表于 2010-2-23 21:52 | 显示全部楼层
6# xwj

应该是人类的声音+电波的声音的混合体
 楼主| luning298 发表于 2010-2-25 22:00 | 显示全部楼层
今天看了匠人的一篇**,关于提问的,我的提问方式还真的太有有问题,很多东西都没说出来,问题也是不清不楚。在这里我重新把自己现在做的项目和遇到的问题,解决的方法,目前还没解决的问题再重新说一遍,自己也可以当成复习。也希望有在做相似或者有经验的高手能来指点指点。

我做的小项目主要是采用C51的一个ic芯片,主要工作是通过ADC采集麦的数据,然后通过uart发送出去。说是这么容易,但遇到的瓶颈是,ADC的采样率是11.025KHZ,而uart的波特率是115200。按我老大的意思是,采样会比发送快很多,会造成有些数据不能及时发送出去。但小弟用示波器测试过了,反而觉得uart的速度会快一点。这两个单位如何转换,现在还未搞清楚。ADC的速率是通过T2来控制,uart是通过T1来控制速度。也许是麦那边有个放大器,采集到的数据,波形会高出零点很多。现在我找到一个解决的方法是采集到数据时,ADC0减去一个值,数据就会接近零点的范围变化了。
小弟现在遇到的问题是,因为ADC0采集到的数据是12bit,uart每次发送是8位,现在想在ADC的中断子程序里面采用ADPCM的压缩算法,把12bit当成16bit来压缩成4位。那说明了一次采集只能压缩一次,存放到buff里面后,还得再采集一次再压缩一次,才能有一个8位的数据出来,这样才能通知uart发送。小弟就是有点混淆,不知道如何处理好这个问题。
在ADC中断程序里面如何把ADPCM的算法加进去。
xjycug 发表于 2010-2-25 22:07 | 显示全部楼层
串口传输不一定非要用异步啊,使用同步速率会更快些吧。

评分

参与人数 1威望 +1 收起 理由
luning298 + 1

查看全部评分

 楼主| luning298 发表于 2010-2-26 22:07 | 显示全部楼层
11# xjycug
嗯……同步我一直没有考虑过,不过要是同步的话,会不会数据的失真比较严重呢?
xjycug 发表于 2010-2-26 22:17 | 显示全部楼层
我同事在工作中使用过同步,据说传输数据较快,我在干活中一般都使用异步,呵呵。
我看书上描述,没觉得有失真。你指的失真是啥,担心速率高了逻辑信号失真,还是别的失真?如果你有条件可以做个试验,不过同步和异步差别很大,估计通用性不是很好吧。我在项目中真没弄过,只是给个建议,反正可以告诉你有人成功了,呵呵,如果你试试成功的可能性还是很大的。
 楼主| luning298 发表于 2010-2-26 22:47 | 显示全部楼层
13# xjycug
受教受教了……果真是听君一席话胜读十年书啊
 楼主| luning298 发表于 2010-2-26 22:50 | 显示全部楼层
我今天还出现了这样的问题,我在ADC的中断程序里面搞了个ADPCM的压缩算法嘛,竟然会出现这样的现象:在执行ADC中断程序的时候,UART的中断来打断了ADC的中断。尽管后来有把ADC的优先级提高了,感觉在中断程序里面加太多代码,效果不是很好。
 楼主| luning298 发表于 2010-3-1 22:10 | 显示全部楼层
今天又一次感受到了,搞单片机真的要注意很多细节,今天一个char类型就导致我的数据溢出,本来考虑那个数据用char类型就够了,为了节约空间。结果就是因为它的溢出,导致不成功。
 楼主| luning298 发表于 2010-3-2 21:03 | 显示全部楼层
随着攻克一个个小问题,这个小项目也开始接近ending了。
jormen-zhu 发表于 2010-3-5 10:43 | 显示全部楼层
值得学习,借鉴。
zjswuyunbo 发表于 2010-3-5 23:52 | 显示全部楼层
恭喜…
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

20

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部