基于MATLAB的声音信号频谱分析仪.docx
《基于MATLAB的声音信号频谱分析仪.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的声音信号频谱分析仪.docx(11页珍藏版)》请在冰豆网上搜索。
![基于MATLAB的声音信号频谱分析仪.docx](https://file1.bdocx.com/fileroot1/2023-2/9/4f6a9178-4d8d-4c92-9691-971f536963dd/4f6a9178-4d8d-4c92-9691-971f536963dd1.gif)
基于MATLAB的声音信号频谱分析仪
齐齐哈尔大学
综合实践1
题 目:
基于MATLAB的声音信号频谱分析仪
学 院:
专业班级:
学生姓名:
指导教师:
成 绩:
1.绪论
1.1概述
随着软硬件技术的发展,仪器的智能化与虚拟化已成为未来实验室及研究机构的发展方向。
虚拟仪器技术的优势在于可由用户定义自己的专用仪器系统,且功能灵活,很容易构建,所以应用面极为广泛。
基于计算机软硬件平台的虚拟仪器可代替传统的测量仪器,如示波器、逻辑分析仪、信号发生器、频谱分析仪等。
从发展史看,电子测量仪器经历了由模拟仪器、智能仪器到虚拟仪器,由于计算机性能的飞速发展,已把传统仪器远远抛到后面,并给虚拟仪器生产厂家不断带来连锅端的技术更新速率。
目前已经有许多较成熟的频谱分析软件,如SpectraLAB、RSAVu、dBFA等。
声卡是多媒体计算机最基本的配置硬件之一,价格便宜,使用软件,他的数据采集工具箱为实现数据的输入和输出提供了十分方便的函数和命令。
本文将给出基于声卡与MATLAB的声音信号频谱分析仪的设计原理与实现方法,功能包括:
(1)音频信号信号输入,从声卡输入、从WAV文件输入、从标准信号发生器输入;
(2)信号波形分析,包括幅值、频率、周期、相位的估计,以及统计量峰值、均值、均方值和方差的计算;
(3)信号频谱分析,频率、周期的估计,图形显示幅值谱、相位谱、实频谱、虚频谱和功率谱的曲线。
1.2MATLAB软件介绍
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB已成为国际公认的最优秀的科技应用软件之一,具有编程简单、数据可视化功能强、可操作性强等特点,而且配有功能强大、专业函数丰富的图像处理工具箱,是进行图像处理方面工作必备的软件工具。
MATLAB是矩阵实验室(MatrixLaboratory)的简称,和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
目前数字滤波器的设计有许多现成的高级语言设计程序,但他们都存在设计效率较低,不具有可视图形,不便于修改参数等缺点,而Matlab为数字滤波的研究和应用提供了一个直观、高效、便捷的工具。
它以矩阵运算为基础,把计算、可视化、程序设计融合到了一个交互式的工作环境中。
尤其是Matlab工具箱使各个领域的研究人员可以直观而方便地进行科学研究与工程应用。
其中的信号处理工具箱、图像处理工具箱、小波工具箱等更是为数字滤波研究的蓬勃发展提供了可能。
1.3频谱分析简介
利用傅里叶变换的方法对振动的信号进行分解,并按频率顺序展开,使其成为频率的函数,进而在频率域中对信号进行研究和处理的一种过程,称为频谱分析。
目的是将信号在时间域中的波形转变为频率域的频谱,进而可以对信号的信息作定量解释。
对信号进行频谱分析,是对其进行傅里叶变换,得到其振幅谱与相位谱。
分析软件主要为Matlab。
对于信号来说,分模拟信号与数字信号。
进行频谱分析时,对于模拟信号来说,首先对其进行抽样,使其离散化,然后利用离散福利叶变换(DFT)或者快速傅立叶变换(FFT),然后对其幅度(ABS)和相位(ANGLE)的图像进行分析,而对于数字信号来说,则可直接进行离散傅里叶变换或快速傅里叶变换。
频谱分析仪是频域测量仪器的代表性产品,它显示输入信号的基波和谐波幅度随频率的变化,测量功能多种样,包括频率、功率、噪声、电场强度等参数,属于最常用的频域仪器。
频谱分析仪主要的应用是广播、电视、通信和网络,随着这些应用越来越向更高频率发展,为解决频率资源不足的问题,它的测量范围已从RF频段扩展到微波频段。
为了统计的方便,划分频谱分析为3GHz、18GHz和26GHz三个区段,总销售额占全球通用量仪器市场的18%,仅次于示波器市场而居第二位。
当前,移动通信主要使用3GHz以下频段,并向3GHz以上扩展;卫星电视主要使用3GHz频率,亦向5GHz频段扩展;网络通信主要使用1GHz以下频段,开始向10GHz扩展;国防军事通信使用微波频段,光纤通信同样使用微波频段。
2.设计原理
2.1频谱分析原理
时域分析只能反映信号的幅值随时间的变化情况,除单频率分量的简单波形外,很难明确提示信号的频率组成和各频率分量大小,而频谱分析能很好的解决此问题。
由于从频域能获得的主要是频率信息,所以本节主要介绍频率(周期)的估计与频谱图的生成。
2.2.1DFT与FFT
对于给定的时域信号y,可以通过Fourier变换得到频域信息Y。
Y可按下式计算
式中,N为样本容量,Δt=1/Fs为采样间隔。
采样信号的频谱是一个连续的频谱,不可能计算出所有的点的值,故采用离散Fourier变换(DFT),即
式中,Δf=Fs/N。
但上式的计算效率很低,因为有大量的指数(等价于三角函数)运算,故实际中多采用快速Fourier变换(FFT)。
其原理即是将重复的三角函数算计的中间结果保存起来,以减少重复三角函数计算带来的时间浪费。
由于三角函数计算的重复量相当大,故FFT能极大地提高运算效率。
2.2.2频率、周期的估计
对于Y(kΔf),如果当kΔf=
时,Y(kΔf)取最大值,则
为频率的估计值,由于采样间隔的误差,
也存在误差,其误差最大为Δf/2。
周期T=1/f。
从原理上可以看出,如果在标准信号中混有噪声,用上述方法仍能够精确地估计出原标准信号的频率和周期,这个将在下一章做出验证
2.2.3频谱图
为了直观地表示信号的频率特性,工程上常常将Fourier变换的结果用图形的方式表示,即频谱图。
以频率f为横坐标,|Y(f)|为纵坐标,可以得到幅值谱;
以频率f为横坐标,argY(f)为纵坐标,可以得到相位谱;
以频率f为横坐标,ReY(f)为纵坐标,可以得到实频谱;
以频率f为横坐标,ImY(f)为纵坐标,可以得到虚频谱。
根据采样定理,只有频率不超过Fs/2的信号才能被正确采集,即Fourier变换的结果中频率大于Fs/2的部分是不正确的部分,故不在频谱图中显示。
即横坐标f∈[0,Fs/2]
2.3.模块划分
模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户需求。
根据人类解决一般问题的经验,如果一个问题由两个问题组合而成,那么它的复杂程度大于分别考虑每个问题时的复杂程度之和,也就是说把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。
这就是模块化的根据。
在模块划分时应遵循如下规则:
改进软件结构提高模块独立性;模块规模应该适中;深度、宽度、扇出和扇入都应适当;模块的作用域应该在控制域之内;力争降低模块接口的复杂程度;设计单入口单出口的模块;模块功能应该可以预测。
本着上述的启发式规则,对软件进行如图2所示的模块划分。
图2频谱分析仪的模块划分
2.4软件实现
2.4.1界面设计
MATLAB是Mathworks公司推出的数学软件,它将数值分析、矩阵计算、信号处理和图形显示结合在一起,为众多学科领域提供了一种简洁、高效的编程工具。
它提供的GUIDE工具为可视化编程工具,使得软件的界面设计像VB一样方便。
故本文采用MATLAB作为编程语言实现声音信号频谱分析仪,以下所讲的都是在MATLAB7.0环境中。
为了实现预期的功能,设计如图3所示的界面。
图3 频谱分析仪的界面设计
2.4.2输入模块的实现
采样频率Fs与采样点数N是声音信号输入时共同需要作用的参数,故将其独立出来。
下面为别介绍三种输入方式的实现。
(1)这里声卡输入是指由麦克风录音得到的声音信号的输入,MATLAB提供了wavrecord函数,该函数能够实现读取麦克风录音信号。
以下是“开始录音”按钮的回调函数内容。
%首先获得设定的Fs值
Fs=str2double(get(findobj('Tag','samplerate'),'String'));
%根据设定的录音时长进行录音,将其存入handles.y中
handles.y=wavrecord(str2double(get(handles.recordtime,'String'))*Fs,Fs,'int16');
%保存handles结构体,使得handles.y在别的函数中也能使用
guidata(hObject,handles);
%在波形显示区绘出波形
plot(handles.time,handles.y);
title('WAVE');
%将所采到的点的数量输出在“采样点数”中
ysize=size(handles.y)
set(handles.samplenum,'String',num2str(ysize
(1)));
(2)WAV文件输入:
MATLAB提供了wavread函数,该函数能够方便的打开并读取WAV文件中的声音信息,并且同时读取所有声道。
下面是“打开文件”按钮回调函数的部分代码。
其它代码与声卡输入的类似。
%从WAV文件中读取的声音信息并临时存放到temp变量中
temp=wavread(get(findobj('Tag','filename'),'String'));
%获得所选择的声道
channel=str2double(get(handles.channel,'String'));
%将指定声道的信息存放到handles.y中
handles.y=temp(:
channel);
(3)信号发生器:
MATLAB有产生标准信号的函数,如sawtooth能够产生三角波或钜齿波,首先利用get函数获得波形soundtype,频率frequency,幅值amp和相位phase,然后是以下代码。
switchsoundtype
case1 %标准正弦波
y=amp*sin(2*pi*x*frequency+phase);
case2 %方波
y=amp*sign(sin(2*pi*x*frequency+phase));
case3 %三角波
y=amp*sawtooth(2*pi*x*frequency+phase,0.5);
case4 %钜齿波
y=amp*sawtooth(2*pi*x*frequency+phase);
case5 %白噪声
y=amp*(2*rand(size(x))-1);
otherwise
errordlg('Illegalwavetype','Chooseerrer');
end
ifget(handles.add,'Value')==0.0
handles.y=y; %若没有勾选上“混迭”,则将生成的波形赋给handles.y
else %否则将生成的波形与原有波形叠加
handles.y=handles.y+y;
end
2.5.运行实例与误差分析
为了分析软件的性能并比较时域分析与频域分析各自的优势,本章给出了两种分析方法的频率估计的比较,分析软件的在时域和频域的计算精度问题。
2.5.1标准正弦信号的频率估计
用信号发生器生成标准正弦信号,然后分别进行时域分析与频域分析,得到的结果如图4所示。
从图中可以看出,时域分析的结果为f=400.3702Hz,频域分析的结果为f=417.959Hz,而标准信号的频率为400Hz,从而对于标准信号时域分析的精度远高于频域分析的精度。
图4标准正弦信号的频率估计
2.5.2带噪声的正弦信号的频率估计
先成生幅值100的标准正弦信号,再将幅值50的白噪声信号与其混迭,对最终得到的信号进行时域分析与频域分析,结果如图5所示,可以看出,时域分析的结果为f=158.9498Hz,频域分析的结果为f=200.391Hz,而标准信号的频率为200Hz,从而对于带噪声的正弦信号频域分析的精度远高于时域分析的精度。
图5带噪声的正弦信号的频率估计
2.5.3结果分析与结论
在时域,频率估计是使用过零检测的方式计算出,从而对于带噪声的信号既容易造成“误判”,也容易造成“漏判”,且噪声信号越明显,“误判”与“漏判”的可能性越大。
但在没有噪声或噪声很小时,时域分析对每个周期长度的检测是没有累积误差的,故随着样本容量的增大,估计的精度大大提高。
在频域,频率估计是通过找出幅值谱峰值点对应的频率求出。
故不会有时域分析的问题。
但频率离散化的误差及栅栏效应却是不可避免地带来误差,仅频率离散化的误差就大于Fs/2。
由实验结果及以上的分析可以得出结论:
在作频率估计时,如果信号的噪声很小,采用时域分析的方法较好;如果信号的噪声较大,采用频域分析的方法较好。
3.总结
本文给出了基于MATLAB的声音信号频谱分析仪的设计原理与实现方法,在原理部分,从时域和频域两个方面提供了信号分析所需要的算法流程及计算公式,在原理的最后还结合软件工程理论给出了软件的模块划分,这样在基于此设计原理的基础上可以用任何平台任何语言进行软件开发。
在实现方法上,结合软件的界面和具体的代码讲述了整个软件编码实现的原理。
最后结合一个运行实例比较了时域分析与频域分析计算频率的异同之处,并分析了误差的原因。
尽管MATLAB有强大的数学函数库,使得编程时间大大缩短,但MATLAB有它固有的缺陷,如运行速度太慢,因为它是解释型语言,而且运行依赖了MATLAB软件,无法发布为商用软件,另外在控制用户输入上也比较难以实现。
这些缺陷也导致了用MATLAB所开发的软件有这些缺陷。
通过这次课程设计相信对以后在社会上工作和学习会有很多帮助,让我们能更好的进入工作状态。
最重要的是,这次课程设计也增加了我们对问题的研究和探讨,在我们以后的学习中会有更多的帮助。
参考文献
[1]黄昱.软件频谱仪设计.华中科技大学硕士学位论文.2004.5
[2]肖旸,胡耀祖.基于虚拟技术的频谱分析仪器方案.微机发展,2003.6
[3]张桂林,张烈平.基于声卡和Matlab的虚拟信号发生器.现代电子技术
[4]张海藩.软件工程.北京:
人民邮电出版社,2002.3