基于matlab的回波,matlab课程设计-基于MATLAB的回波信号的产生与消除

41528d3028836879cd698677c3999917.gifmatlab课程设计-基于MATLAB的回波信号的产生与消除

数字信号处理课程设计题目:基于 MATLAB 的回波信号的产生与消除课程:MATLAB 课程设计姓名:学号:摘要在这个课程设计中,利用 matlab 采集一段语音,在这段语音的基础上,加入一定延时和衰减的回音,最后消去回音并且测出延时时间来计算障碍物距离正文①设计目的与要求采集语音:采集一段语音,绘制其时域波形,对此音频信号用 FFT 作谱分析。加入回声:对采集的语音进行处理,加入一段回声,并绘制其时域波形,对其进行 FFT频谱分析,绘制频谱图。从带有回声的声音信号中恢复原信号:设计合适的滤波器,对带有回声的声音信号进行滤波,恢复原信号。绘制所设计滤波器的幅频和相频特性,及滤波后的信号的时域波形和频谱图。从带有回声的声音信号中估计反射物的距离:采用相关分析法从带有回声的声音信号中估计反射物的距离。②具体内容及原理(1)语音采集利用 matlab 采集一段语音并保存,代码如下fs=8000;x=wavrecord(3*fs,fs, double );wavplay(x,fs);wavwrite(x, 原始信号 ); //存储音频:原始信号(2)原始信号的时域波形,FFT 频谱分析代码如下subplot(3,1,1);plot(x); grid on;xlabel( 时间 ); ylabel( 幅值 ); title( 原始信号时域波形 );subplot(3,1,2);wx=fft(x);f=(0:3*fs-1)*fs/(3*fs);plot(f,abs(wx)); grid on;xlabel( 频率 ); ylabel( 幅值 ); title( 幅频特性 );subplot(3,1,3);plot(f,angle(wx)); grid on;xlabel( 频率 ); ylabel( 相位 ) ;title( 相频特性 );图如下:(3)加入回声在已有声音信号x的基础上产生带回声的声音信号,可以表达为在原信号的基础上叠加其延时衰减的分量。假设只有一个回声的情况下,可简化其模型为:y(n)=x(n)+ax(n-N)a为反射系数;N为延迟时间。在这里,取a=0.5,N=2400(即0.3秒的延时)下面则加入回声且保存代码如下:N=2400;y=[x;zeros(N,1)]+0.5*[zeros(N,1);x];wavwrite(y, 加回声后的信号 );加回声后信号附件(双击打开): 加 回 声 后 的 信 号 .wav(4) 加回声后信号的时域波形,FFT 频谱分析代码如下:subplot(3,1,1);plot(y); grid on;xlabel( 时间 ); ylabel( 幅值 ); title( 加回声后信号时域波形 );subplot(3,1,2);wy=fft(y);f=(0:3*fs+N-1)*fs/(3*fs+N);plot(f,abs(wy)); grid on;xlabel( 频率 ); ylabel( 幅值 ); title( 幅频特性 );subplot(3,1,3);plot(f,angle(wy)); grid on;xlabel( 频率 ); ylabel( 相位 ) ;title( 相频特性 );图如下:(5) 从带有回声的声音信号中恢复原信号且估计反射物的距离这里把信号的恢复和反射物距离的估计放到一起是基于这么一种考虑,说明如下:在回声产生的过程中,用到了:y(n)=x(n)+ax(n-N),用的a=0.5,N=2400。然而现在要从加回声后的信号中恢复原信号,应该是在这么一种前提下,即“只有y(n)已知,其他都是未知的”。就是说,要假设我们并不知道原信号,且a与N都是未知的,这就给信号的恢复带来了困难,如果直接用y(n)=x(n)+0.5*x(n-2400)是不合理的。这个时候就要用到对反射物距离的估计的过程,在这个过程中利用相关分析法可以估算出N的值,利用N来算反射物的距离,求得N,则可以进一步求得a,具体方法和原理如下:如何求 N利用自相关函数xcorr来估计N,对于信号x(n),其长度为N,其求得的自相关函数为r(m)= ,其中m的范围为-(N-1)到N-1 ,而且显然是左右对称的。下面是一1()*)nx个简单例子运行代码xcorr([1 2 3])结果如下ans =3.0000 8.0000 14.0000 8.0000 3.0000自相关函数是对函数本身在两个时刻t1,t2的相关程度的一种衡量标准,对于加回声后信号y(n)=x(n)+ax(n-N),y(n)是由x(n)与它的一个衰减延时ax(n-N)叠加而成,因为相关函数是函数本身相关程度的一种衡量,可以看到,y(n)的自相关函数将出现几个极值点,自相关函数为r(m)= ,对于y(n)极值点应该出现在m=0 ,m=+-N ,这时候相关1()*)Nnxm程度相对较大。所以只要求出两个极值点之间的距离就能得到N如何求 a知道N后该怎么求得a值,下面是一种想法:y(n)是x(n)前补零与后补零的叠加,于是有y(1)=x(1)y(1+N)=x(1+N)+ax(1)y(1+2N)=x(1+2N)+ax(1+N).y(1+(k-1)N)=x(1+(k-1)N)+ax(1+(k-2)N)y(1+kN)=ax(1+(k-1)N)设y(n)的长度为L,对于k,则满足1+kNL现在逐级代入,可得1/a*y(1+kN)=x(1+(k-1)N)=y(1+(k-1)N)-ax(1+(k-2)N)=y(1+(k-1)N)-ay(1+(k-2)N)+a^2*x(1+(k-3)N)=.=y(1+(k-1)N)-ay(1+(k-2)N)+a^2*y(1+(k-3)N)-a^3*y(1+(k-4)N)+.a^k*y(1)即1/a*y(1+kN) =y(1+(k-1)N)-ay(1+(k-2)N)+a^2*y(1+(k-3)N)-a^3*y(1+(k-4)N)+.a^k*y(1)以此为方程来求解a为方便理解,下面是一个简单例子取x(n)=[1 2 3 4 5] a=0.5 N=2则有x(n) =1 2 3 4 5x(n-2)= 0.5 1 1.5 2 2.5y(n) =1 2 3.5 5 6.5 2 2.5有y(1)=x(1)y(3)=x(3)+ax(1)y(5)=x(3)+ax(5)y(7)=ax(5)得到1/a*y(7)=y(5)-ay(3)+a^2*y(1)即a^3*y(1)-a^2*y(3)+a*y(5)-y(7)=0把y(1),y(3),y(5),y(7)代入,用matlab求解a,代码如下roots([1 -3.5 6.5 -2.5])结果如下ans =1.5000 + 1.6583i1.5000 - 1.6583i0.5000 所以求得a=0.5,是正确的,而且在求解过程中只用到了y(n)与N下面来具体求解回声的这个问题利用自相关函数求 N代码如下r=xcorr(y);plot(r);grid on;title( y

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值