基于MATLAB的声音的延迟与混响

更新时间:2024-06-16 09:14:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课程设计任务书

学生姓名: 陈哲 专业班级: 通信gj1001 指导教师: 付琴 工作单位: 信息工程学院 题 目:基于MATLAB的声音延迟与混响 初始条件:

① MATLAB软件

② 数字信号处理与声音处理基础知识

要求完成的主要任务:

① 较全面了解常用的数据分析与处理原理及方法; ② 能够运用相关软件进行模拟分析; ③ 掌握基本的文献检索和文献阅读的方法; ④ 提高正确地撰写论文的基本能力。

参考书目:

1.刘泉,数字信号处理原理与实现(第二版),电子工业出版社,2009; 2.张雄伟,DSP集成开发与应用实例,第1版,电子工业出版社,2002; 3. 张洪涛等,数字信号处理,第一版,华中科技大学出版社,2007 4. 彭启琮等,DSP技术的发展与应用,第二版,高等教育出版社,2007 5. 杨述斌等,数字信号处理实践教程,第一版,华中科技大学出版社,2007

时间安排

17周 仿真设计 18周 鉴主15楼答辩

指导教师签名:__________________

年 月 日

系主任(或责任教师)签名:____________

年 月 日

1

目录

摘要 .......................................................................................................................................................... 3 1 绪论 ...................................................................................................................................................... 5

1.1设计任务 ............................................................................................................................ 5 1.2 设计要求 ........................................................................................................................... 6 2 设计的总体方案与原理 ...................................................................................................................... 7 2.1 设计的总体方案图 ........................................................................................................... 7 2.2 程序流程图 ....................................................................................................................... 8 2.3 设计的详细原理 ............................................................................................................... 9

2.3.1 信号采样 ............................................................................................................... 9 2.3.2 混响与延时 ........................................................................................................... 9 2.3.3 离散傅立叶变换 ................................................................................................. 10 2.3.4 滤波器设计 ......................................................................................................... 11

3 程序设计的步骤和过程 .................................................................................................................... 13 3.1 原始语音信号时域波形和频谱 ..................................................................................... 13 3.2 采样后语音信号的时域波形和频谱 ............................................................................. 13 3.3 对采样后的信号延时 ..................................................................................................... 14 3.4 对采样后的信号混响 ..................................................................................................... 14 3.5 单回声滤波器程序设计 ................................................................................................. 15 3.6 多重回声滤波器程序设计 ............................................................................................. 15 3.7 无限个回声滤波器程序设计 ......................................................................................... 16 3.8 全通结构滤波器程序设计 ............................................................................................. 17 4 结果分析与体会 ................................................................................................................................ 18 5 设计心得体会 .................................................................................................................................... 25 6 主要参考文献 .................................................................................................................................... 26 附录:仿真总程序 ................................................................................................................................ 27

2

摘要

数字信号处理技术自诞生以来,有了快速的发展,主要是研究用数字或符号序列表示和处理信号,被广泛应用于各个领域。本次设计是用MATLAB语言对语音信号进行采样分析,并设计数字滤波器对信号进行滤波,比较滤波前后信号特性的变化。用MATLAB开发环境设计用户图形界面使布局编程简化。

3

ABSTRACT

Digital signal processing technology since its birth had rapid development. the technology is to study the sequence of numbers or symbols used to represent and signal processing, it is widely used in various field. the design is to use the

MATLAB language sampling and analysis of voice signal, and digital design for signal filtering, comparing before and after filtering the signal properties change .GUI interface provided with MATLAB development environment for designing the layout of graphical user interface makes programming simpler.

4

1 绪论

数字信号处理是随着计算机技术的发展而迅速发展起来的一门新兴而古老的学科,它在新的领域如生物医学工程、声学、雷达、地震不、语音通信、数据通信、核科学等学科发挥着重要的作用,而它所采用的各种方法及众多应用已有悠久的历史;同时也是一门具有很强的理论性与实践性,且理论和技术发展都十分迅速的前沿性学科。随着数字化时代的来临,科学技术的进步而生产发展需求的与日俱增,促进了数字信号处理学科的发展,产生了各种巧妙的信号处理算法;特别是计算机技术的飞速发展,为数字信号处理增添了巨大的生命力。 数字信号处理主要是研究用数字或符号序列表示和处理信号。处理的目的可以是削弱信号中的多余内容,滤除混杂的噪声和干扰,或者是将信号变换为容易分析和识别的形式,便于估计和选择它的特征参数。例如通过分析和运算,可以估计脑电图或心电图中的某种特征参数,帮助医生查找病因和分析病情,确定合理的治疗方案;又如,信号在传输时,要受到各种干扰,包括失真、衰落和混入的背景噪声,信号处理要排除这些干扰。

声音信号是一维连续信号,而计算机只能处理离散信号。为了从离散信号还原连续信号,根据采样定理,可以确定采样频率的最小值。wav文件是一种数字声音文件格式,本课程设计基于Matlab分析了wav声音文件频谱与声音的关系。通过采集个人的一段声音进行频谱分析等处理,然后设计数字滤波器处理这个原始声音的wav文件,并比较滤波以后输出声音信号与原声音信号的异同。

1.1设计任务

(1)利用Windows下的录音机或其他软件,录制一段自己的语音信号,时间控制在1s左右,并对录制的信号进行采样。

(2)语音信号的频谱分析,画出采样后语音信号的时域波形和频谱图。 (3)将信号加入延时和混响,再分析其频谱,并与原始信号频谱进行比较。 (4)设计几种特殊类型的滤波器:单回声滤波器,多重回声滤波器,无限个回声滤波器,全通结构的混响器,并画出滤波器的频域响应。

5

z=[zeros(3000,1);y]; y=[y;zeros(3000,1)]; a=0.5; N=5;

R=9000;%滤波器阶数设置,其值越高,回声越明显

Bz1=[1,zeros(1,N*R-1),-a^N];%多重回声滤波器系统函数分子 Az1=[1,zeros(1,R-1),-a];%多重回声滤波器系统函数分母 y2=filter(Bz1,Az1,y); Y2=fft(y2,6001); [h,w]=freqz(Bz1,Az1); subplot(3,2,1);plot(abs(h)); title('多重回声滤波器幅频响应'); subplot(3,2,2); plot(angle(h)); title('多重回声滤波器相频响应');

subplot(3,2,3:4);plot(y2);title('多重回声滤波器时域图 '); subplot(3,2,5);plot(abs(Y2));title('多重回声滤波器幅频 '); subplot(3,2,6);plot(angle(Y2));title('多重回声滤波器相频 '); sound(y2,fs,bits);

3.7 无限个回声滤波器程序设计

[y,fs,bits]=wavread('C:\\Users\\Administrator\\Desktop\\音号.wav',[50000 150000]); y=y(:,1);

z=[zeros(3000,1);y]; y=[y;zeros(3000,1)]; a=0.5;

R=5000;%滤波器阶数设置,其值越高,回声越明显

16

频信

Bz=[0,zeros(1,R-1),1];%无限个回声滤波器系统函数分子 Az=[1,zeros(1,R-1),-a];%无限个回声滤波器系统函数分母 y2=filter(Bz,Az,y); Y2=fft(y2,6001); [h,w]=freqz(Bz,Az);

subplot(3,2,1);plot(abs(h)); title('无限个回声滤波器幅频响应'); subplot(3,2,2); plot(angle(h)); title('无限个回声滤波器相频响应');

subplot(3,2,3:4);plot(y2);title('无限个回声滤波器时域图 '); subplot(3,2,5);plot(abs(Y2));title('无限个回声滤波器信号幅频 '); subplot(3,2,6);plot(angle(Y2));title('无限个回声滤波器信号相频 '); sound(y2,fs,bits);

3.8 全通结构滤波器程序设计

[y,fs,bits]=wavread('C:\\Users\\Administrator\\Desktop\\音频号.wav',[50000 150000]); y=y(:,1);

z=[zeros(3000,1);y]; y=[y;zeros(3000,1)]; a=0.5;

R=5000;%滤波器阶数设置,其值越高,回声越明显 Bz1=[a,zeros(1,R-1),1];%全通滤波器系统函数分子 Az1=[1,zeros(1,R-1),a];%全通滤波器系统函数分母 [h,w]=freqz(Bz1,Az1); yy2=filter(Bz1,Az1,y); YY2=fft(yy2,6001);

subplot(3,2,1);plot(abs(h));

17

title('全通滤波器幅频响应'); subplot(3,2,2); plot(angle(h)); title('全通滤波器相频响应');

subplot(3,2,3:4);plot(yy2);title('全通结构时域图 '); subplot(3,2,5);plot(abs(YY2));title('全通结构幅频 '); subplot(3,2,6);plot(angle(YY2));title('全通结构相频 '); sound(yy2,fs,bits);

4 结果分析与体会

运行结果:

18

对信号采样后,信号时域波形出现了离散化的分布,不像原始图像那样密集分布,频谱图也是同样的变换,幅度和频率都是根据采样区间变化的

19

从时域图出延时是让原来的波形向右移动3000,频域的幅度发生了变化。

20

混响:在时域图看前面几乎没变化,后面的幅度有一定变化。 在频谱图幅度变化很大,中间的上下相互抵消,两边的跳动很大。

21

时域上形状大致相同,幅度有微小变化。

频谱上也是滤波前后两边跳动变换较大,幅度变化较大。

22

时域上滤波前的幅度比滤波后的数值大,形状上滤波后是连续的,滤波前是间断的

频谱上变化两边上下跳的动变化,中间变化抵消

23

时域上波形变得稀疏了,幅度相对变化较大。 频谱上变化两边上下跳的动变化,中间变化抵消

24

全通结构时域大致一样,滤波前比滤波后幅度有变化6000以后上下跳动抵消 频域上变化的不为明显,幅度发生了变化。

5 设计心得体会

课程设计是培养我们综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程,通过课程设计我们能够比较系统的了解理论知识,把理论和实践相结合,并且用到生活当中。在做设计的过程中总会出现各种问题,在这种情况下我们都会努力寻求最佳路径解决问题,无形间提高了我们的动手,动脑能力,并且同学之间还能相互探讨问题,研究解决方案,增进大家的团队意识。

此次课程设计综合了数字信号处理的理论知识和实践经验,经过这段时间查阅的相关资料并结合以前学过的数字信号处理课程和实验,我如期完成了设计任务要求,并加深了对知识的理解,提高了自己的实践动手能力。

25

拿到课程设计任务的时候,不知道从哪儿入手,选定题目后,上网查阅了相关资源,去图书馆搜集资料,确定了设计的基本方案,步骤,开始用软件进行实现,实现过程中出现了很多问题,上网查阅资料,在专业的论坛里面去看,下载MATLAB的视频,慢慢的开始有了进一步的理解。在以前的实验中没有接触过GUI界面的问题,根本不知道从哪入手,在查阅了资料,看视频,有了一定的了解,但是由于初次接触,出现问题的时候还是很难解决,经过和同学讨论,终于解决了这些问题。

经过此次课程设计,使我对数字信号处理的理论知识有了更深了的了解,更近一步的理解了用MATLAB语言对信号进行采样,滤波等处理。初次接触了MATLAB提供的用户界面的设计问题,对其中的一些基本问题有了了解,为以后的实践打下了一定的基础,相信在以后的实践过程中会有更好的提升。

另外,此次课程设计让我更加明白平时所学的知识如果不加以实践的话等于纸上谈兵。课程设计主要是我们理论知识的延伸,它的目的主要是要在设计中发现问题,并且自己要能找到解决问题的方案,形成一种独立的意识。我们还能从设计中检验我们所学的理论知识到底有多少,巩固我们已经学会的,不断学习我们所遗漏的新知识,把这门课学的扎实。

6 主要参考文献

1.刘泉,数字信号处理原理与实现(第二版),电子工业出版社,2009; 2.张雄伟,DSP集成开发与应用实例,第1版,电子工业出版社,2002; 3. 张洪涛等,数字信号处理,第一版,华中科技大学出版社,2007 4. 彭启琮等,DSP技术的发展与应用,第二版,高等教育出版社,2007 5. 杨述斌等,数字信号处理实践教程,第一版,华中科技大学出版社,2007

26

附录:guide 界面下的仿真总程序

% --- Executes on button press in pushbutton1.

function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [y,fs,bits]=wavread('C:\\Users\\Administrator\\Desktop\\音频信号.wav');%读取原始音频信号 y=y(:,1);%只取单信道

sound(y,fs,bits);%播放原始信号 Y=fft(y);%对原始信号取傅里叶变换

subplot(2,2,1:2);plot(y);title('原始信号时域波形'); subplot(2,2,3);plot(abs(Y));title('原始信号幅频'); subplot(2,2,4);plot(angle(Y));title('原始信号相频');

% --- Executes on button press in pushbutton2.

function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [y,fs,bits]=wavread('C:\\Users\\Administrator\\Desktop\\

号.wav',[50000 150000]);%只取原信号的一部分,即时间区间[50000 150000] y=y(:,1);

Y=fft(y,6001);%抽取6001点

subplot(2,2,1:2);plot(y);title('采样信号时域波形'); subplot(2,2,3);plot(abs(Y));title('采样信号幅频'); subplot(2,2,4);plot(angle(Y));title('采样信号相频');

27

sound(y,fs,bits);%回放采样信号

% --- Executes on button press in pushbutton3.

function pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [y,fs,bits]=wavread('C:\\Users\\Administrator\\Desktop\\号.wav',[50000 150000]); y=y(:,1);

z=[zeros(3000,1);y];%延迟3000 Z=fft(z,6001);

subplot(2,2,1:2);plot(z);title('延时后时域波形'); subplot(2,2,3);plot(abs(Z));title('延时后幅频'); subplot(2,2,4);plot(angle(Z));title('延时后相频'); sound(y,fs,bits);%回放延迟信号

% --- Executes on button press in pushbutton4.

function pushbutton4_Callback(hObject, eventdata, handles) % hObject handle to pushbutton4 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [y,fs,bits]=wavread('C:\\Users\\Administrator\\Desktop\\号.wav',[50000 150000]); y=y(:,1);

z=[zeros(3000,1);y]; y=[y;zeros(3000,1)];%补3000

y1=y+z;%将原始信号与延迟信号相加,产生混响信号 Y1=fft(y1,6001);

28

subplot(2,2,1:2);plot(y1);title('混响的时域波形'); subplot(2,2,3);plot(abs(Y1));title('混响的幅频'); subplot(2,2,4);plot(angle(Y1));title('混响的相频'); sound(y,fs,bits);%回放混响信号

% --- Executes on button press in pushbutton5.

function pushbutton5_Callback(hObject, eventdata, handles) % hObject handle to pushbutton5 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [y,fs,bits]=wavread('C:\\Users\\Administrator\\Desktop\\号.wav',[50000 150000]); y=y(:,1);

z=[zeros(3000,1);y]; y=[y;zeros(3000,1)]; a=0.5;

R=5000;%滤波器阶数设置,其值越高,回声越明显 Bz1=[1,zeros(1,R-1),a];%单回声滤波器系统函数分子 Az1=(1);%单回声滤波器系统函数分母

y2=filter(Bz1,Az1,y);%单回声滤波器系统函数 Y2=fft(y2,6001);

[h,w]=freqz(Bz1,Az1);%求设计的滤波器频谱 subplot(3,2,1);plot(abs(h)); title('单回声滤波器幅频响应'); subplot(3,2,2); plot(angle(h)); title('单回声滤波器相频响应');

subplot(3,2,3:4);plot(y2);title('单回声滤波器时域图 '); subplot(3,2,5);plot(abs(Y2));title('单回声滤波器幅频 ');

29

subplot(3,2,6);plot(angle(Y2));title('单回声滤波器相频 '); sound(y2,fs,bits);

% --- Executes on button press in pushbutton6.

function pushbutton6_Callback(hObject, eventdata, handles) % hObject handle to pushbutton6 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [y,fs,bits]=wavread('C:\\Users\\Administrator\\Desktop\\号.wav',[50000 150000]); y=y(:,1);

z=[zeros(3000,1);y]; y=[y;zeros(3000,1)]; a=0.5; N=5;

R=9000;%滤波器阶数设置,其值越高,回声越明显

Bz1=[1,zeros(1,N*R-1),-a^N];%多重回声滤波器系统函数分子 Az1=[1,zeros(1,R-1),-a];%多重回声滤波器系统函数分母 y2=filter(Bz1,Az1,y); Y2=fft(y2,6001); [h,w]=freqz(Bz1,Az1); subplot(3,2,1);plot(abs(h)); title('多重回声滤波器幅频响应'); subplot(3,2,2); plot(angle(h)); title('多重回声滤波器相频响应');

subplot(3,2,3:4);plot(y2);title('多重回声滤波器时域图 '); subplot(3,2,5);plot(abs(Y2));title('多重回声滤波器幅频 '); subplot(3,2,6);plot(angle(Y2));title('多重回声滤波器相频 '); sound(y2,fs,bits);

30

% --- Executes on button press in pushbutton7.

function pushbutton7_Callback(hObject, eventdata, handles) % hObject handle to pushbutton7 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [y,fs,bits]=wavread('C:\\Users\\Administrator\\Desktop\\音

号.wav',[50000 150000]); y=y(:,1);

z=[zeros(3000,1);y]; y=[y;zeros(3000,1)]; a=0.5;

R=5000;%滤波器阶数设置,其值越高,回声越明显 Bz=[0,zeros(1,R-1),1];%无限个回声滤波器系统函数分子 Az=[1,zeros(1,R-1),-a];%无限个回声滤波器系统函数分母 y2=filter(Bz,Az,y); Y2=fft(y2,6001); [h,w]=freqz(Bz,Az);

subplot(3,2,1);plot(abs(h)); title('无限个回声滤波器幅频响应'); subplot(3,2,2); plot(angle(h)); title('无限个回声滤波器相频响应');

subplot(3,2,3:4);plot(y2);title('无限个回声滤波器时域图 '); subplot(3,2,5);plot(abs(Y2));title('无限个回声滤波器信号幅频 '); subplot(3,2,6);plot(angle(Y2));title('无限个回声滤波器信号相频 '); sound(y2,fs,bits);

% --- Executes on button press in pushbutton8.

function pushbutton8_Callback(hObject, eventdata, handles)

31

% hObject handle to pushbutton8 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [y,fs,bits]=wavread('C:\\Users\\Administrator\\Desktop\\号.wav',[50000 150000]); y=y(:,1);

z=[zeros(3000,1);y]; y=[y;zeros(3000,1)]; a=0.5;

R=5000;%滤波器阶数设置,其值越高,回声越明显

Bz1=[a,zeros(1,R-1),1];%无限个回声滤波器系统函数分子 Az1=[1,zeros(1,R-1),a];%无限个回声滤波器系统函数分母 [h,w]=freqz(Bz1,Az1); yy2=filter(Bz1,Az1,y); YY2=fft(yy2,6001);

subplot(3,2,1);plot(abs(h)); title('全通滤波器幅频响应'); subplot(3,2,2); plot(angle(h)); title('全通滤波器相频响应');

subplot(3,2,3:4);plot(yy2);title('全通结构时域图 '); subplot(3,2,5);plot(abs(YY2));title('全通结构幅频 '); subplot(3,2,6);plot(angle(YY2));title('全通结构相频 '); sound(yy2,fs,bits);

32

本科生课程设计成绩评定表

姓 名 专业班级 陈哲 通信GJ1001 性 别 男 题 目:基于MATLAB的声音延迟与混响 答辩或质疑记录: 1. 什么是延时? 答:延时就是将音源延迟一段时间后,再欲播放的效果处理。依其延迟时间的不同,可分别产生合唱、镶边、回音等效果。 2. 如何产生延时? 答:当延迟时间在3~35ms之间时人耳感觉不到滞后音的存在,并且他与原音源叠加后,会因其相位干涉而产生\梳状滤波\效应,这就是镶边效果。如果延迟时间在50ms以上时,其延迟音就清晰可辨,此时的处理效果才是回音。回音处理一般都是用于产生简单的混响效果。 成绩评定依据: 最终评定成绩(以优、良、中、及格、不及格评定)

指导教师签字:__________________

年 月 日

33

本文来源:https://www.bwwdw.com/article/pgz3.html

Top