声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3196|回复: 1

在matlab中利用sound函数播放单音

[复制链接]
发表于 2006-5-2 16:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我是一个大虾,最近遇到个难题,就是想用声卡实现一个能够播放一定时间一定频率得单音,后来我用c++builder没有实现,而后想到matlab,我想用他的sound函数实现能够播放一定时间一定频率得单音,敢问各路高手,能否帮助小弟一下,给出程序啊!不胜感谢啊!!!!!!!!!!!!!!!!!!!!!!!
回复
分享到:

使用道具 举报

发表于 2006-5-10 09:00 | 显示全部楼层

回复:(yyg122647y)在matlab中利用sound函数播放单音...

用MATLAB和声卡实现T型波信号发生器的设计方法<BR>
<br>
<p>MATLAB有强大的音频处理函数和强大的数据处理功能,能够方便地产生各种波形的数据数组,同时通过音频处理函数又可以很方便的将数据数组传递给声音设备,并以特定的采样频率和传输比特位由声卡输出。本文以MATLAB6.5版和Waveterminal 192L声卡为例,介绍了实现T型波信号发生器的方法。
<p>
<p>在进行通讯和DSP等试验过程中,信号源是不可缺少的一个工具,很多设备是使用信号源来模拟检测实际目标,来验证设备的功能及可靠性。通常,对于研制单一产品的厂家来说,需要某一固定的信号源即可,在市场上也可以找到性价比合适的产品。但对于某些开发人员来说,单一的信号源远远满足不了要求,他们可能需要各种频率、各种包络和精度的信号源来验证设计的可靠性。设计者通常很难找到完全符合要求的产品,而且价格一般也极为昂贵。此外,大多数信号源可能用一两天,从而造成极大的浪费。因此,自己研制出符合要求、高性价比的信号源成为很多厂家的选择。
<p>
<p>使用硬件也可以完成过数字信号源的设计,其实现的大致思路是:先分析信号源的波形,对波形的一周期数据进行采样,存储到ROM中,再使用可编程逻辑器件对采样数据进行重复读取、A/D转换、滤波、放大;如想监测信号质量,对输出进行A/D转换,反馈到可编程逻辑器件进行分析、显示和校正。很多工程师会选择这样的设计思路,所得波形具有可靠性高、易于实现和精度高的优点。然而,是从选择思路、绘制原理图、设计电路板、制版、编程、调试和更改的整个设计周期可能达2、3个月之久,而用MATLAB和声卡去实现则更方便有效。
<p>
<p>设计思路和软件实现方法
<p>
<p>声卡是将音频输入数据转换为立体声输出的一种设备,输入信号同时也设定了声卡的采样频率和采样位数,普通声卡采样频率通常可选值为8,000Hz、11,000Hz、16,000Hz、22,000Hz和44,100Hz,而高性能的专业声卡的A/D采样频率最高可达96,000Hz,D/A转换频率最高可达192,000Hz。声卡的采样频率可以通过专业软件来进行更改和设置的。声卡输出位数为固定值,包括8位、16位和24位,这个参数标志声卡进行D/A转换时的转换精度,但要使输出信号更接近理想值,还需要高采样频率来做保障。
<p>
<p>由于输出是一个T形波信号,具有一定的周期,在T形波以外输出零电平,因此界面设计(见图1)中应包括:中心频率、T形波上升段、平稳段、下降段时间间隔,T形波信号周期、采样频率的选择或输入/输出信号位数的选择,以及信号发送、演示、清除、发送暂停、继续和退出系统。其实还有很多软件可以对音频文件进行播放,因此又增加了一个按钮用于产生音频文件。将信号参数输入完全后,可以通过信号演示按钮对波形进行查看。对数据进行修改时,可先用信号清除按钮清空数据,或直接对数据进行修改,对信号发送暂停或继续也可进行控制。
<p>
<p>a. 音频数据的产生方法 <BR>在应用界面中,共设置了中心频率、T形波上升段、平稳段、下降段时间间隔、T形波信号周期、采样频率和传输位共七个参数源,通过MATLAB强大的计算函数将其转换成声卡所能接受的音频数据向量、D/A采样频率以及数据向量的宽度。
<p>
<p>Vs:一周期信号数据向量 <BR>Vup:上升段信号数据向量, <BR>Vstb:平稳段信号数据向量, <BR>Vdown:下降段信号数据向量; <BR>Vs=[Vup,Vstb,Vdown] <BR>Vup=sin(w×Pup), <BR>Vstb=sin(w×Pstb), <BR>Vdown=sin(w×Pdown), <BR>w=2×3.1416×f。 <BR>Pup:上升段信号采样点, <BR>Pstb:平稳段信号采样点, <BR>Pdown:下降段信号采样点。 <BR>w:输出信号的角频率, <BR>f:输出信号频率,由应用界面取得。 <BR>Pup=[0:point:tup-point] <BR>Pstb=[tup:point:tup+tstb-point] <BR>Pdown=[tup+tstb:point:tup+tstb+tdown-point] <BR>Pt=[Pup,Pstb,Pdown] <BR>point=1/fspl,为采样频率的倒数,中括号及内部数据表示由起始时间到结束时间以point为间隔而产生的数据向量,Pt为采样时间点。
<p>
<p>b. 对T型波信号进行演示和信号清除
<p>
<p>这两个功能分别由信号演示和信号清除两个按钮来完成,信号演示的实现方法是将采样时间点一周期信号数据向量使用plot函数,以二维图形的形式将信号显示在坐标轴上。坐标轴设置为自动调节,图形界面设置为系统菜单模式,这样可以方便对信号进行编辑、缩放和其它管理。信号清除只是在回调子函数中将中心频率、T形波上升段、平稳段、下降段时间间隔和T形波信号周期这5个文本框清零,并对坐标轴进行一个缺省设置,因此所显示的信号在座标轴中就会消失。
<p>
<p>c. 对T型波信号进行发送、暂停和继续控制
<p>
<p>信号发送是采用MATLAB“sound”函数,该函数的输入参量是音频数据向量、采样频率和转换位数,数据产生方法如上所述。由于信号是连续发送,因此需要使用一个循环对产生的音频信号向量反复读取发送,需要注意的是在函数sound后面需要加一个pause(T)语句,T的单位为秒,为一个信号的周期。加该语句是由于MATLAB是连续执行循环段语句的,并不管声卡是否已执行完一周期信号的D/A转换。发送暂停和发送继续是由一个全局变量对信号发送进行控制,当此全局变量为1时,发送继续,否则发送禁止,但应用此方法的缺点是信号并不能在暂停的时间点继续发送,而是从新的周期开始重复读取音频信号向量。
<p>
<p>d. 输出波形文件和退出系统
<p>
<p>这个功能由输出文件按钮来完成,是应用MATLAB的wavwrite函数将音频信号转换成.wav文件,文件中也包含了采样频率和数据宽度选项,增加此项的目的是为了能让更专业的音频处理软件对信号进行分析。通过执行应用程序和MATLAB的退出操作,使用“quit”命令退出系统。采用MATLAB的一点不足就是不
<p>
<p>
<p>
<p>
<p>
<p>
<p>
<p>
<p>
<p>能将所有的M文件转换成能脱离MATLAB而独立运行的应用程序。
<p>
<p>声卡输出波形分析
<p>
<p>下面采用界面缺省参数输出信号,即信号周期为29.5kHz,上升段时间为15ms,平稳段时间为70ms,下降段时间为15ms,周期为1s,也可以推算出每周期有900ms是没有信号输出。对信号的采样波形如图2所示,经过仪器分析,时间误差可达到小于0.1ms。
<p>
<p>对周期信号的傅立叶频谱分析如图3所示,信号的能量主要集中在29.5kHz的窄带范围内,是符合设计要求的。
<p>
<p>信号的信噪比分析:通过对输出0伏值段分析即可判断信号信噪比和噪音信号类型,从而找出消除噪音的方法。对噪音波形进行局部放大,可看出此噪音为频率大于1M的锯齿波,波形如图4所示。
<p>
<p>声卡输出噪音分析
<p>
<p>Waveterminal 192L声卡的输出信号峰峰值为6V,而噪音信号的峰峰值为40mV,因而信噪比为20log(6000/40)=43.5dB,当数据宽度为8位时,D/A精度为1位;数据宽度为16位时,D/A精度为9位;数据宽度为24位时,D/A精度为17位。而Waveterminal 192L声卡的信噪比为104位,因此,噪音信号主要为电脑本身、电脑辐射和环境噪音。电脑本身的噪音主要来自于主机电源,声卡的电源信号取自计算机主板,因此主机电源的噪音会引入声卡。另外,接收T型波的设备,如被检验设备和示波器等,往往就放在主机旁边,主机的高频辐射会通过机箱缝隙而形成噪音。环境噪音是最容易被忽视的一个部分,因为这是一个频率仅有50赫兹的噪音分量,对于低频输出信号会有很大的影响。
<p>
<p>降低噪音的解决方法
<p>
<p>a. 通过消除噪声源来减小噪音分量
<p>
<p>通过上述分析可知,噪音源主要来自于电脑本身、电脑辐射和环境噪音。选择信噪比较高的主机电源将会对消除噪音源起到重要作用。另外,测试设备再利用信号源时应尽量与主机保持1米以外的距离,以减少电磁辐射对设备的影响。对于环境噪音,当信号频率与50赫兹相差很大时可以忽略环境噪音对设备的影响,但当信号频率接近50赫兹时,应对被检测设备采取适当的屏蔽措施。
<p>
<p>b. 采用滤波消除声卡输出的噪音
<p>
<p>经实验测定,声卡输出的噪音大于1MHz,因此对于29.5kHz的T形波来说,通过滤波可以轻易地将噪音滤掉,同时还应考虑到环境噪音的影响,因此使用带通滤波器会得到更好的效果。当然,是否采取措施减小噪音,还应根据试验的要求决定,对于要求特别严格的信号源来说,靠MATLAB和声卡也是难以实现的。
<p>
<p>本文小结
<p>
<p>采用MATLAB和声卡来实现信号源,使设计者能快速实现多种方案,对信号源进行采集、分析和处理都带来了极大的方便。MATLAB有丰富的数据处理函数,可提供任意形式的数据源,同时也有很多音频处理函数支持声卡的运行。MATLAB强大的图形可视化功能可以做出友好的操作界面。使用这种方法实现信号源的不足是受采样频率的限制、噪音的影响较大,因此实际应用时还需使用专门的滤波仪器对输出信号进行处理。所以,用这种方案实现信号源,更适合与对输出信号质量要求不是很高,又需要在很短时间内得到一种或多种信号源的技术人员。
<p>
<p>参考文献: <BR>【1】 Shi Xiaohong, Zhou Jia, master GUI graph interface, Peking univ. press,2003. <BR>【2】 Xue Dingyu, Chen Yangquan, System Simulation technology and application based on MATLAB/simulink, Tsinghua press, 2002. <BR>【3】 Fan Yingle, Yang Shengtian, Li Tie, simulink application in detail of MATLAB, people's post-electronics press,2001. <BR>【4】 James R.Armstrong F.Gail Gray,VHDL Design representation and Synthesis(Second Edition),China Machine Press,2002. <BR>【5】 Hou Boting, Gu Xin,VHDL program and digital logic electronics design, XiAn electeonics science institute,1997.
<p>
<p>作者:孙亚光,目前工作于北京九州恒润科技有限公司,主要从事FPGA和MATLAB仿真系统设计,应用于航空、航天和射频领域。 <BR>Email: SYGBJ@yahoo.com.cn
<p>
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-14 09:25 , Processed in 0.066199 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表