
信号与系统综合训练.doc
3页《信号与系统》综合训练1 一.训练要求:(1) 利用声音信号x产生带有回声的声音信号y2) 可控制回声的大小、次数及间隔3) 从带有回声的信号y中消除回声二.实验步骤:1、 声音信号x的产生:我们直接利用现成的声音文件(happy.wav),绘制其波形,并播放声音,声音信号x的产生程序如下:%-------------------------提取声音信号 ----------------------------[x,fs]=wavread('happy'); %提取声音信号figure(1);plot(x(1:80000));xlabel('time');ylabel('amplitude');title('原始声音信号');sound(x,fs);2、 带回声的声音信号y产生:在已有声音信号x的基础上产生带回声的声音信号,可以表达为在原信号的基础上叠加其延时衰减的分量可简化其模型为:y(n)=x(n)+ax(n-N)+a^2*x(n-N)+….+a^k*x(n-N)a为反射系数;N为延迟时间,k为回声的次数利用此原理我们进行编程实现:(1) 分别读入反射系数a、回声次数k、延迟时间N的大小。
(2) 取原声音的一个声道,对其做时间的延迟和衰减,将处理后的声音叠加在原声上,产生叠加信号y3) 播放产生的回声信号y并绘制其波形产生回声--------------------------------x=x(:,1); %提取单声道做处理delay=input('输入回声间隔时间:'); %输入回声间隔时间:Attenuation=input('输入回声衰减系数:'); %输入回声衰减系数:n=input('输入回声次数:'); %输入回声次数:for i=0:1:n j=n-i; N1=i*fs*delay; %延迟量等于延迟时间乘以采样率 z1=zeros(N1,1); z2=zeros(N2,1); y=Attenuation^i*[z1;x;z2]; %产生回波信号endfigure(2);plot(y(1:80000));xlabel('time');ylabel('amplitude');title('回声');sound(y,fs);3.从带有回声的声音信号中恢复原信号设计合适的滤波器,对带有回声的声音信号进行滤波,恢复原信号。
由于回声产生原理为:y(n)=x(n)+ax(n-N)+a^2*x(n-2N)+….+a^k*x(n-kN)a为反射系数,N为延迟时间,k为回声的次数由此设计出滤波器函数为:s(n)=y(n)-ay(n-N)-a^2*y(n-2N)-….-a^k*y(n-kN)此滤波函数,由于起的设计缺陷性,对衰减系数小及回声次数多的声波滤波效果较好,而当衰减系数大及回声次数少的时候滤波效果相当差恢复信号程序分析如下:%-----------------------------回声的消除 ------------------------------q=input('请按enter键确认消除回声以播放原音');N=n*fs*delay;z=zeros(N,1);y0=[y;z];for i=1:1:n j=n-i;N1=i*fs*delay;N2=j*fs*delay; z1=zeros(N1,1); z2=zeros(N2,1);s=y0-Attenuation^i*[z1;y;z2];endfigure(3);plot(s(1:80000));xlabel('frequency');ylabel('amplitude');title('滤波后得到的信号');sound(s,fs);。
