收藏 分销(赏)

matlab频谱分析仪.doc

上传人:二*** 文档编号:4594988 上传时间:2024-09-30 格式:DOC 页数:15 大小:626KB
下载 相关 举报
matlab频谱分析仪.doc_第1页
第1页 / 共15页
本文档共15页,全文阅读请下载到手机保存,查看更方便
资源描述
频谱分析仪 摘要 频谱分析仪是研究电信号频谱结构的仪器,用于信号失真度、调制度、谱纯度、频率稳定度和交调失真等信号参数的测量,是一种多用途的电子测量仪器。随着软硬件技术的发展,仪器的智能化与虚拟化已成为未来实验室及研究机构的发展方向。虚拟仪器技术的优势在于可由用户定义自己的专用仪器系统,且功能灵活,很容易构建,所以应用面极为广泛。本文介绍了一种使用GUI工具箱用matlab实现的简易虚拟频谱分析仪的设计方法。 关键词 matlab,频谱分析仪,时域分析,频域分析 目录 1概述 3 2技术路线 4 3实现方法 5 3.1搭建GUI界面 5 3.2信号输入 6 3.2.1选择信号输入 6 3.2.2声卡输入 7 3.2.3读取wav文件 7 3.2.4信号发生器输入 7 3.3时域分析 8 3.4频域分析 9 3.5仿真 10 3.5.1声卡输入 10 3.5.2读取wav文件 10 3.5.3信号发生器 11 4存在的问题 15 5致谢 15 参考文献 15 1概述 MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件。可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。图形用户界面(Graphical User Interface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。MATLAB自带了强大的GUl工具[1]。在本文中,将利用MATLAB的GUI工具,设计出数字频谱分析仪。 频谱分析仪是研究电信号频谱结构的仪器,用于信号失真度、调制度、谱纯度、频率稳定度和交调失真等信号参数的测量,可用以测量放大器和滤波器等电路系统的某些参数,是一种多用途的电子测量仪器。它又可称为频域示波器、跟踪示波器、分析示波器、谐波分析器、频率特性分析仪或傅里叶分析仪等。现代频谱分析仪能以模拟方式或数字方式显示分析结果,能分析1赫兹以下的甚低频到亚毫米波段的全部无线电频段的电信号[2]。目前已经有许多较成熟的频谱分析软件,如SpectraLAB、RSAVu、dBFA等[3]。本文将给出的则是通过MATLAB软件实现的基于FFT的数字频谱分析仪。 FFT(Fast Fourier Transformation),即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。它对傅氏变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步[4]。 通过此次设计,能进一步掌握MATLAB软件开发过程的基本理论、基本知识和基本技能,熟悉基于MATLAB平台的若干信号处理系统开发及调试方法,且成本低,易于实现,容易修改,并可以进行仿真。该设计的进行可以为我们以后的学习工作奠定一定的基础。 2技术路线 本次设计的频谱分析仪模块划分如图1所示: 图1 频谱分析仪模块划分 3实现方法 3.1搭建GUI界面 此次设计搭建的GUI见面如图2所示: 图2 GUI界面 最上方为标题区,用于显示软件标题等信息。再往下是信号输入区,首先应输入采样频率和采样点。信号有3种输入方式,包括声卡输入,读取WAV文件和信号发生器输入。在信号发生器中加入了信号叠加选项,从而可以将产生的信号与原有的信号进行混迭。只有当某个单选框被选中时才允许使用对应的输入框、按钮等。 输入区右边为分析区,除了对wav文件进行播放外,还可以对信号进行时域分析和频域分析,该软件的核心代码都在这两个按钮的回调函数中。 再下方为分析结果区,用于显示波形基本参数与统计量的计算结果, Axes1为波形显示区,在录音结束、打开WAV文件成功或者信号发生器生成波形时会更新显示。Axes2为频谱图显示区,用于显示各种频谱的谱线,在点击频域分析后会更新显示。点击频谱类型可以显示不同的频谱图。本次设计提供了幅频特性分析和相频特性分析。 3.2信号输入 3.2.1选择信号输入 开始使用频谱分析仪时,除了需要设定采样频率和采样点数外,还需要选择信号输入方式,本次设计提供三种输入,分别是:声卡录音,读取wav文件和信号发生器。其代码如下(仅以选择声卡输入为例): function record_Callback(hObject, eventdata, handles) set(handles.record,'value',1); set(handles.wavfile,'value',0); set(handles.wave,'value',0); h=findobj('Tag','recordtime'); set(h,'enable','on'); h=findobj('Tag','startrecord'); set(h,'enable','on'); h=findobj('Tag','wavname'); set(h,'enable','off'); h=findobj('Tag','openfile'); set(h,'enable','off'); h=findobj('Tag','inwave'); set(h,'enable','off'); h=findobj('Tag','inamp'); set(h,'enable','off'); h=findobj('Tag','infre'); set(h,'enable','off'); h=findobj('Tag','inpha'); set(h,'enable','off'); h=findobj('Tag','mix'); set(h,'enable','off'); h=findobj('Tag','wavemake'); set(h,'enable','off'); 当选择了一种输入方式之后,另外两种输入方式将不能使用。 3.2.2声卡输入 这里声卡输入是指由麦克风录音得到的声音信号的输入,MATLAB提供了wavrecord函数,该函数能够实现读取麦克风录音信号。 声卡输入的主要代码如下所示[5]: function startrecord_Callback(hObject, eventdata, handles) Fs=str2double(get(handles.samplefre,'String')); N=str2double(get(handles.recordtime,'String'))*Fs; handles.y=wavrecord(N, Fs,'double'); handles.inputtype=1; guidata(hObject,handles); plot(handles.axes1,handles.y); ysize=size(handles.y); set(handles.samplenum,'String',num2str(ysize(1))); 3.2.3读取wav文件 MATLAB提供了wavread函数,该函数能够方便的打开并读取WAV文件中的声音信息。其代码如下: function openfile_Callback(hObject, eventdata, handles) [filename,filepath]=uigetfile('*.wav','wavfile'); set(handles.wavname,'string',filename); [handles.y,Fs,bit]=wavread(filename); handles.inputtype=2; guidata(hObject,handles); plot(handles.axes1,(1:length(handles.y))/Fs,handles.y); ysize=size(handles.y); set(handles.samplenum,'String',num2str(ysize(1))); set(handles.samplefre,'string',Fs); 3.2.4信号发生器输入 MATLAB可以产生标准信号,如sin能够产生正弦波,首先利用get函数获得波形,频率f,幅值a和相位p,然后判断是否有信号叠加,若无叠加,则直接生成信号波形,如有叠加,则进行信号混叠。 function wavemake_Callback(hObject, eventdata, handles) Fs=str2double(get(handles.samplefre,'String')); N=str2double(get(handles.samplenum,'String')); x=linspace(0,N/Fs,N); t=get(handles.inwave,'Value'); f=str2double(get(handles.infre,'String')); a=str2double(get(handles.inamp,'String')); p=str2double(get(handles.inpha,'String')); switch t case 1 y=a*sin(2*pi*x*f+p); case 2 y=a*sign(sin(2*pi*x*f+p)); case 3 y=a*sawtooth(2*pi*x*f+p,0.5); case 4 y=a*sawtooth(2*pi*x*f+p); case 5 y=a*(2*rand(size(x))-1); end if get(handles.mix,'Value')==0.0 handles.y=y; else handles.y=handles.y+y; end handles.inputtype=3; guidata(hObject,handles); plot(handles.axes1,handles.y); xlim([0 200]); 3.3时域分析 时域分析直接在时间域内对系统动态过程进行研究的方法。根据输出量的时域表达式,可以分析系统的稳定性、瞬态和稳态性能。该设计中,时域分析包括峰峰值、均值、均方值、方差的计算。MATLAB提供了mean,std等函数,能够方便地计算均值、方差。主要设计代码如下: function pushbutton3_Callback(hObject, eventdata, handles) Fs=str2double(get(handles.samplefre,'String')); N=str2double(get(handles.samplenum,'String')); set(handles.VPP,'String',(max(handles.y)-min(handles.y))); set(handles.ave,'String',mean(handles.y)); set(handles.RMS,'String',mean(handles.y.^2)); set(handles.var,'String',std(handles.y)^2); 3.4频域分析 频域分析包括幅值谱、相位谱等的计算,结果以图形显示出来。频域分析需要作Fourier变换,MATLAB提供了fft函数,能够方便地实现快速Fourier变换算法。本次设计中,除了能从图形看出频率,幅值等信息,也可以用坐标捕获来获取坐标值。主要代码如下: %频域分析代码[6]: function pushbutton4_Callback(hObject, eventdata, handles) Fs=str2double(get(handles.samplefre,'String')); N=str2double(get(handles.samplenum,'String')); sample=handles.y; f=linspace(0,Fs/2,N/2); P=2*fft(sample,N)/N; Pyy=sqrt(P.* conj(P)); a=get(handles.popupmenu1,'Value'); switch a case 1 plot(handles.axes2,f,Pyy(1:N/2)); case 2 plot(handles.axes2,f,angle(P(1:N/2))); case 3 plot(handles.axes2,f,real(P(1:N/2))); case 4 plot(handles.axes2,f,imag(P(1:N/2))); case 5 plot(handles.axes2,f,abs(P(1:N/2)).^2); end %坐标捕获代码: function pushbutton5_Callback(hObject, eventdata, handles) [xaxis,yaxis]=ginput(1); set(handles.amp,'string',xaxis); set(handles.phase,'string',yaxis); 3.5仿真 3.5.1声卡输入 选择录音,设定录音时间,点击开始录音按钮进行录音,录音完成后将在图形区axes1内显示波形,对其进行频谱分析,结果如图3所示: 图3 声卡输入 3.5.2读取wav文件 选择wav文件,对其进行频域分析(仅以幅频特性为例),结果如图4所示: 图4 wav文件幅频特性 3.5.3信号发生器 设置波形,幅值,频率,相位等信息,生成波形,并对其进行时域分析和频域分析,通过坐标获取获得峰值坐标。 对幅值为13,频率500,相位10的正弦波进行幅频特性分析结果如图5所示: 图5 正弦信号幅频特性 将幅值23,频率330,相位10的正弦波和幅值15,频率500,相位30的方波进行叠加,相频特性如图6所示: 图6 叠加信号相频特性 对幅值为24,频率400,相位0的正弦信号频谱分析,结果如图7所示: 图7 正弦信号相频特性 其他特性分析结果如图8—10所示: 图8 三角波实频特性 图9 锯齿波虚频特性 图10 白噪声功率谱 4存在的问题 本次设计虽然基本实现了频谱分析仪的要求,但是还是存在一些不足。比如未实现加窗功能,坐标捕获所得的峰值坐标不够精确等。对于加窗,我进行了尝试,但是因为知识所限,时间较短,最后以失败告终。在后面的学习中,有机会将进行研究。 参考文献 [1]. 张志涌等.精通MATLAB [M].北京:北京航空航天大学出版社,2003. [2]. [3]. 基于MATLAB的声音信号频谱分析仪设计. [4]. [5] 李亚微, 郭敏. 基于Matlab的音频数据采集系统. 语音技术,2007.03. [6]. 胡成西. 基于MATLAB的信号分析仪器仿真. 青海师范大学学报, 2005.1. 15
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服