1绪论
数字信号处理是随着计算机技术的发展而迅速发展起来的一门新兴而古老的学科,它在新的领域如生物医学工程、声学、雷达、地震不、语音通信、数据通信、核科学等学科发挥着重要的作用,而它所采用的各种方法及众多应用已有悠久的历史;同时也是一门具有很强的理论性与实践性,且理论和技术发展都十分迅速的前沿性学科。随着数字化时代的来临,科学技术的进步而生产发展需求的与日俱增,促进了数字信号处理学科的发展,产生了各种巧妙的信号处理算法;特别是计算机技术的飞速发展,为数字信号处理增添了巨大的生命力。 数字信号处理主要是研究用数字或符号序列表示和处理信号。处理的目的可以是削弱信号中的多余内容,滤除混杂的噪声和干扰,或者是将信号变换为容易分析和识别的形式,便于估计和选择它的特征参数。例如通过分析和运算,可以估计脑电图或心电图中的某种特征参数,帮助医生查找病因和分析病情,确定合理的治疗方案;又如,信号在传输时,要受到各种干扰,包括失真、衰落和混入的背景噪声,信号处理要排除这些干扰。 声音信号是一维连续信号,而计算机只能处理离散信号。为了从离散信号还原连续信号,根据采样定理,可以确定采样频率的最小值。wav文件是一种数字声音文件格式,本课程设计基于Matlab分析了wav声音文件频谱与声音的关系。通过采集个人的一段声音进行频谱分析等处理,然后设计数字滤波器处理这个原始声音的wav文件,并比较滤波以后输出声音信号与原声音信号的异同。 1.1设计内容 (1)利用Windows下的录音机或其他软件,录制一段自己的语音信号,时间控制在1s左右,并对录制的信号进行采样。 (2)语音信号的频谱分析,画出采样后语音信号的时域波形和频谱图。 (3)将信号加入延时和混响,再分析其频谱,并与原始信号频谱进行比较。 (4)设计几种特殊类型的滤波器:单回声滤波器,多重回声滤波器,无限个回声滤波器,全通结构的混响器,并画出滤波器的频域响应。 (5)用自己设计的滤波器对采集的语音信号进行滤波。 (6)分析得到信号的频谱,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化。 (7)回放语音信号。 1.2设计要求 (1)熟悉离散信号和系统的时域特性。 (2)熟悉语音信号的特点。 (3)掌握数字信号处理的基本概念,基本理论和基本方法。 (4)掌握序列快速傅里叶变换方法。 (5)学会MATLAB的使用,掌握MATLAB的程序设计方法。 (6)掌握MATLAB设计各种数字滤波器的方法和对信号进行滤波的方法
2设计的总体方案与原理
2.1设计的总体方案图 利用Windows下的录音机或其他软件,录制一段自己的语音信号,时间控制在1s左右,并对录制的信号进行采样
语音信号的频谱分析,画出采样后语音信号的时域波形和频谱图
将信号加入延时和混响,再分析其频谱,并与原始信号频谱进行比较
设计几种特殊类型的滤波器:无限个回声滤波器,全通结构的混响器,并画出滤波器的频域响应。用自己设计的滤波器对采集的语音信号进行滤波
分析得到信号的频谱,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化
回放语音信
语音信号的延时和混响设计方案框图1 2.1.1程序流程图 用wavread从自己的电脑导入Windows下1s语音信号 画出采样后语音信号的时域波形与频谱图。N=2001,和调用fft函数快速傅里叶变换。 对采样后语音信号进行延时30,在调整采样信号的长度,两者相加,就得到混响。 无限个回声滤波器 Bz=[0,0,0,0,0,0,0,0,0,0,1]; Az=[1,0,0,0,0,0,0,0,0,0,-a]; yy1=filter(Bz,Az,x); YY1=fft(yy1,2001); 全通结构的混响器 Bz1=[a,0,0,0,0,0,0,0,0,0,1]; Az1=[1,0,0,0,0,0,0,0,0,0,a]; yy2=filter(Bz1,Az1,x); YY2=fft(yy2,2001); 单回声滤波器 a=0.5; y2=x+z*0.5; Y2=fft(y2,2001); sound(yy1,fs,bits); sound(yy2,fs,bits); sound(y2,fs,bits);
语音信号的延时和混响设计程序流程图2
2.2设计的详细原理 2.2.1混响与延时 (1)混响效果主要是用于增加音源的融合感。自然音源的延时声阵列非常密集、复杂,所以模拟混响效果的程序也复杂多变。常见参数有以下几种: 混响时间:能逼真的模拟自然混响的数码混响器上都有一套复杂的程序,其上虽然有很多技术参数可调,然而对这些技术参数的调整都不会比原有的效果更为自然,尤其是混响时间。 高频滚降:此项参数用于模拟自然混响当中,空气对高频的吸收效应,以产生较为自然的混响效果。一般高频混降的可调范围为0.1~1.0。此值较高时,混响效果也较接近自然混响;此值较低时,混响效果则较清澈。 扩散度:此项参数可调整混响声阵密度的增长速度,其可调范围为0~10,其值较高时,混响效果比较丰厚、温暖;其值较低时,混响效果则较空旷、冷僻。 预延时:自然混响声阵的建立都会延迟一段时间,预延时即为模拟次效应而设置。 声阵密度:此项参数可调整声阵的密度,其值较高时,混响效果较为温暖,但有明显的声染色;其值较低时,混响效果较深邃,切声染色也较弱。 频率调制:这是一项技术性的参数,因为电子混响的声阵密度比自然混响稀疏,为了使混响的声音比较平滑、连贯,需要对混响声阵列的延时时间进行调制。此项技术可以有效的消除延时声阵列的段裂声,可以增加混响声的柔和感。 调治深度:指上述调频电路的调治深度。 (2)延时就是将音源延迟一段时间后,再欲播放的效果处理。依其延迟时间的不同,可分别产生合唱、镶边、回音等效果。 当延迟时间在3~35ms之间时人耳感觉不到滞后音的存在,并且他与原音源叠加后,会因其相位干涉而产生"梳状滤波"效应,这就是镶边效果。如果延迟时间在50ms以上时,其延迟音就清晰可辨,此时的处理效果才是回音。回音处理一般都是用于产生简单的混响效果。 延时、合唱、镶边、回音等效果的可调参数都差不多,具体有以下几项: *延时时间(Dly),即主延时电路的延时时间调整。 *反馈增益(FB Gain),即延时反馈的增益控制。 *反馈高频比(Hi Ratio),即反馈回路上的高频衰减控制。 *调制频率(Freq),指主延时的调频周期。 *调制深度(Depth),指上述调频电路的调制深度。 *高频增益(HF),指高频均衡控制。 *预延时(Ini Dly),指主延时电路预延时时间调整。 *均衡频率(EQ F),这里的频率均衡用于音色调整,此为均衡的中点频率选择。 由于延时产生的效果都比较复杂多变,如果不是效果处理专家,建议使用设备提供的预置参数,因为这些预置参数给出的处理效果一般都比较好。 2.2.2离散傅立叶变换 在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同时使用。 函数abs(x)用于计算复向量x的幅值,函数angle(x)用于计算复向量的相角,介于 和 之间,以弧度表示。 函数unwrap(p)用于展开弧度相位角p ,当相位角绝对变化超过 时,函数把它扩展至 。 用MATLAB工具箱函数fft进行频谱分析时需注意: (1) 函数fft返回值y的数据结构对称性。 (2) 频率计算。 (3) 作FFT分析时,幅值大小与FFT选择点数有关,但不影响分析结果。 2.2.3滤波器设计 单回声滤波器的系统函数: H(z)=1+Z^(-R) <1 无限个回声滤波器的系统函数: H(z)= <1 全通结构的混响器的系统函数: H(z)= <1
函数filter 函数filter的调用格式为 y=filter(b,a,x) 该格式采用数字滤波器对数据进行滤波,既可以用于IIR滤波器,也可以用于FIR滤波器。其中向量b和a分别表示系统函数的分子、分母多项式的系数,若a=1,此时表示FIR滤波器,否则就是IIR滤波器。该函数是利用给出的向量b和a,对x中的数据进行滤波,结果放入向量y。 全通滤波器的传递函数公式如下: H(Z)=y(Z)/X(Z)=(-K+Z^(-m))/(1-K*Z^(-m)) 其中m为回声延时取样,k为反馈系数。 用直接1型表示这个传递函数则为: y(n)=k*x(n)+x(n-m)+k*y(n-m) 可见其实际上是一个简单的IIR滤波器,时间n的输出有时间n的输入和m点之前的输入与输出计算而得。由于这个IIR滤波器的频率响应为水平直线,所以被称为全通滤波器。
3设计的步骤和过程
3.1从Windows读取1s的语音信号 [x,fs,bits]=wavread('Windows Pop-up Blocked.wav',[500 2500]); %用于读取语音,采样值放在向量x中,fs表示采样频率(Hz),bits表示采样位数。[500 2500]表示读取从501点到2500点的值(若只有一个N的点则表示读取前N点的采样值)。 3.2采样后语音信号的时域波形和频谱 x=x(:,1); %我这里假设的声音是双声道,我只取单声道作分析,如果你想分析另外一个声道, n1=1:2000; N=size(x,1); figure; plot(x); title('采样后语音信号的时域波形'); Y=fft(x,2001); figure; plot(n1(1:1000),Y(1:1000)); title('采样后语音信号的频谱图'); 采样后的语音信号的频谱在1000Hz时幅度有最大的变化,在2000到3000Hz很集中,幅度相互变化不是很大,3000到5000Hz只有很小的波动了,5000Hz以后就是平稳的了。 3.3对采样后的信号延时30和混响 z=[zeros(30,1);x]; figure; plot(z); title('延时后的时域图'); Z=fft(z,2001); figure; plot(n1(1:1000),Z(1:1000)); title('延时后的频谱图 '); x=[x;zeros(30,1)]; y1=x+z; figure; plot(y1); title('混响的时域图'); Y1=fft(y1,2001); figure;