使用暖水瓶接水时,随着暖水瓶中的水位不断升高,接水的声音随之变化,通过接水声音的音调变化可以判断水是否已经接满。这是因为当空气震动时就会产生声音,不同的震动频率产生的声音音色也不尽相同。而水流的流动同样会引发空气的震动,进而产生声音。在接水时,由于接水容器内部空气柱的震动,引发了一种不断升高的接水声音。这种声音虽然会随着容器的不同略有差异,但是总体的变化趋势是一样的,都会随着容器内部水位的上升、水位上方空气柱的变短、震动频率的变化,进而引起产生的声音音调的变高。因此本文通过采集接水的声音,找出声音与瓶内水位的关系,从而实现接水的自动控制。
1 系统设计
1.1 系统硬件配置
硬件系统选择了飞思卡尔公司生产的高性能16位单片机MC9S12X128作为核心处理芯片,芯片内部集成了A/D采样模块,SCI通信模块等多种强大的控制功能模块,而且该芯片内部集成锁相环,可以进行超频来提升芯片的运算速度。使用购买的最小系统板可以使芯片稳定工作在88MHz的总线时钟上,这就使得芯片的运算能力有了进一步的提升。C9S12X128自带的内部A/D模块有8位、10位、12位转换精度可供选择,最小转换时间为7微妙,可编程的采样时间,16路A/D转换通道,可以进行模拟与数字两种类型的采样,内部自带采样保持电路,可以进行暖水瓶智能关闭实时控制器的设计。由于人耳可分辨的声音信号的频谱范围为20Hz到20000Hz。根据奈奎斯特采样定律,采样频率应该大于2倍的信号最高频率,这样才能不失真的将信号的频谱分离出来。而一般来说,对普通声音信号的采样率若大于8kHz就完全可以满足基本要求了,因此采用单通道,8位精度,22.5k采样率进行数据采集。
1.2 算法原理及流程
接水声音信号的大小是由信号的幅度决定的,而声音信号的音调变化是由频率变化引起的。计算信号频率的方法是离散傅里叶变换(DFT),设采集的声音信号为x(n),则x(n)的离散傅里叶变换公式如式(1)所示:
按频率抽取的FFT算法其输入数据是顺序的,输出数据是倒位序的。
系统软件流程图如图2所示。
图2 程序总框图
将采集设备固定在暖水瓶口相应的地方,并用固定的流量及位置对暖水瓶进行注水,同时进行现场采集数据,A/D每次采满128个数据点。在敏感频率上进行平均优化,找到效果最好的频率范围是第44~50个点的频率范围,根据公式N=可知,fs=22.5kHz,N=128,转化成相应的频率为:7734~8789Hz。如图3所示。
图3 敏感频率的能量和的变化
横坐标为接水过程中经过的FFT次数,纵坐标为敏感频率能量的百分比,将选定的频率范围44~50个点的能量求和,并除以总共64个点的能量,得到一次FFT能量的百分比。这样,每经过8次FFT,对这些求得的能量百分比求一次平均值,于是得到了图4的效果。
图4 第一次平均值分析
通过对暖水瓶实时采集的数据进行分析,可以发现选中频率段的能量百分比很明显的升高了,而且数值相对固定,如果在实时处理中发现有能量百分比大于0.32时,就使单片机控制外部电路将水流关闭,即可达到自动关闭的效果。
图5 第一次的数据仿真关闭
由图5得出仿真值为“1”的时候,即为单片机判断出应该将水流关闭的点。
将仿真的程序转化成C语言写入到单片机,进行实物测试。为测试方便没有制作控制水流关闭的外部硬件,采用较为简便的启动指示灯报警方法:如果单片机判断应当关闭水流时,将开发板上的LED灯点亮。测试结果:在暖水瓶水位快接近瓶口的时候,单片机控制的外部LED指示灯被点亮。达到了系统的设计的预期效果。
通过使用单片机对暖水瓶接水的声音进行A/D采样,并对采样数据进行FFT运算,结合MATLAB仿真软件,探究出一种暖水瓶接水的声音与其频率和能量的关系,并判断瓶中的水位是否已经满了的方法。通过实验验证了暖水瓶接水时通过声音数据的采集,计算频谱和能量能够判断出水位已满,该方法有一定的实用价值。
参考文献
[1]程佩青.数字信号处理教程[M].3版.北京:清华大学出版社,2008.
[2]郑君里.信号与系统[M].2版.北京:高等教育出版社,2000.
[3]李立达.64点FFT算法在8031单片机中的实现[J].中南林学院学报,1999,(19).
[4]吴继发,陈特放.单片机实现音频频谱显示的快速算法研究[J].电子设计工程,2009,(17).
[5]张红云.FFT在单片机C8051中的实现[J].山西电子技术,2009,(5).
[6]卜红霞,胡永杰,齐焱焱,等.基于DSP的频谱分析系统的设计与实现[J].微计算机信息,2008年,(24).
[7]白婧敏,曾水平.基于DSP的声音采集系统硬件设计[J].微计算机信息,2010,(26).
收稿日期:2017-10-09 作者简介:刘昊霖,辽宁省营口市高级中学学生。