信号与系统课程设计报告回波的产生与消除.docx
《信号与系统课程设计报告回波的产生与消除.docx》由会员分享,可在线阅读,更多相关《信号与系统课程设计报告回波的产生与消除.docx(17页珍藏版)》请在冰豆网上搜索。
信号与系统课程设计报告回波的产生与消除
回波的产生与消除
一、摘要:
通过信号与系统的学习,对于数字信号处理有了一定的了解。
本文基于MATLAB的简单应用,以回波最简单的线性模型进行分析。
在MATLAB上实现了回波的产生以及消除,并且讨论了不同的衰减系数和延迟量对于回波的影响。
通过计算分析输出信号的自相关函数,提出了一种基于自相关函数来估计衰减系数和延迟的方法以及在什么条件下该方法适用性较好。
关键字:
回波自相关函数衰减系数延迟
二、引言:
回波是 现代通信中影响通信质量的噪声干扰,也有测距估算等的使用价值。
本文主要通过MATLAB实现了回波的产生、消除、测量反射物的距离,并且推导了如何利用输出信号的自相关函数来估计整个系统的衰减系数和延迟量。
同时对推导的结果进行MATLAB仿真验证。
本文通过两部分进行验证,首先设定衰减系数和延时,再与估计值对比后进行分析;其次假定延迟和衰减系数是两个随机数,由MATLAB产生,再进行分析。
从而分析了衰减系数和延时对回波产生和消除的影响。
三、正文:
1.设计要求:
1.1基本要求:
(1)利用声音信号x产生带有回声的声音信号y。
(2)从带有回声的信号y中消除回声。
(3)从y中估计反射物的距离。
1.2提高要求:
(1)利用自相关函数的定义推导如何从自相关函数中较为准确地估计延迟量和
衰减系数,以及在何种情况下此种方法较好。
(2)验证该种方法是否适用。
2.设计原理:
2.1设计的理论依据:
1.根据设计要求分析系统功能,掌握设计中所需理论(采样频率、采样位数的概念,采样定理;回声信号,相关性分析;数字滤波器设计原理和方法)。
2.熟悉MATLAB的编程语言。
2.2方案设计:
1.语音信号采集:
使用现成的“*.wav”格式的声音信号,44.1khz采样。
2.声音信号的读取:
使用MATLAB中的wavread()函数读取,记录信号,采样率。
3.带回波信号的产生:
利用MATLAB中的基本矩阵计算产生原始信号的延迟以及只有一个衰减延迟的回波信号。
4.参数估计:
使用MATLAB中的xcorr函数求取信号的自相关,并基于此对延迟量N和衰减系数进行估计。
5.回波消除:
使用MATLAB中的filter,根据估计的参数进行滤波。
6.估计反射物的距离:
根据求出的延迟量N,对反射物的距离进行估计,并讨论a对于测距的影响。
3.设计内容:
3.1声音信号x[n]的产生:
1.从现成的声音文件(.wav)中获取长度为1s的原始声音信号x[n],使用44.1khz的采样频率,16bit量化,命名为“origin.wav”。
(代码见附录,下同)
2.对原始信号取其单声道进行研究。
代码如下:
3.产生的原始声音信号的波形,以及其幅度、相位谱如下图所示:
图1原始信号的时、频域分析
3.2回波信号y[n]的产生:
1.参数的设置:
设置衰减系数a=0.5
因为人耳能分辨的声音延迟最少为0.1s,因此,最小延迟量不能小于0.1s。
在此先设置延迟时间为0.1s,即延迟量N=0.1*fs。
2.利用矩阵置零来产生x的延迟,以及得到y信号:
(代码如下)
原信号与回波信号的时域对比如下图:
图2原始信号与回波信号的时域对比
3.3自相关函数对参数a和N的估计:
1.理论推导:
实际工程应用中,回波的衰减系数和延迟量都是随机的,而且对于一个系统来言,常常需要做的是根据一个y信号,从中还原出输入信号x。
在本实验中,基于只有一个延迟衰减的回波叠加,可以利用y信号的自相关函数对衰减系数a和延迟量N进行估计。
下面,笔者将推导利用y的自相关函数的两个最高点的位置和幅值来对两个参数进行估计。
根据自相关函数的定义:
易知,在y的自相关函数的图像上,除了在0点附近,还会出现一个高峰,而其此高峰对应的位置就是N点。
图像如下:
图3y的自相关函数
将已知关系
带入
(1)式,则有:
分别将n=0和n=N两个值带入
(2)式,得到如下方程组:
根据x的自相关函数
,可知当N远远大于信号x自身的长度时,x的自相关函数在N处值为0,即
把(3)带入上述方程组有:
用(4)式比上(5)式可以得到一个关于a的一元二次方程(对自相关求出在0和N处的最大值之后)
,解这个方程有:
根据以上推导,可以得出一个在延时量比较大时的求取N值和估计a值比较好的方法,本文将在下面进行验证。
2.实验验证:
(1)利用上述方法,在已知y的情况下,对参数a和N进行估计,再与设定值a=0.5,N=0.1*fs对比,检验此方法是否适用。
求出上文产生的y信号的自相关函数及两个最大值,相关代码如下:
通过MATLAB编程计算得到:
可以看出,利用此方法估计出的a值及N值与原值比较吻合。
(2)讨论a和N对此方法估计值的影响
分别设置a的值为0.01,0.1,0.5,0.9并且计算估计值a_estimated和time_delay。
以及时间延迟为0.1s,0.5s,1s,1.2s,10s,经过实验计算结果如下表:
表1不同条件下a的估计值
N值\a值
0.01
0.1
0.5
0.9
0.1fs
0.0874
0.1265
0.5518
0.9660-0.2568i
0.5fs
0.0862
0.1000
0.5032
0.9481
1.0fs
0.0864
0.1047
0.5066
0.9598
1.2fs
0.0863
0.1072
0.5000
0.9984-0.0567i
10fs
0.0863
0.1000
0.5000
0.9000
表2不同条件下时间延迟的计算值
N值\a值
0.01
0.1
0.5
0.9
0.1fs
0.0682
0.1000
0.1000
0.1000
0.5fs
0.0682
0.5000
0.5000
0.5000
1.0fs
0.0682
1.0000
1.0000
1.0000
1.2fs
0.0682
1.2000
1.2000
1.2000
10fs
0.0682
10.0000
10.0000
10.0000
对比以上两表,可以说明:
(a)当N值较小时,由于回波与原信号有交叠的部分,因此估算a值时有一定的误差,从表1可以看出,随着N值的增大,a的估计值越来越接近a的真实值。
(b)当a真实值较小时,由于y的自相关函数在N点的幅度与a有关,通过表1可以看出当衰减系数a很小时(如0.01),N点y的相关函数的值与邻近值差别不大,无法用找极值点的方法找出该值,因此求出值的误差较大。
(c)在a值较为合适的情况下,时间延迟的估计值与真实值非常吻合。
(d)衰减系数和延迟量都对用自相关函数法估计参数有所影响,当a值取[0,1]之间的合适的值(a不能过大也不能过小),N值较大时,用此方法可以较好的估计出衰减系数和时间延迟。
3.4回波的消除:
所以只要准确的估算出a,和z,可以构建系统
系统频率响应
使用matlab中自带函数filter完成z变换,设置参数。
对应上式和
所以b=1,a=[1;zeros(-1,1);A]
其中分子只有一项1,b
(1)=1
分母是n0+1项{1,0,0,.........0,A}
MATLAB函数:
图4滤波后信号与原信号对比
从图中可以看出,滤波后得到的信号与原信号在图像上有一定差异,但根据人耳的听觉来判断,此滤波器有一定的作用,能明显分辨出滤波前后声音的差异,滤波后回声明显减弱甚至完全消失。
3.5从信号y中估计反射物的距离:
1.回波产生是由于信号经反射物反射后,被反射物吸收一部分能量,产生了具有衰减延迟的原信号,叠加上原信号形成。
因此反射物的距离与延迟量N有关系。
2.该声音信号发射后到达反射物在反射回来,经过距离反射物的两倍距离,而延迟量可由3.4中的估计法得到,由此,可以推出计算反射物距离的公式:
根据
以及
得到反射物的距离为:
2.如果衰减系数a过小,则y的自相关函数在N处的函数值无法用本文前面讨论的方法来求,因此得到的N的位置就有所偏差,导致测距的不准确。
4.实验调试及测试结果分析:
4.1设定a=0.5,N=0.1fs时得到的实验结果:
经过MATLAB的验证得到一下结果,与理论值吻合较好。
4.2当a和N为随机数时的结果:
修改程序,设置a和N为随机产生两个随机数,用上述方法进行验证。
修改程序如下
经过MATLAB运行之后,得到的结果:
比较运行的结果,使用自相关函数法在一定条件下能够较好的估计衰减系数和延迟时间,但是当a和N取随机数时,滤波后的声音信号与原声音信号从图像上来看有所差异,听到的声音也还带有一点回波的声音,说明普通的滤波器有一定的局限性。
四、结论:
1.本文从输出信号的自相关函数定义出发,推导出如何利用自相关函数的幅度等对衰减系数和延时量进行估计:
利用输出信号的自相关函数的两个最大值之比可以建立一个关于衰减系数的一元二次方程,使用此方法估计出的值经对比发现可以较为准确的估计衰减系数的真实值。
2.通过上文的研究可以发现延时和衰减系数对回波的产生和消除都有着一定程度的影响:
当衰减系数过小或过大时,利用上文的方法不易得到准确的衰减系数和延时的估计值。
经过多组数据的比较得知此方法使用于延时量较大的条件下。
3.当延时量较小,即回波信号与原声音信号完全重叠时,简单的使用普通滤波器进行滤波已经很难消除回波信号了。
在此种情况下可以考虑采用自适应滤波。
五、参考文献:
[1].刘树棠译.数字信号处理——使用MATLAB.西安:
西安交通大学出版社,2002.
[2].信号与系统奥本海姆著刘树堂译,西安交通大学,1998
[3].信号检测与估计,向敬成,电子工业出版社,1994
[4].信号与系统分析,吕幼新,电子工业出版社,2004
[5].概率论与数理统计,盛骤,高等教育出版社,2008
[6].离散时间语音信号处理,thomasf,电子工业出版社,2004
[7].数字信号处理教程---MATLAB释义与实现,陈怀琛,电子工业出版社,2004
六、附录
全设计的完整代码见附录:
%---------------原始声音信号的产生--------------------------
clc;clear;
[x,fs,bits]=wavread('origin.wav');%读入声音信号
fs
bits
x=x(:
1);%取单声道做处理
%-------------原始信号特性-----------
[k]=fft(x);%做傅立叶变换
[length]=size(k);
w=0:
fs/length
(1):
fs-fs/length
(1);
figure
(1);
subplot(3,1,1);
plot(x);
title('原始声音信号的波形');xlabel('time');ylabel('amplitude');
subplot(3,1,2);
plot(w,abs(k));
title('频域');xlabel('frequency(hz)');ylabel('amplitude');
subplot(3,1,3);
plot(w,angle(k));
title('相位');xlabel('frequency(hz)');ylabel('angle');
sound(x,fs,bits);
pause
(2);
%-------------------------回波信号的产生----------------------------
%-------------当a和N一定时--------------------
%delay=0.1;%回波的延迟时间
%N=fs*delay;%延迟量等于采样频率乘以延迟时间
%Attenuation=0.5;%定义衰减系数
%------------当a和N为随机数时的回波------------
delay=0.1+0.1*floor(10*rand
(1))%将延时时间设置为一个大于0.1的随机数,
%后面的floor是为了保证Delay是0.1的倍数,从而后面的N为整数
N=fs*delay;
Attenuation=2*rand
(1)-1%产生一个-1到1之间的衰减量,随机的
z=zeros(N,1);%构造一个N行一列的零矩阵
y=[x;z]+Attenuation*[z;x];%产生回波信号
%-----------回波信号的特性-----------
figure
(2);
subplot(2,1,1);
plot(x);
title('原信号的波形');xlabel('time');ylabel('amplitude');
subplot(2,1,2);
plot(y);
title('回波信号的波形');xlabel('time');ylabel('amplitude');
sound(y,fs,bits);
pause
(2);
%--------------------------参数估计-----------------------------------
y_corr=xcorr(y);%回波信号序列的自相关
figure(3);
plot(y_corr);
title('y的自相关函数');
[h1,h1_location]=max(y_corr);%找峰值及其坐标
y_corr(h1_location-fs/21:
h1_location+fs/21)=zeros(2*fs/21+1,1);
[h2,h2_location]=max(y_corr);%抹去零附近的值再找最值
N_delay=abs(h1_location-h2_location);%两个最大峰值的坐标之差的绝对值即为时间延迟
time_delay=N_delay/fs%延迟的时间
c=h1/h2;%峰值比
a_estimated=(c-sqrt(c*c-4))/2%估计衰减系数
%---------------------------滤波--------------------------------------
num=[1;zeros(N_delay,1);a_estimated];%设置滤波器参数
voice_DeEcho=filter(1,num,y);%调用filter函数进行滤波
sound(voice_DeEcho,fs,bits);
%-----------------------滤波后信号与原信号的对比------------------------
figure(4);
subplot(2,1,1);
plot(x);
title('原始声音信号');
subplot(2,1,2);
plot(voice_DeEcho);
title('滤波后的信号');
%---------------------------距离估计-----------------------------------
v=340;%声音在空气中传播速度
distance=(v*N_delay)/(2*fs)%反射物的距离