打印

ADC数据采集

[复制链接]
3050|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 我很赞同
5
luning298|  楼主 | 2010-2-22 21:16 | 只看该作者
今天终于能在电脑上听到人类的声音出来了,哈哈,值得纪念一下下。:$毕竟是自己从头到尾,从一个IC的全英文资料开始,慢慢写的一个小项目。虽然是小,但对一个新人来说,也是值得自己稍微骄傲骄傲滴。
这里说一下自己今天的一个小发现,也希望有高手或者大家来讨论讨论我这个发现对不对。我是通过uart的中断程序把ADC中断程序采集到的数据发送出去,我开始运行的时候,串口那边老是没数据出来。有时会有。很奇怪的现象。后来我在debug程序的时候发现,好像还没启动adc的时候,uart的中断已经发生了。程序并不是到了while(1){}后才发生中断,从而导致了adc不能正常启动。
虽然我自己也觉得不可思议,但事实上,我把uart和adc的启动代码放在初始化后,即将要进入while函数时才启动它,程序就没问题了。

使用特权

评论回复
6
xwj| | 2010-2-22 21:33 | 只看该作者
哈哈,你确定听到的是人类的声音吗?

使用特权

评论回复
7
kubuco| | 2010-2-23 21:36 | 只看该作者
。。。
顶XWJ

使用特权

评论回复
8
luning298|  楼主 | 2010-2-23 21:52 | 只看该作者
当然是人类的声音啦……哈哈……原来设置好ADC的采样率,一般就可以输出能听到的声音了,不过噪音很大。
现在是想办法把噪音弄掉,但滤波的话比较麻烦,现在不想采用滤波的办法。大家有经验能交流交流一下么?

使用特权

评论回复
9
luning298|  楼主 | 2010-2-23 21:52 | 只看该作者
6# xwj

应该是人类的声音+电波的声音的混合体

使用特权

评论回复
10
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的算法加进去。

使用特权

评论回复
11
xjycug| | 2010-2-25 22:07 | 只看该作者
串口传输不一定非要用异步啊,使用同步速率会更快些吧。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
luning298 + 1
12
luning298|  楼主 | 2010-2-26 22:07 | 只看该作者
11# xjycug
嗯……同步我一直没有考虑过,不过要是同步的话,会不会数据的失真比较严重呢?

使用特权

评论回复
13
xjycug| | 2010-2-26 22:17 | 只看该作者
我同事在工作中使用过同步,据说传输数据较快,我在干活中一般都使用异步,呵呵。
我看书上描述,没觉得有失真。你指的失真是啥,担心速率高了逻辑信号失真,还是别的失真?如果你有条件可以做个试验,不过同步和异步差别很大,估计通用性不是很好吧。我在项目中真没弄过,只是给个建议,反正可以告诉你有人成功了,呵呵,如果你试试成功的可能性还是很大的。

使用特权

评论回复
14
luning298|  楼主 | 2010-2-26 22:47 | 只看该作者
13# xjycug
受教受教了……果真是听君一席话胜读十年书啊

使用特权

评论回复
15
luning298|  楼主 | 2010-2-26 22:50 | 只看该作者
我今天还出现了这样的问题,我在ADC的中断程序里面搞了个ADPCM的压缩算法嘛,竟然会出现这样的现象:在执行ADC中断程序的时候,UART的中断来打断了ADC的中断。尽管后来有把ADC的优先级提高了,感觉在中断程序里面加太多代码,效果不是很好。

使用特权

评论回复
16
luning298|  楼主 | 2010-3-1 22:10 | 只看该作者
今天又一次感受到了,搞单片机真的要注意很多细节,今天一个char类型就导致我的数据溢出,本来考虑那个数据用char类型就够了,为了节约空间。结果就是因为它的溢出,导致不成功。

使用特权

评论回复
17
luning298|  楼主 | 2010-3-2 21:03 | 只看该作者
随着攻克一个个小问题,这个小项目也开始接近ending了。

使用特权

评论回复
18
jormen-zhu| | 2010-3-5 10:43 | 只看该作者
值得学习,借鉴。

使用特权

评论回复
19
zjswuyunbo| | 2010-3-5 23:52 | 只看该作者
恭喜…

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

20

帖子

0

粉丝