当前位置:文档之家› 基于MATLAB的 回声信号产生器

基于MATLAB的 回声信号产生器

电子信息工程学院《DSP技术及应用》课程设计报告题目:基于MATLAB的回声信号产生器专业班级:通信工程专业二〇一三年六月十六日目录一、设计目的 (1)二、设计要求 (1)三、设计原理及方案 (1)四、设计流程 (5)五、调试分析 (5)六、GUI界面 (17)七、设计总结.………………………………………………………. .20一、设计目的综合运用我们掌握的数字信号处理知识,利用matlab语言编程进行回声信号产生器的设计再对其进行频谱分析,实现回声的产生,消除和隐藏。

1、首先熟练掌握对声音采集、处理、衰减、延时等过程的理论知识。

2、根据设计思路,学习资料的搜集与整理。

3、通过理论与实际的结合,在理论的基础结合实际情况完成课程的设计。

关于MATLAB软件:MATLAB语言具备高效、可及推理能力强等特点,是目前工程界流行最广泛的科学计算语言。

MATLAB强大的运算和图形显示功能,可使信号与系统上机实验效率大大提高。

特别是它的频谱分析和滤波器分析与设计功能很强,使数字信号处理工作变得十分简单,直观。

关于GUI界面:图形用户界面GUI (Graphics User Interface) 是由各种图形对象,如图形窗口、图轴、菜单、按钮、文本框等构建的用户界面,是人机交流信息的工具和方法。

GUI 设计即可以基本的MATLAB 程序设计为主,也可以鼠标为主利用GUIDE 工具进行设计。

二、设计要求首先,自己录取一个合适的原声信号,并对其进行频谱分析;然后通过数字信号处理对已录制好的原声信号进行延时,衰减,产生出回声信号,通过图形与原声信号进行比较;再把信息转换成二进制信号将其叠加在回声中,通过数字信号处理实现信息的隐藏;最后,通过设计GUI界面将结果展示出来。

1、通过计算机中的y=fft(x)傅里叶变换,对原声信号和回声信号进行频谱分析。

2、通过设计FIR、IIR滤波器对原声信号进行衰减、延时产生一次、三次、六次无限次回声。

3、学习并掌握MATLAB的使用方法,用MATLAB编程和会使用MATLAB中的GUI界面设计。

三、设计原理及方案1、设计原理(1)回声的定义:当声投射到距离声源有一段距离的大面积上时,声能的一部分被吸收,而另一部分声能要反射回来,如果听者听到由声源直接发来的声和由反射回来的声的时间间隔超过十分之一秒,它就能分辨出两个声音这种反射回来的声叫“回声”。

(2)回声信号产生:根据回声的定义,回声信号可以是原始信号通过延时、衰减来生成。

(3)回声信号消除:数字滤波器的作用是滤除信号中某一部分频率分量。

可以将回声信号消除。

(4)回声信号隐藏:回声隐藏利用了人耳的听觉掩蔽效应,是一种有效的音频信息隐藏方法。

(5)处理单元原理:假设x(n)为原始信号,y(n)为经过延时、衰减迭加后产生的“回声信号”,声音信号和经延迟R个周期,衰减系数α(α<1)的单个回声的差分方程有如下表示:y(n)=x(n)+ α·x(n-R)上述差分方程可用系统函数表示为:H(z)=1+α·z-R此滤波器为FIR滤波器,其结构图如下:在实际生活中,往往不止存在一重回声,因此,需要实现多重回声的设计,关于均匀间隔的多重回声的实现,是将每一级回声相对于上一级回声依次衰减和延时R个周期,此时不能再用FIR滤波器来实现,应该用IIR滤波器设计。

IIR 滤波器设计的系统函数如下:当回声次数很多时多重回声的系统函数如下:IIR滤波器结构图:IIR滤波器结构隐藏目的是以添加回声的方式在原有音频信息中嵌入新信息,实现信息隐藏。

它的数学模型可以表示为:典型的回声核脉冲嵌入回声的声音可表示为和的卷积,和,分别为原始声音信号和回声核的单位脉冲响应。

回声信号由引入到原始声音当中,其中,d为延迟时间,为衰减系数。

嵌入回声后的声音信号可以表示为(1)读取语音信号与回放录制一段合适的原声信号,用“[x,fs,bits]=wavread('y',[1 40000])”来读取录制好的语音信号,这是以采样频率fs、采样位数bits从[1 40000]来读取语音,并将采样值放在x中。

用sound(5*x,fs,bits)对声音信号进行回放,乘以5以加强信号,便于听取。

(2)傅里叶变换FFT傅里叶变换调用格式:y=-fft(x)其中,x是序列,y是序列的FFT,,x可以为一向量或矩阵,若x为一向量,y是x的FFT。

且和x相同长度。

若x为一矩阵,则y是对矩阵的每一列向量进行FFT。

如果x长度是2的幂次方,函数fft执行高速基-2FFT算法;否则fft执行一种混合基离散傅里叶变换算法,计算速度较慢。

(3)函数filter函数filter的调用格式为:y=filter(b,a,x)该格式采用数字滤波器对数据进行滤波,既可以用于IIR滤波器,也可以用于FIR滤波器。

其中向量b和a分别表示系统函数的分子、分母多项式的系数,若a=1,此时表示FIR滤波器,否则就是IIR滤波器。

该函数是利用给出的向量b和a,对x中的数据进行滤波,结果放入向量y。

(4)函数zearos函数的一种调用格式为:B = zeros(n)返回一个n*n的矩阵,其元素都为零,如果参数n不是一个标量就会报错。

函数的另一种调用格式为:B = zeros(m,n) 或 B = zeros([m n])返回一个m*n的零矩阵。

函数的另一种调用格式为:B = zeros(m,n,p,…)或 B = zeros([m n p …])返回一个m*n*p*…的零矩阵。

注意:参数m,n,p都是非负整数,负整数都会看成零。

五、调试与分析1、原始信号分析读取一段语音信号,画出其时域波形,用fft对读取的语音信号进行傅里叶变换,并画出其相位与幅值。

[x,fs,bits]=wavread('y',[1 40000]); %读取语音信号n1=0:2000;figure(1)subplot(2,1,1);plot(x); %原始信号时域波形title('原始信号时域波形');X=fft(x); %对原始信号做FFT变换subplot(2,1,2);plot(n1(1:1000),X(1:1000)); %原始信号频谱图title('原始信号频谱图');figure(2)subplot(2,1,1);plot(abs(X));%经傅里叶变换之后的信号的幅值title('幅值');subplot(2,1,2);plot(angle(X));%经傅里叶变换之后的信号的相位title('相位');sound(5*x,fs,bits); %原始语音信号,乘以5是为了加强信号2、回声信号的产生对原始信号取出单声道信号,并用filter函数对其进行衰减和延时,得到回声信号。

(1)FIR滤波器产生一次回声[x,fs,bits]=wavread('y',[1 40000]); %读取语音信号n1=0:2000;b=x(:,1);%取单声道信号yy1=filter([1,zeros(1,12000),0.7],1,[b',zeros(1,30000)]); %FIR滤波器进行滤波figure(1)subplot(2,1,1);plot(yy1); %单回声滤波器时域波形title('单回声滤波器时域波形');YY1=fft(yy1); %对单回声信号做2001点的FFT变换subplot(2,1,2);plot(n1(1:1000),YY1(1:1000)); %单回声滤波器频谱图title('单回声滤波器频谱图');figure(2)subplot(2,1,1);plot(abs(YY1));%经傅里叶变换之后的信号的幅值title('幅值');subplot(2,1,2);plot(angle(YY1));%经傅里叶变换之后的信号的相位title('相位');sound(5*yy1,fs,bits); %经单次回声滤波器后的语音信号,乘以5是为了加强信号(2)IIR滤波器产生多次回声:yy2=filter(1,[1,zeros(1,80000/(N+1)),0.7],[b',zeros(1,40000)]);通过改变式中N 的数值可设置回声的次数,三次回声:[x,fs,bits]=wavread('y',[1 40000]); %读取语音信号n1=0:2000;b=x(:,1);%产生单声道信号N=3;yy2=filter(1,[1,zeros(1,80000/(N+1)),0.7],[b',zeros(1,40000)]);%IIR滤波器进行滤波figure(3)subplot(2,1,1);plot(yy2); %三次回声滤波器时域波形title('三次回声滤波器时域波形');YY2=fft(yy2); %对三次回声信号做FFT变换subplot(2,1,2);plot(n1(1:1000),YY2(1:1000)); %三次回声滤波器频谱图title('三次回声滤波器频谱图');figure(4)subplot(2,1,1);plot(abs(YY2));%经傅里叶变换之后的信号的幅值title('幅值');subplot(2,1,2);plot(angle(YY2));%经傅里叶变换之后的信号的相位title('相位');sound(5*yy2,fs,bits); %经三次回声滤波器后的语音信号,乘以5是为了加强信号使用叠加法产生三次回波:[x,fs]=wavread(‘ding.wav’);x1=x(1:40000); %产生40000行1列矩阵x2=x(1:40000);x3=x(1:40000);x4=x(1:40000);x1=[x1’,zeros(1,18000)]; %x1’为x1的转置,zero是(1,18000)产生1行18000列全零矩阵并加到x1’的后面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.2*x4’];yy1=x1+x2+x3+x4;figure(3)subplot(2,1,1);plot(yy1); %三次回声时域波形title(‘三次回声滤波器时域波形’);YY1=fft(yy1); %三次回声信号做FFT变换subplot(2,1,2);plot(n1(1:1000),YY1(1:1000)); %三次回声频谱图title(‘三次回声滤波器频谱图‘);figure(4)subplot(2,1,1);plot(abs(YY1));%经傅里叶变换之后的信号的幅值title(‘幅值’);subplot(2,1,2);plot(angle(YY1));%经傅里叶变换之后的信号的相位title(‘相位');sound(5*yy1,fs);六次回声:[x,fs,bits]=wavread('y',[1 40000]); %读取语音信号n1=0:2000;b=x(:,1);%产生单声道信号N=6;yy2=filter(1,[1,zeros(1,70000/(N+1)),0.7],[b',zeros(1,40000)]);%IIR滤波器进行滤波figure(3)subplot(2,1,1);plot(yy2); %六次回声滤波器时域波形title('六次回声滤波器时域波形');YY2=fft(yy2); %对六次回声信号做FFT变换subplot(2,1,2);plot(n1(1:1000),YY2(1:1000)); %三次回声滤波器频谱图title('六次回声滤波器频谱图');figure(4)subplot(2,1,1);plot(abs(YY2));%经傅里叶变换之后的信号的幅值title('幅值');subplot(2,1,2);plot(angle(YY2));%经傅里叶变换之后的信号的相位title('相位');sound(5*yy2,fs,bits); %经六次回声滤波器后的语音信号,乘以5是为了加强信号(3)IIR滤波器产生无限次回声函数yy1=filter(B,A,x)利用给出的向量b和a,对x中的数据进行滤波,结果放入向量yy1。

相关主题