matlab gui 频谱分析仪.doc

上传人:豆**** 文档编号:33497220 上传时间:2022-08-11 格式:DOC 页数:14 大小:609.50KB
返回 下载 相关 举报
matlab gui 频谱分析仪.doc_第1页
第1页 / 共14页
matlab gui 频谱分析仪.doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《matlab gui 频谱分析仪.doc》由会员分享,可在线阅读,更多相关《matlab gui 频谱分析仪.doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-作者xxxx-日期xxxxmatlab gui 频谱分析仪【精品文档】 频谱分析仪实验报告 一:频谱分析仪的功能:(1) 音频信号信号输入。输入的途径包括从声卡、从WAV文件输入、从信号发生器输入; (2) 信号波形分析。包括幅值、频率、周期、相位的估计,并计算统计量的峰值、均值、均方值和方差等信息;GUI界面见附页(3) 信号频谱分析。频率、周期的估计,图形显示幅值谱、相位谱和功率谱等信息的曲线。 二:实验原理1. 时域抽样 时域抽样定理给出了连续信号抽样过程中信号不失真的约束条件:对于基带信号,信号抽样频率 大于等于2倍的信号最高频率。时域抽样是把连续信号 变成适于数字系统处理的离散信号

2、。2.快速傅里叶变换(FFT) 对有限长序列可以利用离散傅立叶变换(DFT)进行分析。DFT不但可以很好的反映序列的频谱特性,而且易于用快速算法(FFT)在计算机上进行分析。MATLAB为计算数据的离散快速傅立叶变换,提供了一系列丰富的数学函数,本设计用的为FFT3.波形分析原理(1)频率(周期)检测 对周期信号来说,可以用时域波形分析来确定信号的周期,也就是计算相邻的两个信号波峰的时间差、或过零点的时间差。这里采用过零点(ti)的时间差T(周期)。频率即为f = 1/T,由于能够求得多个T值(ti有多个),故采用它们的平均值作为周期的估计值。 (2)幅值检测 在一个周期内,求出信号最大值ym

3、ax与最小值ymin的差的一半,即A = (ymax - ymin)/2,同样,也会求出多个A值,但第1个A值对应的ymax和ymin不是在一个周期内搜索得到的,故以除第1个以外的A值的平均作为幅值的估计值。 (3)相位检测 采用过零法,即通过判断与同频零相位信号过零点时刻,计算其时间差,然后换成相应的相位差。=2(1-ti/T),x表示x的小数部分,同样,以的平均值作为相位的估计值。 (4) 峰值P的估计 在样本数据x中找出最大值与最小值,其差值为双峰值,双峰值的一半即为峰值。 P=max(yi)-min(yi)/2 (5)均值,均方值,方差,均有计算所得4,频谱图 为了直观地表示信号的频率

4、特性,工程上常常将Fourier变换的结果用图形的方式表示,即频谱图三:程序设计1、三种信号的输入方式(1)声卡的输入 这里声卡输入是指由麦克风录音得到的声音信号的输入,MATLAB提供了wavrecord函数,该函数能够实现读取麦克风录音信号。以下是“开始录音”按钮的回调函数内容。获得FS的值Fs=str2double(get(findobj(Tag,samplerate),String);根据设定的时间长度进行录音,保存在handles中,保存为double型handles.y=wavrecord(str2double(get(findobj(Tag,recordtime),String)

5、*Fs, Fs,double); handles.inputtype=1;保存handles结构体,使得在别的函数中也能使用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文件中的声音信息,并且同时读取所有声道。下面是“打开文件”按钮回调函数的

6、部分代码。绘制和保存采样点数代码与声卡输入的类似从WAV文件中读取的声音信息并临时存放到temp变量中temp = wavread(get(findobj(Tag,filename),String);获得所选择的声道channel=str2double(get(handles.channel,String);将指定声道的信息存放到中handles.y=temp(:,channel);(3)信号发生器 MATLAB有产生标准信号的函数,如sawtooth能够产生三角波或钜齿波,首先利用get函数获得波形soundtype,频率frequency,幅值amp和相位phase,然后是以下代码。 sw

7、itch soundtype case 1 正弦波 y=amp*sin(2*pi*x*frequency+phase); case 2 方波 y=amp*sign(sin(2*pi*x*frequency+phase); case 3 三角波 y=amp*sawtooth(2*pi*x*frequency+phase,0.5); case 4 锯齿波 y=amp*sawtooth(2*pi*x*frequency+phase); case 5 白噪声 y=amp*(2*rand(size(x)-1); otherwise errordlg(Illegal wave type,Choose er

8、rer);endif get(handles.add,Value handles.y=y; 没有混叠else 有混叠 handles.y=handles.y+y;end2、时域分析 MATLAB提供了mean,std函数,能够方便地计算均值、标准差。下面是过零检测之后的代码,其中T为过零检测得到的周期(向量),amp为过零检测得到的幅值(向量),n为过零点数。 freq=Fs/mean(T); %计算频率 set(handles.outt,String,1/freq); %输出周期估计值 set(handles.outfreq,String,num2str(freq); %输出频率估计值 %计

9、算并输出幅值,以幅值均值作为其估计 set(handles.outamp,String,num2str(mean(amp(2:n-1); %将待分析信号的过零点与标准信号的过零点相比较,从而得出相位 phase=2*pi*(1-(ti(1:n-1)-1)./T+floor(ti(1:n-1)-1)./T); set(handles.outphase,String,num2str(mean(phase); %最大值与最小值的一半即为峰值 set(handles.outpeak,String,(max(handles.y(from:to)-min(handles.y(from:to)/2); %f

10、rom,to即是界面中的“从第from点到第to点” %计算并输出均值 set(handles.outmean,String,mean(handles.y(from:to); %计算并输出均方值 set(handles.outmeansquare,String,mean(handles.y(from:to).2); %计算半输出方差 set(handles.outs,String,std(handles.y(from:to)2);3.频域分析频域分析需要作Fourier变换,MATLAB提供了fft函数,能够方便地实现快速Fourier变换算法。以下代码省去了从界面中获得from、to、Fs的

11、部分,也省去了绘图后设置横、纵坐标轴的名称的部分。 %首先提取出待分析的样本,将其存入sample中 sample=handles.y(from:to); %生成离散化的频率点,以采样频率作为离散化的间隔 f=linspace(0,Fs/2,(to-from+1)/2); %对样本作快速Fourier变换,变换结果存入Y中 Y=fft(sample,to-from+1); C,I=max(abs(Y); %获得幅值最大的点及其所对应的下标值I %则f(I)为最大的幅值所对应的频率,即信号频率的估计值 set(handles.foutt,String,1/f(I); %计算并输出周期的估计值 s

12、et(handles.foutfreq,String,f(I); %输出频率的估计值 Y=Y(1:(to-from+1)/2); %为与f对应,只取Y的前半部分 plot(handles.plot1,f,2*sqrt(Y.*conj(Y); %绘制幅值谱曲线 plot(handles.plot2,f,angle(Y); %绘制相位谱曲线 plot(handles.plot3,f,real(Y); %绘制实频谱曲线 plot(handles.plot4,f,imag(Y); %绘制虚频谱曲线 plot(handles.plot5,f,abs(Y).2); %绘制功率谱曲线 四、软件运行及结果分析

13、 1. 标准正弦信号的频率估计 用信号发生器生成标准正弦信号,然后分别进行时域分析与频域分析,得到的结果如图 4所示。从图中可以看出,时域分析的结果为f = 400Hz,频域分析的结果为f = 400.37Hz,而标准信号的频率为400Hz,从而对于标准信号时域分析的精度远高于频域分析的精度。2. 非标准正弦信号的频率估计 先生生幅值600的标准正弦信号,再将幅值300的白噪声信号与其混迭,对最终得到的信号进行时域分析与频域分析,结果如图 5所示,可以看出,时域分析的结果为f = Hz,频域分析的结果为f = Hz,而标准信号的频率为600Hz,从而对于带噪声的正弦信号频域分析的精度远高于时域分析的精度.五、小结 通过零检测的方式对于带噪声的信号既容易造成“误判”,也容易造成“漏判”,且噪声信号越明显,“误判”与“漏判”的可能性越大。但在没有噪声或噪声很小时,时域分析对每个周期长度的检测是没有累积误差的,故随着样本容量的增大,估计的精度大大提高。 但把信号进行傅里叶变换后,频率估计是通过找出幅值谱峰值点对应的频率求出。不存在零点误判的问题。但频率离散化的误差及栅栏效应却是不可避免地带来误差。 因此,在作频率估计时,如果没有干扰信号或干扰信号很小时,采用时域分析方法比较好;如果干扰信号大,采用频域分析方法比较好。附页,GUI界面【精品文档】

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁