《数字信号处理实训》由会员分享,可在线阅读,更多相关《数字信号处理实训(17页珍藏版)》请在金锄头文库上搜索。
1、数字信号处理课程设计,张耕 李凯 樊子仪,一:语音信号采集与处理 二:基于MATLAB的DTMF信号的仿真分析,设计的背景及意义,课题背景 随着计算机技术和信息技术的发展,语音交互已经成为人机交互的必要手段,而语音信号的采集和处理是人机交互的前提和基础,在各个领域都有广泛的应用。 Matlab是一个数据分析和处理功能十分强大的工程实用软件,它的功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。,语音信号采集与处理,本课程设计主要运用了语音信号的采集和处理的理论知识,通过MATLAB中的wavrecord函数录制自己的一段声音;利用plot、fft、ffts
2、hift等函数得到其时域波形和频谱图;根据人的声音的特点,设计了低通、高通、带通三个切比雪夫滤波器,对原始信号进行滤波,并将滤波前后的时域波形及频谱作比较;往原始信号中加入一高频噪声,得到加入噪声后的时域波形及频谱,后对该混杂信号进行滤波,除去其高频噪声,摘要,语音录音,语音信号保存,对信号低通、 高通、带通滤波并 得到各自时域波形 和频谱,画出原始信号 时域波形 和频谱,滤除高频噪声、 得到滤波后信号 波形及频谱,加入高频噪声且 绘制信号时域波形 及频谱,一:用wavrecord读取语音信号,并进行采样,建立数据文件 二:用plot、fft、fftshif等得到文件的时域波形和频谱图,如图所
3、示,语音信号的采集与分析,由此频谱图也可以看出,人与乐器发出的声音频率集中在几十到三千赫兹,滤波器的设计,设计切比雪夫滤波器对原始信号进行滤波,利用cheb1ord函数计算滤波器阶数,利用cheby1计算滤波器系数。 分别得到通带截止频率为1000hz,阻带截止频率为1200hz的低通滤波器; 通带截止频率为2000hz,阻带截止频率为1600hz的高通滤波器; 截止频率Wp1000Hz 2000Hz;阻带截止频率Ws800Hz 2500Hz;的带通滤波器。 如图所示,滤波器的设计,可以明显地听到经过低通后声音明显较先前低沉但音量减小,如一、二图所示,低通滤波后信号高频部分明显大幅衰,即信号只
4、剩余低音部分; 经过高通滤波后声音较原始信号刺耳但音量减小,如一、三图所示,高通滤波后信号低频部分明显大幅衰,剩下高频部分,即信号只剩余高音部分; 经过带通滤波后声音较原始信号无明显区别但音量明显减小,如一、四图所示,带通滤波后信号低频和高频部分明显大幅衰,剩下中频部分,即信号只剩余中音部分,滤波器的设计,加载噪音信号,考虑到国际标准人声的频率范围在300Hz3400Hz,且根据采样定理Ws2Wm,又因为fs=8000,于是给原始语音信号加入频率为3800hz的正弦高频噪声。 如图所示,为加入高频噪声后的信号时域波形和频谱图。 由图可以看出,加入信号后的时域波形明显幅度加大,使用wavplay
5、函数播放也可明显听到明显滴声,从频谱图中也可看到,较原信号而言,加噪声后频谱在3800hz和-3800hz处增加了一高峰。,对噪音信号滤波,设计阻带截止频率为3600,通带截止频率为3400的切比雪夫低通计滤波器将高频噪声滤除。所得信号时域波形及频谱图如上图所示,DTMF信号的产生与识别仿真实验在MATLAB环境下进行,编写仿真程序,运行程序,送入8位电话号码,程序自动产生每一位号码数字相应的DTMF信号,并送出双频声音,再用DFT进行谱分析,显示每一位号码数字的DTMF信号的DFT幅度谱,安照幅度谱的最大值确定对应的频率,再安照频率确定每一位对应的号码数字,最后输出8位电话号码。,基于MAT
6、LAB的DTMF信号的仿真分析,DTMF信号的产生与检测,1)双音多频信号的产生 假设时间连续的 DTMF信号用表示,式中是选择的两个频率,代表低频带中的一个频率,代表高频带中的一个频率。显然采用数字方法产生DTMF信号,方便而且体积小。下面介绍采用数字方法产生DTMF信号。规定用8KHz对DTMF信号进行采样,采样后得到时域离散信号为: 形成上面序列的方法有两种,即计算法和查表法。用计算法求正弦波的序列值容易,但实际中要占用一些计算时间,影响运行速度。查表法是预先将正弦波的各序列值计算出来,寄存在存储器中,运行时只要按顺序和一定的速度取出便可。这种方法要占用一定的存储空间,但是速度快。 因为
7、采样频率是8000Hz,因此要求每125ms输出一个样本,得到的序列再送到D/A变换器和平滑滤波器,输出便是连续时间的DTMF信号。DTMF信号通过电话线路送到交换机。,DTMF信号的产生与检测,2)基于Goertzel算法的双音多频信号检测 在接收端,要对收到的双音多频信号进行检测,检测两个正弦波的频率是多少,以判断所对应的十进制数字或者符号。显然这里仍然要用数字方法进行检测,因此要将收到的时间连续 DTMF信号经过A/D变换,变成数字信号进行检测。检测的方法有两种,一种是用一组滤波器提取所关心的频率,根据有输出信号的2个滤波器判断相应的数字或符号。另一种是用DFT(FFT)对双音多频信号进
8、行频谱分析,由信号的幅度谱,判断信号的两个频率,最后确定相应的数字或符号。当检测的音频数目较少时,用滤波器组实现更合适。FFT是DFT的快速算法,但当DFT的变换区间较小时,FFT快速算法的效果并不明显,而且还要占用很多内存,因此不如直接用DFT合适。下面介绍Goertzel算法,这种算法的实质是直接计算DFT的一种线性滤波方法。这里略去Goertzel算法的介绍,可以直接调用MATLAB信号处理工具箱中戈泽尔算法的函数Goertzel,计算N点DFT的几个频点的值。,程序设计思路与运行,1)程序分四段: 第一段(27行)设置参数,并读入8位电话号码; 第二段(920行)根据键入的8位电话号码产生时域离散DTMF信号,并连续发出8位号码对应的双音频声音; 第三段(2225行)对时域离散DTMF信号进行频率检测,画出幅度谱; 第四段(2633行)根据幅度谱的两个峰值,分别查找并确定输入8位电话号码。,2)运行结果: 第一段 运行程序,根据提示键入8位电话号码12345678,然后回车。 第二段 回车后可以听见8位电话号码对应的DTMF信号的声音,并输出相应的8幅频谱。 第三段 左上角的第一个图在k=18和k=31两点出现峰值,所以对应第一位号码数字1。最后显示检测到的电话号码12345678。,程序运行结果,谢谢!,