数字信号处理(Digital Signal Processing)技术,从20世纪60年代以来,随着计算机科学和信息科学发展,数字处理技术应运而生并得以快速发展。语言是人们进行信息沟通的主要方式之一,它具有直接、自然、方便等优点。语音则是语言的物理层表达方式。语音处理主要是对语音进行机器处理,以达到传输、自动识别、机器理解等目的。进行了语音处理过程的滤波、采样、傅立叶变换和谱包络提取的算法实现研究,讨论了在算法的DSP实现方法,
Matlab语言是一种广泛应用于工程计算及数值分析领域的新型高级语言, Matlab功能强大、简单易学、编程效率高。特别是Matlab还具有信号分析工具箱, 不需具备很强的编程能力, 就可以很方便地进行信号分析、处理和设计。
关键词:语音信号处理数字信号处理Matlab滤波器频谱分析
Abstract
Digital Signal Processing (Digital Signal Processing) technology from the 1960s,along with the development of computer science and information science, digital processing techniques have emerged and to rapid development. Language is the communication of people to one of the main, it has a direct, natural, and easy. Voice is the language of the physical layer of expression. Voice processing machines mainly for voice processing, in order to achieve transmission, automatic recognition, machine understanding of other purposes. For voice processing filtering, sampling, Fourier transform and spectral envelope extraction algorithm research, discusses the implementation of DSP algorithms.
Matlab language is a widely used engineering calculation and numerical analysis of the field of new high-level language, Matlab powerful, easy to learn, programming and high efficiency. Matlab also has a particular signal analysis toolbox, need not have strong programming skills, you can easily carry out signal analysis, processing and design.
Keyword: peech signal processing; DSP; spectral analysis; filter
1 引言
数字信号处理主要是研究用数字或符号序列表示和处理信号。处理的目的可以是削弱信号中的多余内容,滤除混杂的噪声和干扰,或者是将信号变换为容易分析和识别的形式,便于估计和选择它的特征参数。
声音信号是一维连续信号,而计算机只能处理离散信号。为了从离散信号还原连续信号,根据采样定理,可以确定采样频率的最小值。wav文件是一种数字声音文件格式,本课程设计基于Matlab分析了wav声音文件频谱与声音的关系。通过采集个人的一段声音进行频谱分析等处理,然后设计数字滤波器处理这个原始声音的wav文件,并比较滤波以后输出声音信号与原声音信号的异同。
基于MATLAB的语音信号特技处理, 其实质是针对于不同的滤波器性能的分析与比较。对于滤波器的设计可以使用MATLAB 中自带的工具, 也可以通过编程或直接利用MATLAB中的函数库来实现。
2 课程设计题目描述和要求
2.1设计内容
(1)利用Windows下的录音机或其他软件,录制一段自己的语音信号,时间控制在1s左右,并对录制的信号进行采样。
(2)语音信号的频谱分析,画出采样后语音信号的时域波形和频谱图。
(3)将信号加入延时和混响,再分析其频谱,并与原始信号频谱进行比较。
(4)设计几种特殊类型的滤波器:单回声滤波器,多重回声滤波器,无限个回声滤波器,全通结构的混响器,并画出滤波器的频域响应。
(5)用自己设计的滤波器对采集的语音信号进行滤波。
(6)分析得到信号的频谱,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化。
(7)回放语音信号。
2.2设计要求
(1)熟悉离散信号和系统的时域特性。
(2)熟悉语音信号的特点。
(3)掌握数字信号处理的基本概念,基本理论和基本方法。
(4)掌握序列快速傅里叶变换方法。
(5)学会MATLAB的使用,掌握MATLAB的程序设计方法。
(6)掌握MATLAB设计各种数字滤波器的方法和对信号进行滤波的方法。
3 课程设计报告内容
3.1 总体设计
整体的流程图如3.1所示
图3.1整体流程图
3.2 详细设计过程
3.2.1混响
人工混响是指人为对原始声音信号进行处理,使其具有更好的音质效果, 在音乐、广播、电视和电影制作中广泛应用. 以往, 混响处理是采用人工方法或模拟技术, 效果不够理想. 近年来, 随着数字信号处理技术的发展, 一些原本只有通过建筑声学才能解决的声学效果问题可以利用电声学知识以数字信号处理的手段来实现.
在一个声学环境下, 一个声源除了直接到达人耳外, 还有一部分要通过人体周围的障碍物反射到人耳, 直达声和反射声叠加在一起就形成了混响。
混响的脉冲响应如图3.2所示, 其中直达信号是声源不经过任何障碍物直接到达人耳的那部分, 其传播路径较短, 所以能量损失少, 幅度很强; 早期反射由一次或几次反射的声音信号所组成, 此时声音的谱线离散, 能量由于声音与反射面的碰撞有所减少; 后期反射由更多的多次反射的声音信号组成,声音经过不断的多次反射, 能量呈指数递减, 同时反射声密度增加, 使得谱线密集, 近似连续。
图3.2 系统脉冲响应
数字混响器就是对原始朴素的声音信号进行处理, 使其产生一定混响效果的数字信号处理系统, 这样的系统其脉冲响应从理论上讲应该类似或逼近图3.2所示的形式。
混响的常见参数有以下几种:
(1)混响时间:能逼真的模拟自然混响的数码混响器上都有一套复杂的程序,其上虽然有很多技术参数可调,然而对这些技术参数的调整都不会比原有的效果更为自然,尤其是混响时间。
(2)高频滚降:此项参数用于模拟自然混响当中,空气对高频的吸收效应,以产生较为自然的混响效果。一般高频混降的可调范围为0.1~1.0。此值较高时,混响效果也较接近自然混响;此值较低时,混响效果则较清澈。
(3)扩散度:此项参数可调整混响声阵密度的增长速度,其可调范围为0~10,其值较高时,混响效果比较丰厚、温暖;其值较低时,混响效果则较空旷、冷僻。
(4)预延时:自然混响声阵的建立都会延迟一段时间,预延时即为模拟次效应而设置。
(5)声阵密度:此项参数可调整声阵的密度,其值较高时,混响效果较为温暖,但有明显的声染色;其值较低时,混响效果较深邃,切声染色也较弱。
(6)频率调制:这是一项技术性的参数,因为电子混响的声阵密度比自然混响稀疏,为了使混响的声音比较平滑、连贯,需要对混响声阵列的延时时间进行调制。此项技术可以有效的消除延时声阵列的段裂声,可以增加混响声的柔和感。
(7)调治深度:指上述调频电路的调治深度。
3.2.2延时
延时就是将音源延迟一段时间后,再欲播放的效果处理。依其延迟时间的不同,可分别产生合唱、镶边、回音等效果。
当延迟时间在3~35ms之间时人耳感觉不到滞后音的存在,并且他与原音源叠加后,会因其相位干涉而产生"梳状滤波"效应,这就是镶边效果。如果延迟时间在50ms以上时,其延迟音就清晰可辨,此时的处理效果才是回音。回音处理一般都是用于产生简单的混响效果。
延时、合唱、镶边、回音等效果的可调参数都差不多,具体有以下几项:
延时时间(Dly),即主延时电路的延时时间调整。
反馈增益(FB Gain),即延时反馈的增益控制。
反馈高频比(Hi Ratio),即反馈回路上的高频衰减控制。
调制频率(Freq),指主延时的调频周期。
调制深度(Depth),指上述调频电路的调制深度。
高频增益(HF),指高频均衡控制。
预延时(IniDly),指主延时电路预延时时间调整。
均衡频率(EQ F),这里的频率均衡用于音色调整,此为均衡的中点频率选择。
由于延时产生的效果都比较复杂多变,如果不是效果处理专家,建议使用设备提供的预置参数,因为这些预置参数给出的处理效果一般都比较好。
3.2.3离散傅立叶变换
在MATLAB的信号处理工具箱中函数FFT和IFFT用于快速傅立叶变换和逆变换。下面介绍这些函数。
函数FFT用于序列快速傅立叶变换。
函数的一种调用格式为
y=fft(x)
其中,x是序列,y是序列的FFT,x可以为一向量或矩阵,若x为一向量,y是x的FFT。且和x相同长度。若x为一矩阵,则y是对矩阵的每一列向量进行FFT。
如果x长度是2的幂次方,函数fft执行高速基-2FFT算法;否则fft执行一种混合基的离散傅立叶变换算法,计算速度较慢。
函数FFT的另一种调用格式为
y=fft(x,N)
式中,x,y意义同前,N为正整数。
函数执行N点的FFT。若x为向量且长度小于N,则函数将x补零至长度N。若向量x的长度大于N,则函数截短x使之长度为N。若x 为矩阵,按相同方法对x进行处理。
经函数fft求得的序列y一般是复序列,通常要求其幅值和相位。MATLAB提供求复数的幅值和相位函数:abs,angle,这些函数一般和FFT同时使用。
3.2.4滤波器设计
单回声滤波器的系统函数:
H(z)=1+a*z-m<1
将其写成差分方程为:
y(n)=x(n)+a*x(n-m)
这样我们就能理解为什么称其为单回声滤波器了。滤波器的输出为输入和一个输入延时的叠加,而输入的延时就可以看作回声。
单回声滤波器的幅频曲线、相频曲线和单位脉冲响应分别如图3.3、图3.4和图3.5所示:
图3.3 单回声滤波器幅频曲线
图3.4 单回声滤波器相频曲线
图3.5 单回声滤波器脉冲响应
无限回声滤波器的系统函数:
H(z)=z-m/a*z-m<1
之所以称其为无限回声滤波器了?同单回声滤波器一样,同样系统函数写为差分方程,结果为:
y(n)=x(n)+a*y(n-m)=x(n)+a*x(n-m)+a2*y(n-2*m)=…
从差分方程可以看出,系统的输入为输出及其一系列延时的叠加,且延时后信号的系数的绝对值逐渐减小,这就可以理解什么是无限回声滤波器了。
无限回声滤波器的幅频响应、相频响应和单位脉冲响应如图3.6、图3.7和图3.8所示:
图3.7 无限回声滤波器幅频曲线
图3.8无限回声滤波器相频曲线
图3.9 无限回声滤波器脉冲响应
多重回声滤波器器:多重回声滤波器只需要在单回声滤波器做适当修改就可以了,这里不做过多讨论。
全通结果的混响器的系统函数为:
H(z)=(a+z-m)/(1+a*z-m) <1
之所以称其为全通滤波器了,我们可以来看其幅频响应如图3.10所示。这样我们就可以理解为什么是全通了,其幅频响应总是为1。同时,该滤波器的相频响应和单位冲击响应如图3.11和图3.12所示。
图3.10 全通滤波器幅频曲线
图3.11 全通滤波器相频曲线
图3.12 全通滤波器脉冲响应
对信号进行时域滤波用到函数filter,函数filter的调用格式为:
y=filter(b,a,x)
该格式采用数字滤波器对数据进行滤波,既可以用于IIR滤波器,也可以用于FIR滤波器。其中向量b和a分别表示系统函数的分子、分母多项式的系数,若a=1,此时表示FIR滤波器,否则就是IIR滤波器。该函数是利用给出的向量b和a,对x中的数据进行滤波,结果放如向量y中。
4.设计的步骤及代码编写
4.1从Windows读取1s的语音信号
读取wav文件的函数是wavread,其调用格式如下:
[x,fs,bits]=wavread(‘filepath’)
该函数用于读取语音,采样值放在向量x中,fs表示采样频率(Hz),bits表示采样位数。
4.2采样后语音信号的时域波形和频谱
对采样后信号进行频谱分析的具体代码如下:
closeall
clearall
[x,fs,bits]=wavread('e:\\matlab\\work\\DSP.wav');
x=x(:,1);
plot(x)
title(‘the wave of time domain’)
figure
y=fft(x);
plot(abs(y))
title(‘the wave of frequency domain’)
结果如图4.1所示:
图4.1原始信号时域和频域波形图
4.3对采样后的信号延时和混响
对采样后的信号进行延时和混响的程序如下所示:
n=200;%n用来调节延时大小
x1=[zeros(n,1);x];
x2=[x;zeros(n,1)];
x3=x1+x2;
figure
plot(x3)
title('wave of time domain after delay')
y1=fft(x3);
figure
plot(abs(y1))
title('wave of frequency domain after delay')
程序运行结果如图4.2所示:
图4.2延时和混响波形
4.4单回声滤波器
用单回声滤波器对信号进行滤波并对滤波后的时域波形和频谱分析的程序如下:
closeall
clearall
[x,fs,bits]=wavread('e:\\matlab\\work\\DSP.wav');
x=x(:,1);
m=10000;%用来调整回声与原来声音的间隔
a=0.6;%用来调整回声的强度
b=[1;zeros(m,1);a];
a=[1];
y2=filter(b,a,x);
plot(y2)
title('wave of time domain through single echo filter')
figure
y3=fft(y2);
plot(abs(y3))
title('wave of frequence domain through single echo filter')
sound(y2,fs,bits)
程序运行结果如图4.3所示:
图4.3单回声滤波器波形
回放的音频有明显的回声。
分析经过单回声滤波器的音频信号可以看出幅值的变化不是很大,但是原始信号无幅值的点出现了幅值,这也是产生的回声的原因。分析频谱图可以看出,幅值有较大的提升。
4.5无限个回声滤波器
用无限回声滤波器进行滤波的程序如下所示:
clearall
[x,fs,bits]=wavread('e:\\matlab\\work\\DSP.wav');
x=x(:,1);
p=200; %用来调整回声间隔
a=0.6; %用来调整回声音量
b=[zeros(p,1);1];
a=[1;zeros(p-1,1);-a];
y3=filter(b,a,x);
plot(y3)
title('wave of time domain infinite single echo filter')
figure
y4=fft(y3);
plot(abs(y4))
title('wave of frequence domain through infinite echo filter')
sound(y3,fs,bits)
程序运行结果如图4.4所示:
图4.4无限回声滤波器波形
分析经过无限回声滤波器的信号可以发现,在时间域上,幅值线更密集且幅值增大,在频域上,幅值减小,但谱线更密集。
为了更清楚的现实无限回声滤波器的效果,我们可以调整参数p(为了能清晰分辨出回声,这里将p设为20000),并将原始信号延长,看经过滤波器的效果。
[x,fs,bits]=wavread('e:\\matlab\\work\\DSP.wav');
x=x(:,1);p=20000;
a=0.6;
b=[zeros(p,1);1];
a=[1;zeros(p-1,1);-a];
x=[x;zeros(200000,1)];
y5=filter(b,a,x);
plot(y5)
sound(y5,fs,bits)
经过无限回声滤波器后的时域波形如图4.5所示:
图4.5无限回声滤波器时域波形
可以看出,语音信号在时域上一直重复且幅值越来越小,这符合无限回声滤波器的特性。
回放的音频信号也是无限重复,且音量越来越小,给人无限重复的感觉。设想如果>1,且将原始音频信号无限延迟(通过在原始信号后面补零实现),那回声会越来越大,直到声音失真。
4.6全通结构的混响器
全通结构的混响器其程序如下所示:
clearall
[x,fs,bits]=wavread('e:\\matlab\\work\\DSP.wav');
x=x(:,1);p=200;
a=0.6;
b=[a;zeros(p,1);1];
a=[1;zeros(p,1);-a];
y6=filter(b,a,x);
plot(y6)
title('time wave through full-pass filter')
figure
y7=fft(y6);
plot(abs(y6))
title('frequence wave through full-pass filter')
sound(y6,fs,bits)
程序运行结果如图4.6所示:
图4.6 全通滤波器波形
分析经过滤波器的信号发现,其时间域幅值有所增加,幅值线变得密集,但波形基本不变。频谱线的幅值变大,但谱线变得稀疏。
4.6多重回声滤波器
多重回声滤波器其程序如下:
clearall
[x,fs,bits]=wavread('e:\\matlab\\work\\DSP.wav');
x=x(:,1);p=20000;
b=[1;zeros(p,1);-0.5^5];
a=[1;zeros(p,1);-0.5];
y6=filter(b,a,x);
plot(y6)
title('time wave through mult echo filter')
figure
y7=fft(y6);
plot(abs(y6))
title('frequence wave through mult echo filter')
sound(y6,fs,bits)
程序运行结果如图4.7所示:
图4.7 多重回声滤波器波形
时域波形总体上变化不大,但频域图扩展到整个频域。
结果与体会
通过两周的课程设计,我对熟悉信号处理有了更进一步的理解,也复习了滤波器的相关知识。本次课题是基于MATLAB的语音信号的特技处理,对语音信号进行延时、混响、滤波等操作。通过查阅资料,了解了滤波器的相关知识。在实际的操作中,发现控制滤波器的参数,结果会有很大变化。只有通过不断的调整参数,才能获得理想的效果。
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程,通过课程设计我们能够比较系统的了解理论知识,把理论和实践相结合,并且用到生活当中。在做设计的过程中总会出现各种问题,在这种情况下我们都会努力寻求最佳路径解决问题,无形间提高了我们的动手,动脑能力,并且同学之间还能相互探讨问题,研究解决方案,增进大家的团队意识。
通过课程设计让我知道了,我们平时所学的知识如果不加以实践的话等于纸上谈兵。课程设计主要是我们理论知识的延伸,它的目的主要是要在设计中发现问题,并且自己要能找到解决问题的方案,形成一种的意识。我们还能从设计中检验我们所学的理论知识到底有多少,巩固我们已经学会的,不断学习我们所遗漏的新知识,把这门课学的扎实。
参考资料
[1]刘全等.数字信号处理原理与实现.第二版,电子工业出版社.2009
[2] 张雄伟.DSP集成开发与应用实例.第一版.电子工业出版社.2002;
[3] 张洪涛等.数字信号处理.第一版.华中科技大学出版社.2007
[4]SanjitK.Mitra.数字信号处理-基于计算机的方法.第三版.电子工业出版社,2006
[5] 杨述斌等.数字信号处理实践教程.第一版.华中科技大学出版社.2007
[6] 郭仕剑等.MATLAB 7.x 数字信号处理.人民邮电出版社.2006
[7] 奥本海默. 信号与系统.第二版.电子工业出版社.2013下载本文