数字信号处理课程设计.docx
《数字信号处理课程设计.docx》由会员分享,可在线阅读,更多相关《数字信号处理课程设计.docx(9页珍藏版)》请在冰豆网上搜索。
![数字信号处理课程设计.docx](https://file1.bdocx.com/fileroot1/2022-11/16/bb6ea5ee-e478-4a2f-a8d4-2ab0f79a35f9/bb6ea5ee-e478-4a2f-a8d4-2ab0f79a35f91.gif)
数字信号处理课程设计
摘要
语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴学科,是目前发展最为迅速的学科之一,通过语音传递信息是人类最重要,最有效,最常用和最方便的交换信息的手段,所以对其研究就显得尤为重要。
Matlab语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以讲声音文件变成离散的数据文件,然后用其强大的矩阵运算能力处理数据。
这为本次课程设计提供了强大并良好的环境。
本设计要求自己通过手机清唱一段歌曲,并用windows自带的录音机录制下来,保存格式为.wav格式,而且要求对所录的语音进行频率均衡和加入混响效果。
从网上下载相应的歌曲伴奏,经过截取、加噪、消噪后,与混响后的清唱语音进行合成,制作成一首歌曲。
采用语音合成可帮助学生加强理解,MATLAB里面有很多应用示波器滤波,利用这些滤波器可以很容易地实现语音信号的消噪过程,利用MATLAB的声音处理函数设计一组语音合成实验,配合Windows操作系统支持的语音媒体播放器可以很方便地将经过数字处理后的语音效果直观地体现出来,对于学生深刻理解数字信号处理中抽象数学运算的现实物理意义很有帮助。
关键字:
信号处理语音合成加噪混响
一、设计目的与任务
录制各自的一段清唱歌曲语音信号,并对其进行频谱分析;然后在时域用数字信号处理的方法将信号加入延时与混响。
然后从网上下载一段该歌曲的伴奏,对伴奏进行截取、格式转换、加噪和去噪后,与伴唱歌曲进行合成,制作成一首歌曲,在分析其频谱,并与原始伴唱语音信号频谱进行比较。
通过数字信号处理的课程设计,巩固和运用数字信号处理课程中的理论知识和实践技能,掌握最基本的运用Matlab软件处理信号的理论和方法,培养发现问题,分析问题和解决问题的能力。
二、设计的基本要求
1.录制的语音清晰,分析语音信号的特点;
2.探讨语音分析、加噪、去噪、混响以及合成的基本方法;
3.写出各个步骤的Matlab的程序代码;
4.分析录制的语音信号的时域波形与频谱;分析加噪、去噪与合成前后的语音信号波形与频谱;
5.熟悉加强滤波器的设计原理和滤波的过程;
三、设计思路
图-1语音合成的方案设计方框图
整体设计思路:
将录制的语音信号进行频谱分析,并进行频率均衡和加入混响效果。
将下载的伴奏语音进行加噪和去噪处理,并对其加噪去噪后的语音信号进行频谱分析,比较处理前后的差异。
最后,把录制的伴唱语音与下载的伴奏语音合成,即制作成为一首歌曲,再对其进行时域波形和频谱进行分析,并与伴唱语音信号进行比较。
四、设计过程
4.1语音信号概述
语言是人类创造的,是人类区别于其他地球生命的本质特征之一。
人类用语言交流的过程可以看成是一个复杂的通信过程,为了获取更便于分析和处理的语音信源,必须在空气中传播的声波转变为包含语音信箱并且记载着声波物理性质的模拟(或数字)电信号,即语音信号,因此语音稀罕就成为语音的表现形式或载体。
语音学和数字信号处理的交叉结合便形成了语音信号处理。
语音信号处理是建立在语音学和数字信号处理的基础上的,对语音信号模拟进行分析处理等方面的一门综合性学科。
4.2语音信号的采集
把录制的语音信号保存为.wav文件,长度要大于三十秒,小于一分钟,并对语音信号进行采样;录制软件可以使用Windows自带的录音机,也可以使用其他专业的录音软件,录制时需要配备录音硬件(麦克风),为了减少噪音,需要在安静、无噪干扰小的环境下录制。
4.21语音信号的读入与打开
在Matlab中,用y=wavread(‘YY.wav’)命令读入原始语音文件,fs为采样频率(Hz),本课程设计中的语音信号采样频率都为fs=22050Hz。
下面是语音信号在Matlab中的语言程序,实现了语音的读入与打开,并绘制出语音信号的时域波形和信号频谱。
fs=22050;
程序:
x=wavread('YY.wav');%%%读入原始语音信号%%%
L=length(x);
Xw=fft(x,L);
n=0:
L-1;
w=0:
fs/L:
fs*(L-1)/L;
subplot(2,1,1),plot(n,x);
title('伴唱时域波形');
subplot(2,1,2),plot(w,abs(Xw));
title('伴唱信号频谱');
程序运行的结果如下图所示:
图-2语音读入与打开
4.22语音信号的延时混响
将原始伴唱的语音信号YY.wav文件,进行延时混响处理,使语音听起来带有回声,运行下面的程序生成新的带有混响效果的语音信号YYhx.wav文件。
%%%%%延时混响%%%%%%%
x=wavread('YY.wav');%读入原始声音
n=1200;%设定延迟时间t=n/fs秒,改变该数据可改变混响深度(时间间隔)
N=50;%y设定延迟级数为N级,改变该数据可改变次数
x1=[x;zeros(N*n,1)];%将x通过补零延长到经N级延时后的长度
fori=1:
N%进行N次延时,第一次延时在x前补n个0,后补(N-1)*n个0
x2=[zeros(i*n,1);x;zeros((N-i)*n,1)];%第i次延时在x前补i*n个0,后补(N-i)*n个0
x1=x1+1/(2*i)*x2;%将经延时的信号x1跟x逐次相加
end
wavwrite(x1,22050,'YYhx.wav');%将混响后的数据转换为声音
Xw=fft(x);
L=length(Xw);
w=0:
fs/L:
fs*(L-1)/L;
Xw1=fft(x1);
L1=length(Xw1);
w1=0:
fs/L1:
fs*(L1-1)/L1;
subplot(2,1,1);plot(w,abs(Xw));ylabel('YY');
subplot(2,1,2);plot(w1,abs(Xw1));ylabel('YYhx');
程序运行的结果如下图-3所示
图-3语音信号加入混响前后的频谱图
通过伴唱时域波形可以看出,频率比较集中,所以就没有进行频率均衡,直接进行了混响的添加,加入后的语音信号从频谱波形可以看出,语音进行混响后,语音有一部分的延时性,从而达到有回声的效果。
4.3伴奏的采集
从网上下载伴唱歌曲的伴奏.mp3文件,然后再酷狗音乐软件上,将其演唱的部分的伴奏截取下来,转换格式为.wav文件。
由于网络上下载的采样频率为44100Hz的,而录音的频率为22050Hz,因此,这两种采样频率的语音信号不能有叠加合成,需要将44100Hz的伴奏通过格式工厂格式转换软件,将其采样频率转换为22050Hz。
将截取转换后的文件命名为YY0.wav文件。
4.31伴奏的加噪
由于伴奏中要含有3种单一频率噪声,3种噪声频率的频差不大于3kHz不小于2kHz,且落在音频范围内。
因此需要先给伴奏加上三种频率的噪声,其给伴奏加噪的程序如下:
%%%%%%在语音中加噪声%%%%%%%
x1=wavread('YY0.wav');%读取原语音信号,lei1中无噪声.
fs=22050;%原语音信的采样率为22050Hz
fn1=1000;
fn2=3500;
fn3=6000;
t=1:
length(x1);%设置噪声的度度跟原语音信一样长,
x21=0.4*sin(2*pi*fn1/fs*t);
x22=0.4*sin(2*pi*fn2/fs*t);
x23=0.4*sin(2*pi*fn3/fs*t);
%产生幅度为2频率为fn的正弦波作为噪声.
x=x1+x21'+x22'+x23';
%将原子核语音信号跟噪声相加,x为带有噪声的语音信号.
wavwrite(x,22050,'YY0jz.wav');%将带有噪声的语音信号转换为声音,lei2中将有噪声
Xw=fft(x);
L=length(Xw);
w=0:
fs/L:
fs*(L-1)/L;
Xw1=fft(x1);
L1=length(Xw1);
w1=0:
fs/L1:
fs*(L1-1)/L1;
subplot(2,1,1);plot(w1,abs(Xw1));ylabel('YY0');
subplot(2,1,2);plot(w,abs(Xw));ylabel('YY0jz');
加噪后生成新的伴奏语音,命名为YY0jz.wav文件。
程序运行的结果如下图所示:
图-5伴奏加噪前后的波形图
有程序和波形图可知:
加入的三种噪声的频率分别为1000Hz、3500Hz、6000Hz。
由于噪声的幅度非常大,所以看到加噪后的波形图里三个噪声非常明显,听YY0jz.wav文件时,听到非常尖锐的噪声。
4.32带通滤波器的设计及消噪
由于三种频率的噪声分别为1000Hz、3500Hz、6000Hz,所以要设计三个带通滤波器,连续滤掉这三个噪声。
三个滤波器的设置参数分别为:
Bndstop,FIR,Equiripple,Minimumorder,Fs=22050,Fpass1=950,Fstop1=980,Fstop2=1020,Fpass2=1050,Apass1=1,Astop=60,Apass2=1。
滤波后生成的无噪声伴奏YY0qa,wav文件,其消噪程序如下:
%%%%%%消除语音中的噪声%%%%%%%
x1=wavread('YY0jz.wav');%读取原语音信号,lei2中带有噪声.
x=y2;
y=filter(hn1,1,x);%将带有噪声的语音信号x经过带阻滤波器进行滤波,以达到消噪目的.
y1=filter(hn2,1,y);
y2=filter(hn3,1,y1);
%Bndstop,FIR,Equiripple,Minimumorder,Fs=22050,Fpass1=950,Fstop1=980,Fstop2=1020,Fpass2=1050,Apass1=1,Astop=60,Apass2=1
wavwrite(y2,22050,'YY0qz.wav');%将经带阻滤波消噪后的信号转换为语音,lei3中将不再有噪声
Xw=fft(x);
L=length(Xw);
w=0:
fs/L:
fs*(L-1)/L;
Xw1=fft(x1);
L1=length(Xw1);
w1=0:
fs/L1:
fs*(L1-1)/L1;
subplot(2,1,1);plot(w1,abs(Xw1));ylabel('YY0jz');
subplot(2,1,2);plot(w,abs(Xw));ylabel('YY0qz');
程序运行后的结果如下图所示:
图-6伴奏去噪前后的波形图
去掉噪声后,伴奏恢复到了原来的频率。
通过对伴奏的加噪、去噪,熟悉如何设计滤波器来去掉语音中的噪声。
4.4语音的合成
语音合成就是将两种采样频率相同的语音在时域进行混合,利用Matlab软件对两个语音信号混合达到制作一个新的语音信号,合成后的语音信号中既有伴唱也有伴唱,即形成一首有伴奏伴唱的歌曲。
本次课程设计的任务就是伴唱和伴奏两个语音信号合成一个,制作成一首歌曲,其合成程序如下所示:
%%%%%将两首语音合成一首%%%%%%
m1=wavread('YY0qz.wav');%读取一首语音m1
m2=wavread('YYhx.wav');%读取另一首语音m2
iflength(m1)>length(m2)%比较两首语音的长度,将短的补成跟长的相等
m3=[m2;zeros((length(m1)-length(m2)),1)];
else
m3=[m1;zeros((length(m2)-length(m1)),1)];
end
m=1.0*m2+m3;%将两个语音相加,