数字信号处理课程设计报告
题目3
运用matlab 的数字音效处理系统设计
系 (院): 电子信息工程学院
专 业: 通信工程班 级: 13通信
学 号:xxx
姓 名:xxx
2015年12月19日
一、摘要
数字信号处理(Digital Signal Processing)技术,从20世纪60年代以来,随着计算机科学和信息科学发展,数字处理技术应运而生并得以快速发展。 语言是人们进行信息沟通的主要方式之一,它具有直接、自然、方便等优点。语音则是语言的物理层表达方式。语音处理主要是对语音进行机器处理,以达到传输、自动识别、机器理解等目的。进行了语音处理过程的滤波、采样、傅立叶变换和谱包络提取的算法实现研究,讨论了在算法的DSP 实现方法,
Matlab 语言是一种广泛应用于工程计算及数值分析领域的新型高级语言, Matlab 功能强大、简单易学、编程效率高。特别是Matlab 还具有信号分析工具箱, 不需具备很强的编程能力, 就可以很方便地进行信号分析、处理和设计.
数字信号处理主要是研究用数字或符号序列表示和处理信号。处理的目的可以是削弱信号中的多余内容,滤除混杂的噪声和干扰,或者是将信号变换为容易分析和识别的形式,便于估计和选择它的特征参数。
声音信号是一维连续信号, 而计算机只能处理离散信号。为了从离散信号还原连续信号, 根据采样定理, 可以确定采样频率的最小值。wav 文件是一种数字声音文件格式, 本课程设计基于Matlab 分析了wav 声音文件频谱与声音的关系。通过采集个人的一段声音进行频谱分析等处理,然后设计数字滤波器处理这个原始声音的wav 文件, 并比较滤波以后输出声音信号与原声音信号的异同。
基于MATLAB 的语音信号特技处理, 其实质是针对于不同的滤波器性能的分析与比较。对于滤波器的设计可以使用MATLAB 中自带的工具, 也可以通过编程或直接利用MATLAB 中的函数库来实现。
二、课程设计题目描述和要求
2.1设计内容
1、录制采集一段自己的语音信号;
2、设计滤波器,实现单回声、多回声、混响效果和和声效果;
2.2设计要求
1、熟悉离散信号和系统的时域特性。
2、熟悉语音信号的特点。
3、掌握数字信号处理的基本概念,基本理论和基本方法。
4、掌握序列快速傅里叶变换方法。
5、学会MATLAB 的使用,掌握MATLAB 的程序设计方法。
6、掌握MATLAB 设计各种数字滤波器的方法和对信号进行滤波的方法。
三、课程设计报告内容
3.1项目功能设计
3.2回声
(1)原理简述
回声是我们在日常生活中常会遇到一种声音信号,回声就是原声经过物体反射回来后与原声叠加后形成的效应。当回声的距离小于一定距离时,回声不能被人耳感知,变现为原声的加强;当回声距离大于一定距离时,回声能被人耳感知,能够感觉到在原声停止后一段时间后,再次听到此声音,并且响度相对减小。简单来说,就是延迟、衰减、叠加。
(2)实现步骤
回声是原声延迟衰减后与原声叠加。声音信号在matlab 中以矩阵的形式存储。一般是
N 行2列的矩阵(这里指双声道声音),N 是声音的点数长度。为了做到延迟效应,我们在原矩阵x 的前面加上(接上)一段m 行2列的为零矩阵,得到矩阵x1,这样如果将矩阵x,x1从同一起点观看,那么矩阵x1相当于时间x 延时了一段时间。延时的时间与添加的零矩阵的长度以及采样频率有关。
那么只要将x 与x1相叠加,就可以得到回声效果。这里要注意,由于矩阵相加时要满足矩阵形式相同,所以还要在原来的x 后面也接上一段m 行2列的为零矩阵,同时为了回声效果的逼真性,还要给x1倍乘一个小于1的系数。
实现流程图如下:
矩阵运算流程如下:
(3) 效果实现
输出的声音人耳听起来有明显的回声效果。
(4)应用实践
利用数字信号处理得到的回声可以在需要的情况下模拟回声效果,以适应需求。
(5)实现过程
声音信号x[n]的产生
1、制作一段wav 格式的音频,然后把它存放到对应程序段所在的磁盘中,用MATLAB 函数wavread()将其提取出来绘制其时域波形对此音频信号用FFT 作谱分析,用plot()函数绘制其图形。
信号采集程序如下:
%声音信号的提取
[x,fs]=wavread('luyin.wav'); %把语音信号进行加载入Matlab 仿真软件平台台中 wavplay(x,fs);% 回放语音信号。或者sound(x,fs)
figure(1);
N=length(x);%求语音信号的长度
subplot(3,1,1);
plot(x(1:N));
title('原始信号波形');
y=fft(x,N);%傅立叶变换
subplot(3,1,2);
plot(abs(y));
title('原始信号幅值');
subplot(3,1,3);
plot(angle(y));
title('原始信号相位');
2产生的原始信号的波形,以及其幅度、相位谱如下所示:
单回声信号y[n]的产生
1.参数的设置:
因为人耳能分辨出的声音延迟至少是0.1s ,因此,最小延迟量不能小于0.1s 。在此先先延迟时间为0.2s, 即最小延迟量N=0.2*fs=0.2*16000=3200。
在已有声音信号x 的基础上产生带回声的声音信号,可以表达为在于娜信号的基础上叠加其延时的分量。假设只有一个回声的情况下,可简化其模型为
y(n)=x(n)+ax(n-N)
A 为反射系数;N 为延迟时间。
这里设N=3200 a=0.4
2.利用矩阵置零产生x 的延迟,以及得到y 信号:
为了保证图像的完整性,对读取的信号先延长4000个采样点,将原始信号延长3200个采样点,然后再在后面补上800个点,得到如下代码:
%回波的产生
[x,fs]=wavread('luyin.wav');%把语音信号进行加载入Matlab 仿真软件平台中。 N=length(x);%语音信号的长度。
x1=x(1:N);
x2=x(1:N);
x1=[x1,zeros(1,4000)];%zeros(1,4000)产生1行3000列全零矩阵加到x1后面。
x2=[zeros(1,3200),0.4*x2,zeros(1,800)];%N+3200+x=N+4000,得x=800 y=x1+x2;%加入回音的信号。
figure(2);
subplot(3,1,1);
plot(y(1:3200.+N));
title('含单回声信号波形');
y1=fft(y);
subplot(3,1,2);
plot(abs(y1));
title('含单回声信号幅值');
subplot(3,1,3);
plot(angle(y1));
title('含单回声信号相位');
sound(y,fs);
波形图如下
双回声信号的产生
代码分析
M = 4001;
fs = 8000;
[B,A] = cheby2(4,20,[0.1 0.7]);
Hd = dfilt.df2t([zeros(1,6) B],A);
H = filter(Hd,log(0.99*rand(1,M)+0.01).*sign(randn(1,M)).*exp(-0.002*(1:M)));
H = H/norm(H)*4; % Room Impulse Response
hfile = 'All You Had To Do Was Stay.wav';
% Read the data back into MATLAB, and listen to audio.
[x, fs, nbits, readinfo] = wavread(hfile);
x = x(1:length(x));
dhat = filter(H,1,x);
figure(3);
subplot(3,1,1);
plot(dhat);
title('含双回声信号波形');
y1=fft(dhat);
subplot(3,1,2);
plot(abs(y1)+1);
title('含双回声信号幅值');
subplot(3,1,3);
plot(angle(y1));
title('含双回声信号相位');
set(gcf, 'Color', [1 1 1])
sound(dhat, fs);
波形图如下
四、总结与展望
7.1 项目总结
此次项目的顺利圆满完成,离不开项目小组各位成员的团结协作与刻苦攻关,也离不开老师们的帮助与指导。在这七周的时间里,我们从一开始的查找资料,到项目的设计,再到实施、调试、改进,每一个阶段,都包含了我们每个人的辛劳与汗水。在项目实施的过程中,我们每个人的能力都得到了极大的锻炼,不学到了许多与数字信号处理相关的知识,更是一种学习能力的提升,同时也是自学能力的培养。
通过这次的项目的,我们数字信号处理有了更深刻的理解,对在矩阵运算的层面上的数字信号处理有了一定的认识与掌握。为将来更深入的学习数字信号处理打了的基础。
7.2 项目展望
此次数字信号处理的对项目虽然已经完成,但是我们所完成的项目毕竟是很小的成果,将来还有很多东西要学习。
我们在将来的学习与工作中要把我们完成的这些效果的原理运用于实践。例如我们的“自适应语音分割、倒序”效果,在自适应语音分割技术的基础上,我们可以做语音提取、语音识别、语音控制等。
学习的过程永远不是一蹴而就的,我们要牢牢把握现在,放眼未来,打好基础,才能在未来的道路上走的更远。
参考文献
[1] 周良权, 方向乔. 《数字电子技术基础》. 北京:高等教育出版社,2002.12.
[2] 吕国泰, 吴项. 《电子技术》. 北京:高等教育出版社,2001.5.
[3] 陈明义. 《电子技术课程设计使用教程》. 中南大学出版社,2002.6.(1).
[4] 《程控交换实验指导书》. 钟山学院内部资料.
[5] 刘爱霞. 《语音编程. 远程控制试验板》. 中国. 深圳.51测试网.
[6] 奥法尼德斯. 《信号处理导论》. 清华大学出版社,1999.1.
[7] 《信号与系统分析及MATLAB 实现》. 电子工业出版社,梁红等.
[8] 陈怀琛.MATLAB 及其在理工课程中的应用指南[M].西安电子科技大学出 社,2000.
附录1任务分配
附录2
[x,fs]=wavread('All You Had To Do Was Stay.wav');%把语音信号进行加载入Matlab 仿真软件平台台中
sound(x,fs);%回放语音信号。或者sound(x,fs)
figure(1);
N=length(x);%求语音信号的长度
subplot(3,1,1);
plot(x(1:N));
title('原始信号波形');
y=fft(x,N);%傅立叶变换
subplot(3,1,2);
plot(abs(y));
title('原始信号幅值');
subplot(3,1,3);
plot(angle(y));
title('原始信号相位');
pause(length(x)/fs);
[x,fs]=wavread('All You Had To Do Was Stay.wav');%把语音信号进行加载入Matlab 仿真软件台 N=length(x);%语音信号的长度。
x1=x(1:N);
x2=x(1:N);
x1=[x1,zeros(1,4000)];%zeros(1,4000)产生1行4000列全零矩阵加到x1后面
x2=[zeros(1,3200),0.4*x2,zeros(1,800)];%N+3200+x=N+4000,得x=800
y=x1+x2;%加入单回音的信号。
figure(2);
subplot(3,1,1);
plot(y(1:3200.+N));
title('含单回声信号波形');
z1=fft(y);
subplot(3,1,2);
plot(abs(z1));
title('含单回声信号幅值');
subplot(3,1,3);
plot(angle(z1));
title('含单回声信号相位');
sound(y,fs);
pause(length(y)/fs);
M = 4001;
fs = 8000;
[B,A] = cheby2(4,20,[0.1 0.7]);
Hd = dfilt.df2t([zeros(1,6) B],A);
H = filter(Hd,log(0.99*rand(1,M)+0.01).*sign(randn(1,M)).*exp(-0.002*(1:M))); H = H/norm(H)*4; % Room Impulse Response
hfile = 'All You Had To Do Was Stay.wav';
% Read the data back into MATLAB, and listen to audio.
[x, fs, nbits, readinfo] = wavread(hfile);
x = x(1:length(x));
dhat = filter(H,1,x);
figure(3);
subplot(3,1,1);
plot(dhat);
title('含双回声信号波形');
y1=fft(dhat);
subplot(3,1,2);
plot(abs(y1)+1);
title('含双回声信号幅值');
subplot(3,1,3);
plot(angle(y1));
title('含双回声信号相位');
set(gcf, 'Color', [1 1 1])
sound(dhat, fs);
数字信号处理课程设计报告
题目3
运用matlab 的数字音效处理系统设计
系 (院): 电子信息工程学院
专 业: 通信工程班 级: 13通信
学 号:xxx
姓 名:xxx
2015年12月19日
一、摘要
数字信号处理(Digital Signal Processing)技术,从20世纪60年代以来,随着计算机科学和信息科学发展,数字处理技术应运而生并得以快速发展。 语言是人们进行信息沟通的主要方式之一,它具有直接、自然、方便等优点。语音则是语言的物理层表达方式。语音处理主要是对语音进行机器处理,以达到传输、自动识别、机器理解等目的。进行了语音处理过程的滤波、采样、傅立叶变换和谱包络提取的算法实现研究,讨论了在算法的DSP 实现方法,
Matlab 语言是一种广泛应用于工程计算及数值分析领域的新型高级语言, Matlab 功能强大、简单易学、编程效率高。特别是Matlab 还具有信号分析工具箱, 不需具备很强的编程能力, 就可以很方便地进行信号分析、处理和设计.
数字信号处理主要是研究用数字或符号序列表示和处理信号。处理的目的可以是削弱信号中的多余内容,滤除混杂的噪声和干扰,或者是将信号变换为容易分析和识别的形式,便于估计和选择它的特征参数。
声音信号是一维连续信号, 而计算机只能处理离散信号。为了从离散信号还原连续信号, 根据采样定理, 可以确定采样频率的最小值。wav 文件是一种数字声音文件格式, 本课程设计基于Matlab 分析了wav 声音文件频谱与声音的关系。通过采集个人的一段声音进行频谱分析等处理,然后设计数字滤波器处理这个原始声音的wav 文件, 并比较滤波以后输出声音信号与原声音信号的异同。
基于MATLAB 的语音信号特技处理, 其实质是针对于不同的滤波器性能的分析与比较。对于滤波器的设计可以使用MATLAB 中自带的工具, 也可以通过编程或直接利用MATLAB 中的函数库来实现。
二、课程设计题目描述和要求
2.1设计内容
1、录制采集一段自己的语音信号;
2、设计滤波器,实现单回声、多回声、混响效果和和声效果;
2.2设计要求
1、熟悉离散信号和系统的时域特性。
2、熟悉语音信号的特点。
3、掌握数字信号处理的基本概念,基本理论和基本方法。
4、掌握序列快速傅里叶变换方法。
5、学会MATLAB 的使用,掌握MATLAB 的程序设计方法。
6、掌握MATLAB 设计各种数字滤波器的方法和对信号进行滤波的方法。
三、课程设计报告内容
3.1项目功能设计
3.2回声
(1)原理简述
回声是我们在日常生活中常会遇到一种声音信号,回声就是原声经过物体反射回来后与原声叠加后形成的效应。当回声的距离小于一定距离时,回声不能被人耳感知,变现为原声的加强;当回声距离大于一定距离时,回声能被人耳感知,能够感觉到在原声停止后一段时间后,再次听到此声音,并且响度相对减小。简单来说,就是延迟、衰减、叠加。
(2)实现步骤
回声是原声延迟衰减后与原声叠加。声音信号在matlab 中以矩阵的形式存储。一般是
N 行2列的矩阵(这里指双声道声音),N 是声音的点数长度。为了做到延迟效应,我们在原矩阵x 的前面加上(接上)一段m 行2列的为零矩阵,得到矩阵x1,这样如果将矩阵x,x1从同一起点观看,那么矩阵x1相当于时间x 延时了一段时间。延时的时间与添加的零矩阵的长度以及采样频率有关。
那么只要将x 与x1相叠加,就可以得到回声效果。这里要注意,由于矩阵相加时要满足矩阵形式相同,所以还要在原来的x 后面也接上一段m 行2列的为零矩阵,同时为了回声效果的逼真性,还要给x1倍乘一个小于1的系数。
实现流程图如下:
矩阵运算流程如下:
(3) 效果实现
输出的声音人耳听起来有明显的回声效果。
(4)应用实践
利用数字信号处理得到的回声可以在需要的情况下模拟回声效果,以适应需求。
(5)实现过程
声音信号x[n]的产生
1、制作一段wav 格式的音频,然后把它存放到对应程序段所在的磁盘中,用MATLAB 函数wavread()将其提取出来绘制其时域波形对此音频信号用FFT 作谱分析,用plot()函数绘制其图形。
信号采集程序如下:
%声音信号的提取
[x,fs]=wavread('luyin.wav'); %把语音信号进行加载入Matlab 仿真软件平台台中 wavplay(x,fs);% 回放语音信号。或者sound(x,fs)
figure(1);
N=length(x);%求语音信号的长度
subplot(3,1,1);
plot(x(1:N));
title('原始信号波形');
y=fft(x,N);%傅立叶变换
subplot(3,1,2);
plot(abs(y));
title('原始信号幅值');
subplot(3,1,3);
plot(angle(y));
title('原始信号相位');
2产生的原始信号的波形,以及其幅度、相位谱如下所示:
单回声信号y[n]的产生
1.参数的设置:
因为人耳能分辨出的声音延迟至少是0.1s ,因此,最小延迟量不能小于0.1s 。在此先先延迟时间为0.2s, 即最小延迟量N=0.2*fs=0.2*16000=3200。
在已有声音信号x 的基础上产生带回声的声音信号,可以表达为在于娜信号的基础上叠加其延时的分量。假设只有一个回声的情况下,可简化其模型为
y(n)=x(n)+ax(n-N)
A 为反射系数;N 为延迟时间。
这里设N=3200 a=0.4
2.利用矩阵置零产生x 的延迟,以及得到y 信号:
为了保证图像的完整性,对读取的信号先延长4000个采样点,将原始信号延长3200个采样点,然后再在后面补上800个点,得到如下代码:
%回波的产生
[x,fs]=wavread('luyin.wav');%把语音信号进行加载入Matlab 仿真软件平台中。 N=length(x);%语音信号的长度。
x1=x(1:N);
x2=x(1:N);
x1=[x1,zeros(1,4000)];%zeros(1,4000)产生1行3000列全零矩阵加到x1后面。
x2=[zeros(1,3200),0.4*x2,zeros(1,800)];%N+3200+x=N+4000,得x=800 y=x1+x2;%加入回音的信号。
figure(2);
subplot(3,1,1);
plot(y(1:3200.+N));
title('含单回声信号波形');
y1=fft(y);
subplot(3,1,2);
plot(abs(y1));
title('含单回声信号幅值');
subplot(3,1,3);
plot(angle(y1));
title('含单回声信号相位');
sound(y,fs);
波形图如下
双回声信号的产生
代码分析
M = 4001;
fs = 8000;
[B,A] = cheby2(4,20,[0.1 0.7]);
Hd = dfilt.df2t([zeros(1,6) B],A);
H = filter(Hd,log(0.99*rand(1,M)+0.01).*sign(randn(1,M)).*exp(-0.002*(1:M)));
H = H/norm(H)*4; % Room Impulse Response
hfile = 'All You Had To Do Was Stay.wav';
% Read the data back into MATLAB, and listen to audio.
[x, fs, nbits, readinfo] = wavread(hfile);
x = x(1:length(x));
dhat = filter(H,1,x);
figure(3);
subplot(3,1,1);
plot(dhat);
title('含双回声信号波形');
y1=fft(dhat);
subplot(3,1,2);
plot(abs(y1)+1);
title('含双回声信号幅值');
subplot(3,1,3);
plot(angle(y1));
title('含双回声信号相位');
set(gcf, 'Color', [1 1 1])
sound(dhat, fs);
波形图如下
四、总结与展望
7.1 项目总结
此次项目的顺利圆满完成,离不开项目小组各位成员的团结协作与刻苦攻关,也离不开老师们的帮助与指导。在这七周的时间里,我们从一开始的查找资料,到项目的设计,再到实施、调试、改进,每一个阶段,都包含了我们每个人的辛劳与汗水。在项目实施的过程中,我们每个人的能力都得到了极大的锻炼,不学到了许多与数字信号处理相关的知识,更是一种学习能力的提升,同时也是自学能力的培养。
通过这次的项目的,我们数字信号处理有了更深刻的理解,对在矩阵运算的层面上的数字信号处理有了一定的认识与掌握。为将来更深入的学习数字信号处理打了的基础。
7.2 项目展望
此次数字信号处理的对项目虽然已经完成,但是我们所完成的项目毕竟是很小的成果,将来还有很多东西要学习。
我们在将来的学习与工作中要把我们完成的这些效果的原理运用于实践。例如我们的“自适应语音分割、倒序”效果,在自适应语音分割技术的基础上,我们可以做语音提取、语音识别、语音控制等。
学习的过程永远不是一蹴而就的,我们要牢牢把握现在,放眼未来,打好基础,才能在未来的道路上走的更远。
参考文献
[1] 周良权, 方向乔. 《数字电子技术基础》. 北京:高等教育出版社,2002.12.
[2] 吕国泰, 吴项. 《电子技术》. 北京:高等教育出版社,2001.5.
[3] 陈明义. 《电子技术课程设计使用教程》. 中南大学出版社,2002.6.(1).
[4] 《程控交换实验指导书》. 钟山学院内部资料.
[5] 刘爱霞. 《语音编程. 远程控制试验板》. 中国. 深圳.51测试网.
[6] 奥法尼德斯. 《信号处理导论》. 清华大学出版社,1999.1.
[7] 《信号与系统分析及MATLAB 实现》. 电子工业出版社,梁红等.
[8] 陈怀琛.MATLAB 及其在理工课程中的应用指南[M].西安电子科技大学出 社,2000.
附录1任务分配
附录2
[x,fs]=wavread('All You Had To Do Was Stay.wav');%把语音信号进行加载入Matlab 仿真软件平台台中
sound(x,fs);%回放语音信号。或者sound(x,fs)
figure(1);
N=length(x);%求语音信号的长度
subplot(3,1,1);
plot(x(1:N));
title('原始信号波形');
y=fft(x,N);%傅立叶变换
subplot(3,1,2);
plot(abs(y));
title('原始信号幅值');
subplot(3,1,3);
plot(angle(y));
title('原始信号相位');
pause(length(x)/fs);
[x,fs]=wavread('All You Had To Do Was Stay.wav');%把语音信号进行加载入Matlab 仿真软件台 N=length(x);%语音信号的长度。
x1=x(1:N);
x2=x(1:N);
x1=[x1,zeros(1,4000)];%zeros(1,4000)产生1行4000列全零矩阵加到x1后面
x2=[zeros(1,3200),0.4*x2,zeros(1,800)];%N+3200+x=N+4000,得x=800
y=x1+x2;%加入单回音的信号。
figure(2);
subplot(3,1,1);
plot(y(1:3200.+N));
title('含单回声信号波形');
z1=fft(y);
subplot(3,1,2);
plot(abs(z1));
title('含单回声信号幅值');
subplot(3,1,3);
plot(angle(z1));
title('含单回声信号相位');
sound(y,fs);
pause(length(y)/fs);
M = 4001;
fs = 8000;
[B,A] = cheby2(4,20,[0.1 0.7]);
Hd = dfilt.df2t([zeros(1,6) B],A);
H = filter(Hd,log(0.99*rand(1,M)+0.01).*sign(randn(1,M)).*exp(-0.002*(1:M))); H = H/norm(H)*4; % Room Impulse Response
hfile = 'All You Had To Do Was Stay.wav';
% Read the data back into MATLAB, and listen to audio.
[x, fs, nbits, readinfo] = wavread(hfile);
x = x(1:length(x));
dhat = filter(H,1,x);
figure(3);
subplot(3,1,1);
plot(dhat);
title('含双回声信号波形');
y1=fft(dhat);
subplot(3,1,2);
plot(abs(y1)+1);
title('含双回声信号幅值');
subplot(3,1,3);
plot(angle(y1));
title('含双回声信号相位');
set(gcf, 'Color', [1 1 1])
sound(dhat, fs);