基于Matlab的主动降噪实验.docx
- 文档编号:4204451
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:14
- 大小:614.53KB
基于Matlab的主动降噪实验.docx
《基于Matlab的主动降噪实验.docx》由会员分享,可在线阅读,更多相关《基于Matlab的主动降噪实验.docx(14页珍藏版)》请在冰豆网上搜索。
基于Matlab的主动降噪实验
基于Matlab的主动降噪实验
SHANGHAIJIAOTONGUNIVERSITY
实验三主动降噪实验
指导老师:
王旭永
小组成员:
吴淑标5110209352
汤剑宏5110209355
朱安林5110209344
一、实验目的
1.了解噪声的基本概念;
2.了解工程中处理噪声的常规方法;
3.掌握主动降噪的基本原理与方法;
4.通过实验模拟主动降噪,分析降噪效果。
二、实验原理
主动降噪(主动噪声控制),又称为有源噪声控制。
早在1933年就由德国物理学家PaulLueg提出了。
其主要依据了声波的干涉原理,来消除噪声。
主动降噪的基本原理图如图1所示:
图1主动降噪的原理
简单的说就是用传感器检测噪声信号,通过控制系统反馈给次声源,由次生源发出与原噪声信号频率相同、幅值大小相同、相位相反的声信号,根据声波叠加原理,达到一种降噪的效果。
其逻辑程序框图如图2所示:
图2主动降噪逻辑框图
主动降噪,习惯上可以进行如下分类:
1)有源声控制和有源力控制;
2)单通道有源控制和多通道有源控制;
3)非自适应有源控制和自适应有源控制。
对于有源噪声控制系统而言,也可以这样分类:
1)模拟系统和数字系统;
2)前馈控制系统和反馈控制系统;
3)单通道系统和多通道系统。
主动降噪的实现:
以单通道有源噪声控制系统为例,这里也分非自适应有源噪声控制系统和自适应有源噪声控制系统。
1)自适应有源噪声控制系统:
该系统一般由初级声源、自适应控制器、次级声源和误差传感器组成。
其特点是控制器带反馈,并具有自适应控制算法,控制器多为数字控制器。
这种系统适用的范围宽,相对灵活,但其结构复杂,实现难度加大,成本增加。
本系统原理图如图3所示:
图3自适应有源噪声控制系统
本实验主要采用此种控制方式。
2)非自适应有源噪声控制系统:
该系统一般由初级声源、控制器、次级声源和传感器组成。
其特点是控制器不带反馈,可以是模拟控制器,也可以是数字控制器。
这种系统适用的范围有限。
影响主动降噪性能的主要因素:
1)初级声源的类型与特征:
此时,最适合的噪声源是集中参数噪声源,最好是点噪声源。
这样,可以使用尽可能少的次级声源获得最大降噪量。
2)次级声源的位置:
一般为获得全局空间噪声能量的降低,在进行次级声源的布置时,应该遵循从空间和时间上完全能够复制初级声场的原则,使得次级声源称为初级声源的“镜像”。
3)传感器(误差传感器)的位置与个数:
对于有源降噪而言,所使用的传感器(误差传感器)位置与个数是至关重要的。
因为其位置是否合适,直接影响到获取初级声源的质量;其个数多少关系到降噪效果。
4)参考信号与质量:
参考信号能够获得并质量好,就可以构造性能良好的前馈控制器,因为前馈控制器相对于反馈控制器而言,结构简单,性能易于稳定。
5)自适应算法与控制器硬件:
对于宽带噪声的降噪而言,好的自适应算法将扮演重要的角色。
它不仅关系着控制器的复杂程度、系统稳定性。
因此,一个好的自适应算法应该兼顾收敛性、鲁棒性和计算量三个方面。
控制器硬件设置应该以能够实时地、准确地完成自适应算法为目标。
三、实验仪器
本实验用到的实验设备比较简单:
笔记本电脑(图4)、扬声器即音箱(图5)、传感器即麦克风(图6);所使用的编程软件是Matlab,方案简单易行。
图6传感器
四、实验步骤
1)完成各仪器能否正常工作的检验,保证实验正常进行;
2)按计划搭建实验平台,如图7所示;
图7实验整体平台
3)打开Matlab软件,将编好的程序烧录其中,准备开始实验;
4)选择相对安静的空间,运行程序,程序会自动会输出8张图,分别包括降噪前、后的波形图和幅值频谱图;
5)待程序运行完毕,观察最后一次降噪的幅值频谱图,和原噪声进行比较是否达到了降噪的效果,如不满足需要进行调试,再次重复实验;
6)满足要求后,结束程序,拆除实验平台,整理实验设备;
7)整理相关实验图片和数据,进行数据分析;
8)分析实验误差,得出结论并撰写实验报告。
五、实验过程
实验平台搭建过程:
1)选择相对安静的空间环境,将平整的桌面当做实验平台;
2)将这对音箱间隔合适的距离对放,并且使发声源在一条直线上,连接电脑USB接口加耳机接口,将其中一个声道当做噪声源,另一个声道做次生源;(本实验并没有选择添加声道)
3)把麦克风的接收点放置在上述直线上的任意一点,保持稳定位置不变,连接电脑的USB接口,作为声音传感器。
正式实验过程:
1)选择噪声频率1100Hz,声源持续时间为120s,次生源除了相位值与原噪声不同,其余一致,检测控制时间为3s一个循环,目的就是不断改变相位,一切准备就绪,运行程序;
2)第一步为检测程序,结果会识别出原噪声的频率以及相应的幅值,会首先输出两幅图,分别是原噪声信号波形图和幅值频谱图,如图8所示:
图8检测原噪声程序输出结果
3)第二步为降噪第一阶段,次生源会发出和原噪声一致的声信号,以pi/3为精度,不断移动次生源的相位,直到筛选出目标相位(相邻两点叠加后信号的幅值小于原噪声的幅值),此时跳出该循环,并输出另外两幅图,即第一步降噪的信号波形图和幅值频谱图,如图9所示:
图9第一步降噪程序输出结果
4)第三步为降噪第二阶段,目标函数进入第二个循环,以pi/12为精度,不断移动次生源的相位,直到筛选出目标相位(叠加后信号的幅值降低50%),此时跳出该循环,并输出两幅图,即第二步降噪的信号波形图和幅值频谱图,如图10所示:
图10第二步降噪程序输出结果
5)第四步为降噪第三阶段,目标函数进入第三个循环,以pi/24为精度,不断移动次生源的相位,直到筛选出目标相位(叠加后信号的幅值降低70%),此时跳出该循环,次生源便以该相位值持续发出信号,即持续降噪效果,输出最后两幅图,即第三步降噪的信号波形图和幅值频谱图,如图11所示:
图11第三步降噪程序输出结果
6)若实验能够成功运行,则结束运行程序,整理实验器材,分析实验数据,并做误差分析。
六、程序代码及解释
Fs=8192;%采样频率为8192
t=1:
(120*Fs);%定原噪声发声时间为120s
yy=zeros(2,120*Fs);%建立两行零矩阵,以存储双声道不同的声信号
yy(1,:
)=40*sin(2*pi*1100*(t/Fs)-pi/3);%原噪声的发声程序,频率1100Hz
sound(yy,Fs);%Matlab发声代码
Y=audiorecorder(Fs,16,1);%Matlab声卡采集代码,采样精度为16,单声道
disp('Startspeaking.');
recordblocking(Y,3);%声音收集时间为3s
disp('EndofRecording.');
y=getaudiodata(Y);%Matlab声信号转化为数值代码
figure
(1);%Matlab画图代码
subplot(241);
plot(y);%第一幅图原噪声波形图
xlabel('time');
ylabel('fuzhi');
title('原信号波形图');
X=fft(y,Fs);%进行傅里叶变换
ff=1:
Fs;
z=abs(X);%将傅里叶变换的结果取绝对值
z(1:
100)=0;%去除0附近的干扰值
z(8000:
8192)=0;
subplot(242);
plot(ff,z);%第二幅图原噪声幅值频谱图
title('原信号幅值频谱图');
k=find(z==max(z));%找出收集信号幅值最大点对应的频率
f=min(k)-1;%取两者较小的频率
y2=(2*max(z))/Fs;%以该公式作为衡量幅值大小的工具
phi=0;%定初始相位0
n=1;%引入变量n,初值赋予1
a=zeros(1,100);%用此矩阵实时检测每次循环的降噪效果
b=zeros(1,100);
whilen>-3
yy(2,:
)=40*sin(2*pi*f*(t/Fs)+phi);%次生源的发声程序
sound(yy,Fs);
Y1=audiorecorder(Fs,16,1);
disp('Startspeaking.');
recordblocking(Y1,3);%以3秒为一个检测周期
disp('EndofRecording.');
y3=getaudiodata(Y1);
subplot(243);
plot(y3);%第三幅图第一步降噪的波形图
xlabel('time');
ylabel('fuzhi');
title('降噪1波形图');
X2=fft(y3,Fs);%进行傅里叶变换
z=abs(X2);
z(1:
100)=0;
Y2=(2*max(z))/Fs;%使用和衡量原噪声幅值一样的公式
subplot(244);
plot(ff,z);%第四幅图第一步降噪的幅值频谱图
title('降噪1幅值频谱图');
ifY2>=y2%若降噪后的幅值大于原噪声幅值
phi=phi+pi/3;%将次生源相位向左移动pi/3个单位
else
phi=phi+pi/6/n;%否则向左移动pi/6个单位
n=-(abs(n)+1);%跳出该程序
end
end
print(1,'-dpng','test1');%将输出图片放在相应的文件夹内
n=2;%变量n赋予2
i=1;%过程监测变量
phi=phi+pi/3/(2^n);%第一个循环结果的相位值向左移动pi/12
whilen<=2
y4=y2*2*cos(pi/2-pi/3/(2^n));%设定第二步降噪的目标精度是50%
yy(2,:
)=40*sin(2*pi*f*(t/Fs)+phi);%次生源的发声程序
sound(yy,Fs);
Y1=audiorecorder(Fs,16,1);
disp('Startspeaking.');
recordblocking(Y1,3);%以3秒为一个检测周期
disp('EndofRecording.');
y3=getaudiodata(Y1);
subplot(245);
plot(y3);%第五幅图第二步降噪的波形图
xlabel('time');
ylabel('fuzhi');
title('降噪2波形图');
X2=fft(y3,Fs);%进行傅里叶变换
z=abs(X2);
z(1:
100)=0;
subplot(246);
plot(ff,z);%第六幅图第二步降噪的幅值频谱图
title('降噪2幅值频谱图');
Y2=2*max(z)/Fs;%使用和衡量原噪声幅值一样的公式
ifY2>=y4%若降噪后的幅值未满足效果要求
phi=phi-pi/3/(2^n);%将次生源相位向右移动pi/12个单位
else
n=n+1;%否则跳出该程序
phi=phi-pi/3/(2^n);
end
print(1,'-dpng',strcat('C:
\Users\zhuanlin\Documents\MATLAB\3',num2str(i),'.png'));%将输出图片放在相应的文件夹内
a(i)=Y2;
i=i+1;
end
phi=phi+pi/3/(2^n);
i=1;
whilen<=3
y5=y2*0.3;%设定第三步降噪的目标精度是70%
yy(2,:
)=40*sin(2*pi*f*(t/Fs)+phi);%次生源的发声程序
sound(yy,Fs);
Y1=audiorecorder(Fs,16,1);
disp('Startspeaking.');
recordblocking(Y1,3);%以3秒为一个检测周期
disp('EndofRecording.');
y3=getaudiodata(Y1);
subplot(247);
plot(y3);%第七幅图第三步降噪的波形图
xlabel('timet');
ylabel('fuzhin');
title('降噪3波形图');
X2=fft(y3,Fs);%进行傅里叶变换
z=abs(X2);
z(1:
100)=0;
subplot(248);
plot(ff,z);%第八幅图第三步降噪的幅值频谱图
title('降噪3幅值频谱图');
Y2=2*max(z)/Fs;%使用和衡量原噪声幅值一样的公式
b(i)=Y2;
ifY2>=y5%若降噪后的幅值未满足效果要求
phi=phi-pi/3/(2^n);%将次生源相位向右移动pi/24个单位
else
n=n+1;%否则跳出该程序
end
print(1,'-dpng',strcat('C:
\Users\zhuanlin\Documents\MATLAB\3',num2str(i),'.png'));%将输出图片放在相应的文件夹内
i=i+1;
end
yy(2,:
)=40*sin(2*pi*f*(t/Fs)+phi);%次生源会一直发出最佳相位所对应的声信号
sound(yy,Fs);
七、实验数据观察及解释
本实验整体结果图如图12所示:
图12降噪结果
1)从第二幅图中可以看出,原噪声频率1100Hz下对应的幅值在Matlab标度下对应值为36.5;
2)在第四幅图中,以pi/3为相位移动精度的第一步降噪结果幅值为22.5,降噪效果为38%;
3)从第六幅图中可以发现,以pi/12为相位移动精度结果,幅值最大时对应的声音频率并不是1100Hz,经分析是由于外界干扰,尽管如此原噪声仍然达到了50%的降噪效果;
4)最后一幅图以pi/24为相位移动精度,显示的幅值大小为13.5,降噪效果73%,非常理想;
5)降噪效果同时也可以根据这几个处理过程的波形图观察得出。
八、误差分析
本次实验结果显示降噪效果为73%,效果在我们小组数次尝试过程中是相对较好的,但是距离完全消除噪声仍有一段差距,从理论上讲也不可能有100%的降噪效果,本实验结果达到了实验要求,下面主要从仪器误差、方法误差、人为误差三方面来分析造成实验结果误差的原因。
1)仪器误差
使用Matlab发声程序会有误差,程序已经运行了但是由于计算机的音箱还没有完全打开,导致前部分的发声信号不完整;所使用的音箱左右声道发出的声音并不是完全一致的,而且放置的位置也不可能完全达到在同一条直线上;声音传感器接收的声信号与程序编写的也会有误差,接收点的位置不同也会影响实验效果。
2)方法误差
我们采用的主动降噪方法即为声波的叠加原理,但是由于声波是球面波,叠加的时候并不是简单的公式相加,会有不定向的干涉,而且我们小组并没有采用声道,这也大大增加了误差的可能性。
3)人为误差
尽管我们选择了相对安静的环境,但是我们仍然不能保证没有其它频率的声波干扰(相同频率的干扰误差更大),就如图10所示的现象,其它频率声音的幅值大于我们噪声的幅值也是非常有可能的,我们仅通过观察幅值频谱图而没有观察波形图,其实已经大大降低了误差的可能性,在以后的学习中我们将学习运用滤波器函数,使显示结果更加直观、清晰。
九、实验感想
通过对本实验的原理、实验设计、实验过程到最后效果的检验,我们小组的同学学到了很多东西。
本身声学方面我们机械专业涉及的就相对较少,只在大学物理课程中有初步的理解,这次对声波的叠加原理有了更加深层次的认识。
由于主动降噪在生活中会有比较实用的价值,我们的实验设计思想在以后仍然会有用处。
本次实验的最大难处就是编程,同样我们机械专业的同学编程能力普遍较弱,但是鉴于这次机会,我们小组的同学该能力有了不错的提升,既然决定用Matlab编程,我们就借鉴的网上的循环语句思想,不断修改程序并进行实验验证,整个过程大致持续了5~6周的时间,才达到了最终的效果。
声学实验本身就是比较烦躁,我们小组反反复复做这个实验,也体现了我们团队协作能力和吃苦耐劳精神,在此过程中朱安林同学的贡献最大。
最后感谢王旭永老师的指导和帮助。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Matlab 主动 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)