信号与系统课程设计
课程名称:信号与系统
题目名称:回波的产生与消除系统设计 学 院:………… 专业班级:………. 学 号:……. 学生姓名:……. 指导教师:……..
201.年12月23日
摘 要
MATLAB语言具备高效、可及推理能力强等特点,是目前工程界流行最广泛的科学计算语言。
信号与系统是一门理论与实践紧密结合的课程。MATLAB强大的运算和图形显示功能,可使信号与系统上机实验效率大大提高。特别是它的频谱分析和滤波器分析与设计功能很强,使数字信号处理工作变得十分简单,直观。本实验就是运用MATLAB对声音信号进行分析与滤波,并估计反射物距离。
关键词:MATLAB;声音信号;回波产生,回波消除,估计反射物距离,频谱分析;滤波器。
一.设计要求
(1) 利用声音信号x产生带有回声的声音信号y。 (2) 从带有回声的信号y中消除回声。 (3) 从y中估计反射物的距离 二. 设计内容和步骤 理论依据
根据设计要求分析系统功能,掌握设计中所需理论(采样频率、采样位数的概念,采样定理;回声信号,卷积,相关分析;时域信号的FFT分析;数字滤波器设计原理和方法)。 1、 声音信号x的产生:
声音信号x,既可以从现成的声音文件(.wav)中获取;也可以利用MATLAB录音命令现行录制(可自行设置采样频率等录音参数)。
我们直接利用现成的声音文件(login.wav),绘制其时域波形,对此音频信号用FFT作谱分析并播放。
声音信号x的产生程序与图形分析如下: [x,fs]=wavread('login'); figure(1); subplot(3,1,1);
plot(x(1:40000)); title('原始信号'); y=fft(x); subplot(3,1,2); plot(abs(y)); title('幅值'); subplot(3,1,3); plot(angle(y)); title('相位'); sound(x,fs);
图1
2、 带回声的声音信号y产生:
在已有声音信号x的基础上产生带回声的声音信号,可以表达为在原信号的基础上叠加其延时衰减的分量。假设只有一个回声的情况下,可简化其模型为:
y(n)=x(n)+ax(n-N) (式1)
a为反射系数;N为延迟时间。利用此原理我们进行编程实现:
(1) 在我们编程实现回波产生的基础上,再绘制其时域波形,对其进行FFT频谱分析,绘制频谱图并播放。
(2) 分别改变反射系数a和延迟时间N的大小,播放产生的回声信号y,分析反射系数a和延迟时间N对原始声音的影响。
(3) 按照以上思路,当有两个、三个或更多回声,我门这儿讨论三个回声时的情况
(1)我们编程实现了一个回声信号的声音信号y,程序与图形分析如下(并播放):
此处,N= , a=0.7 [x,fs]=wavread('login'); x1=x(1:40000); x2=x(1:40000); x1=[x1',zeros(1,18000)]; x2=[zeros(1,18000),0.7*x2']; y=x1+x2; figure(2); subplot(3,1,1); plot(y(1:58000)); title('回声'); y1=fft(y); subplot(3,1,2); plot(abs(y1)); title('幅值'); subplot(3,1,3); plot(angle(y1)); title('相位');
sound(y,fs);
图2
(2)○1保持N不变,改变a大小分析声音信号并播放:我们取N= , a从0.1到1:
观察每个情况下声音信号的变化:回声信号的强度随着a的增大而变大
2保持a不变,改变N大小分析声音信号并播放:我们取a=0.7,N从 10000 ○到 50000
观察每个情况下声音信号的变化:N的值不能太大也不能太小,当N大于40000或小于180000时将当N在18000到40000这个范围内取值时,随着N 的增大回声与原来的声音信号之间的时间间隔越
(3)有三个回声的信号y的产生程序与图形分析如下: [x,fs]=wavread('login'); x1=x(1:40000); x2=x(1:40000); x3=x(1:40000); x4=x(1:40000);
x1=[x1',zeros(1,18000)];
x2=[zeros(1,6000),0.7*x2',zeros(1,12000)]; x3=[zeros(1,12000),0.4*x3',zeros(1,6000)]; x4=[zeros(1,18000),0.1*x4']; y=x1+x2+x3+x4; figure(2); subplot(3,1,1); plot(y(1:58000)); title('回声'); y1=fft(y); subplot(3,1,2); plot(abs(y1)); title('幅值'); subplot(3,1,3); plot(angle(y1)); title('相位'); sound(y,fs);
图3
3.从带有回声的声音信号中恢复原信号
设计合适的滤波器,对带有回声的声音信号进行滤波,恢复原信号。绘制所设计滤波器的幅频和相频特性,及滤波后的信号的时域波形和频谱图。
我们这儿就只讨论有三个回声的情况: 恢复信号程序与图形分析如下: b=1;
a=zeros(1,18000); a(1)=1; a(6001)=0.7; a(12001)=0.4; a(18001)=0.1; z1=filter(b,a,y); z2=fft(z1,1024); figure(3); subplot(3,1,1);
plot(abs(z2)); title('滤波幅值 '); subplot(3,1,2); plot(angle(z2)); title('滤波相位'); subplot(3,1,3); plot(z1(1:40000)); title('滤波信号'); sound(z1,fs);
图4
4.从带有回声的声音信号中估计反射物的距离
采用相关分析法从带有回声的声音信号中估计反射物的距离 我们这儿也是从三个回声的情况下考虑的:
程序如下: h=xcorr(y); figure(4); subplot(5,1,1) plot(abs(h)); title('最值 '); h1=h(56000:60000); [r1,t1]=max(h1'); t1=t1+56000; subplot(5,1,2); plot(h1); title('点1'); h2=h(62000:66000); [r2,t2]=max(h2); t2=t2+62000-t1; subplot(5,1,3); plot(h2); title('点2'); h3=h(68000:72000); [r3,t3]=max(h3); t3=t3+68000-t1; subplot(5,1,4); plot(h3); title('点3'); h4=h(74000:78000); [r4,t4]=max(h4); t4=t4+74000-t1; subplot(5,1,5); plot(h4);
title('点4'); t=[t2,t3,t4]
通过编程计算出三个延时的结果如下所示: t=[t2,t3,t4] t =
6000 12000 18000
L=V·n/f
三、参考文献
[1] 高西全、丁玉美编著《数字信号处理》西安:西安电子科技大学出版社,2008.
[2] 丁玉美、高西全编著《数字信号处理学习指导》西安:西安电子科技大学出版社,2001. [3] 郑君里等编《信号与系统》北京:高等教育出版社,2000.
[4] 罗军辉等编著《MATLAB7.0在数字信号处理中的应用》北京:机械工业出版社,2005. [5] 陈怀琛等编著《MATLAB及在电子信息课中的应用》北京:电子工业出版社,2002.
四、总结
这次的课程设计是我第一次真正自己认真参与的一次实践,在做的过程中遇到了很多问题,尤其是怎样把书本上学到的东西真正的用来解决工程问题。会做题跟实际问题的解决根本就是两回事。刚开始做的时候一点MATLAB都不懂,不过通过这次课程设计的学习,对于matlab的强大功能有了初步的了解,同时也熟悉了如何用matlab进行编程来解决一些声音信号的相关问题虽然做的时间较长,做的过程比较辛苦,但是从中的确学到很多适用的东西。
相关推荐: