语音信号延迟.docx
- 文档编号:17663354
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:20
- 大小:24.01KB
语音信号延迟.docx
《语音信号延迟.docx》由会员分享,可在线阅读,更多相关《语音信号延迟.docx(20页珍藏版)》请在冰点文库上搜索。
语音信号延迟
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),即主延时电路的延时时间调整。
*反馈增益(FBGain),即延时反馈的增益控制。
*反馈高频比(HiRatio),即反馈回路上的高频衰减控制。
*调制频率(Freq),指主延时的调频周期。
*调制深度(Depth),指上述调频电路的调制深度。
*高频增益(HF),指高频均衡控制。
*预延时(IniDly),指主延时电路预延时时间调整。
*均衡频率(EQF),这里的频率均衡用于音色调整,此为均衡的中点频率选择。
由于延时产生的效果都比较复杂多变,如果不是效果处理专家,建议使用设备提供的预置参数,因为这些预置参数给出的处理效果一般都比较好。
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('WindowsPop-upBlocked.wav',[5002500]);%用于读取语音,采样值放在向量x中,fs表示采样频率(Hz),bits表示采样位数。
[5002500]表示读取从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;
plot(n1(1:
1000),Y1(1:
1000));
title('混响的频谱图');
延时:
很容看从时域图出延时是让原来的波形向右移动30Hz。
从频谱图看在刚开始延时前曲线往上,延时后曲线往下,大概在1000Hz左右幅度有变化,2000到3000Hz两者的幅度变化是相反的。
原来的信号只有在3000到6000Hz有波动,以后没有了,而延时一直有。
混响:
在时域图看出来在前30Hz没有变化,混响之后幅度都变化了并且在频率有了延长了。
在频谱图中在刚开始延时前曲线往上,混响后的有跳动、下降、上升。
也在1000Hz幅度有变化,混响大概在2000Hz很密集,而混响前的很稀疏。
相反在大概3000Hz混响的很稀疏,混响前的很密集。
原来的信号只有在3000到6000Hz有波动,以后没有了,而混响一直有。
3.4单回声滤波器
sound(y,fs,bits);用于对声音的回放。
向量y则就代表了一个信号(也即一个复杂的“函数表达式”)也就是说可以像处理一个信号表达式一样处理这个声音信号。
a=0.5;
y2=x+z*0.5;
figure;
plot(y2);
title('单回声滤时域图');
Y2=fft(y2,2001);
figure;
plot(n1(1:
1000),Y2(1:
1000));
title('单回声滤波器频谱图');
sound(y2,fs,bits);
时域上形状大致相同,幅度有微小变化。
频谱上滤波前在开始先上跳变,再下降,在上升。
而滤波后先上跳变,后面的下降和上升波动很大,滤波前的密集的长度比滤波后的短,在5000Hz以后滤波前的信号有规律的波动,滤波后的没有直线一条。
3.5无限个回声滤波器
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);
figure;
plot(yy1);
title('无限个回声滤波器时域波形');
YY1=fft(yy1,2001);
figure;
plot(n1(1:
1000),YY1(1:
1000));
title('无限个回声滤波器频谱图');
sound(yy1,fs,bits);
时域上滤波前的幅度比滤波后的数值大,形状大体相似,在1800以后滤波前有较小的波动,滤波后只有一次的波动。
在频谱上在1000Hz以后幅度的变化趋势是相反的,滤波前的幅度大体上比滤波后的高,在5000Hz以后滤波前的波动比滤波后大。
3.6全通结构的混响器
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);
figure;
plot(yy2);
title('全通应的时域图')
YY2=fft(yy2,2001);
figure;
plot(n1(1:
1000),YY2(1:
1000));
title('全通应的频谱图')
sound(yy2,fs,bits);
时域上形状大致一样,滤波前的幅度比滤波后大,2000Hz左右滤波波动较小,滤波后的波动相比较大。
在频谱上滤波后有一条负值幅度很大的直线,其它的幅度都比滤波前的小,并且紧密的地方不同。
在5000Hz滤波前的有规律的变化,滤波后的是平稳的直线。
3.7设计滤波器的其他方法
(1)无限个回声滤波器
yy=zeros(size(x));
n=[11:
size(x)];
r=30;
fori=31:
size(x,1)
yy(i)=x(i-r)+a*yy(i-r);
end
YY=fft(yy,2001);
figure;
plot(n1(1:
1000),YY(1:
1000));
(2)全通结构的混响器
yz=zeros(size(x));
fori=31:
size(x,1)
yz(i)=a*x(i)+x(i-r)-a*yz(i-r);
end
YZ=fft(yz,2001);
figure;
plot(n1(1:
1000),YZ(1:
1000));
结论:
最后得到的图形与上一种方法所得的是一样。
4实习心得:
通过2周的课程设计对数字电子技术有了更进一步的熟悉,实际操作和课本上的知识有很大联系,但又高于课本,一个看似很简单的电路,要动手把它设计出来就比较困难了,因为是设计要求我们在以后的学习中注意这一点,要把课本上所学到的知识和实际联系起来,同时通过本次电路的设计,不但巩固了所学知识,也使我们把理论与实践从真正意义上结合起来,增强了学习的兴趣,考验了我们借助互联网络搜集、查阅相关文献资料,和组织材料的综合能力。
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程,通过课程设计我们能够比较系统的了解理论知识,把理论和实践相结合,并且用到生活当中。
在做设计的过程中总会出现各种问题,在这种情况下我们都会努力寻求最佳路径解决问题,无形间提高了我们的动手,动脑能力,并且同学之间还能相互探讨问题,研究解决方案,增进大家的团队意识。
通过课程设计让我知道了,我们平时所学的知识如果不加以实践的话等于纸上谈兵。
课程设计主要是我们理论知识的延伸,它的目的主要是要在设计中发现问题,并且自己要能找到解决问题的方案,形成一种独立的意识。
我们还能从设计中检验我们所学的理论知识到底有多少,巩固我们已经学会的,不断学习我们所遗漏的新知识,把这门课学的扎实。
在此我要感谢老师对我们的指导,没有你的指导,我们也不可能在这么短的时间内做完这个设计,也感谢学校给我们这样一个实习的机会。
参考文献
[1]程佩青.数字信号处理教程[M].北京:
清华大学出版社,2002.
[2]刘敏、魏玲.Matlab通信仿真与应用[M].北京:
国防工业出版社,2001.
[3]高西全、丁玉美、阔永红.数字信号处理---原理、实现及应用[M].北京:
电子工业出版社,2006.
[4]张延华、姚林泉、郭玮.数字信号处理---基础与应用[M].北京:
机械工业出版社,2005.
[5]王宏.MATLAB6.5及其在信号处理中的应用[M].北京:
清华大学出版社,2004.
[6]丁玉美、高西全.数字信号处理[M].西安:
西安电子科技大学出版社,1994..
附录AMATLAB程序代码
[x,fs,bits]=wavread('WindowsPop-upBlocked.wav',[5002500]);
x=x(:
1);
N=size(x,1);
figure;
plot(x);
title('采样后语音信号的时域波形');
Y=fft(x,2001);
figure;
plot(n1(1:
1000),Y(1:
1000));;
title('采样后语音信号的频谱图');
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;
plot(n1(1:
1000),Y1(1:
1000));
title('混响的频谱图');
a=0.5;
y2=x+z*0.5;
figure;
plot(y2);
title('单回声滤时域图');
Y2=fft(y2,2001);
figure;
plot(n1(1:
1000),Y2(1:
1000));
title('单回声滤波器频谱图');
sound(y2,fs,bits);
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);
figure;
plot(yy1);
title('无限个回声滤波器时域波形');
YY1=fft(yy1,2001);
figure;
plot(n1(1:
1000),YY1(1:
1000));
title('无限个回声滤波器频谱图');
sound(yy1,fs,bits);
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);
figure;
plot(yy2);
title('全通应的时域图')
YY2=fft(yy2,2001);
figure;
plot(n1(1:
1000),YY2(1:
1000));
title('全通应的频谱图')
sound(yy2,fs,bits);
yy=zeros(size(x));
n=[11:
size(x)];
r=30;
fori=31:
size(x,1)
yy(i)=x(i-r)+a*yy(i-r);
end
YY=fft(yy,2001);
figure;
plot(n1(1:
1000),YY(1:
1000));
yz=zeros(size(x));
fori=31:
size(x,1)
yz(i)=a*x(i)+x(i-r)-a*yz(i-r);
end
YZ=fft(yz,2001);
figure;
plot(n1(1:
1000),YZ(1:
1000));
附录B信号处理工具箱函数
MATLAB包含了进行信号处理的许多工具箱函数,有关这些工具箱函数的使用可通过Help命令得到。
为使用方便,在这里将给出几个常用到的函数的使用说明。
函数形式
函数功能
关于函数参数的说明
X=sawtooth(t,width)
产生锯齿波或三角波。
width用于确定最大值的位置,即从0到2*width函数从-1上升到+1。
X=square(t,duty)
产生方波
Duty用于指定正半周期的比例
Y=abs(x)
求绝对值
当x为复数时,得到的是复数模(幅值),若x为字符串,得到的是各个字符的ASCII码。
C=conv(a,b)
求卷积
求取矢量a和b的卷积,c的长度为a和b的长度和减去1。
[h,w]=freqs(b,a,n)
模拟滤波器的频率响应
.b,a为滤波器的冲击响应s变换的分子和分母多项式的系数,在n个频率点计算频率响应
[h,f]=freqz(b,a,n,Fs)
数字滤波器的频率响应。
Fs为采样频率,b,a为滤波器的冲击响应的Z变换的分子和分母多项式的系数,该函数的作用是在0~Fs/2频率范围内选取n个点(记在f中),并计算相应的频率响应。
[h,t]=impz(b,a,n)
数字滤波器的冲击响应
b,a为滤波器的冲击响应s变换的分子和分母多项式的系数,计算出冲击响应h,取样点树为n.
[n,Wn]=buttord(
Wp,Ws,Rp,Rs,’s’)
Butterworth滤波器阶的选择。
Wp和Ws分别为通带和阻带的截止频率,皆大于0小于1。
Rp和Rs分别是通带和阻带的波纹系数,’s’表示模拟域,也可不加‘s’,则为数字域。
[b,a]=butter(n,Wn,’ftype’,’s’)
Butterworth模拟和数字滤波器设计。
设计阶数为n,截止频率为Wn的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语音 信号 延迟