实验八:音频频谱分析仪设计与实现.doc_第1页
实验八:音频频谱分析仪设计与实现.doc_第2页
实验八:音频频谱分析仪设计与实现.doc_第3页
实验八:音频频谱分析仪设计与实现.doc_第4页
实验八:音频频谱分析仪设计与实现.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验八:音频频谱分析仪设计与实现一、实验原理:MATLAB是一个数据分析和处理功能十分强大的工程实用软件,其数据采集工具箱为实现数据的输入和输出提供了十分方便的函数和命令。本实验要求基于声卡与MATLAB实现音频信号频谱分析仪的设计原理与实现,功能包括:(1)音频信号输入,从声卡输入,从WAV文件输入,从标准信号发生器输入;(2)信号波形分析,包括幅值,频率,周期,相位的估计,以及统计量峰值,均值,均方值和方差的计算;(3)信号频谱分析,频率,周期的估计,图形显示幅值谱,相位谱,实频谱,虚频谱和功率谱的曲线。1.频率(周期)检测对周期信号来说,可以用时域波形分析来确定信号的周期,也就是计算相邻的两个信号波峰的时间差,或过零点的时间差。这里采用过零点(t)的时间差T(周期)。频率即为频率即为f=1/T,由于能够求得多个T值,故采用他们的平均值作为周期的估计值。2.幅值检测在一个周期内,求出信号最大值与最小值的差得一半记为A,同样得到多个A值,但第一个A值对应的和不是在一个周期内搜索得到的,故以除第一个以外的A值的平均作为幅值的估计值。3.相位检测采用过零法,即通过判断与同频零相位信号过零点时刻,计算其时间差,然后换成相应的相位差。,同样以的平均值作为相位的估计值。4.数字信号统计量估计 (1)峰值P的估计 在样本数据x中找出最大值与最小值,其差为双峰值,双峰值的一半即为峰值。 P=0.5max(y)-min(y) (2)均值估计 N为样本容量。 (3)均方值估计 (4)方差估计 5.频谱分析原理时域分析只能反映信号的幅值随时间的变化情况,除但频率分量的简单波形外,很难明确提示信号的频率组成和各频率分量大小,而频谱分析能很好的解决此问题。(1)DFT与FFT对于给定的时域信号y,可以通过Fourier变换得到频域信息Y。Y可按下式计算式中,N为样本容量,t = 1/Fs为采样间隔。采样信号的频谱是一个连续的频谱,不可能计算出所有的点的值,故采用离散Fourier变换(DFT),即式中,f = Fs/N。但上式的计算效率很低,因为有大量的指数(等价于三角函数)运算,故实际中多采用快速Fourier变换(FFT)。其原理即是将重复的三角函数算计的中间结果保存起来,以减少重复三角函数计算带来的时间浪费。由于三角函数计算的重复量相当大,故FFT能极大地提高运算效率。(2)频率、周期的估计对于Y(kf),如果当kf = 时,Y(kf)取最大值,则为频率的估计值,由于采样间隔的误差,也存在误差,其误差最大为f / 2,周期T=1/f。从原理上可以看出,如果在标准信号中混有噪声,用上述方法仍能够精确地估计出原标准信号的频率和周期。(3)频谱图为了直观地表示信号的频率特性,工程上常常将Fourier变换的结果用图形的方式表示,即频谱图。以频率f为横坐标,|Y(f)|为纵坐标,可以得到幅值谱;以频率f为横坐标,arg Y(f)为纵坐标,可以得到相位谱;以频率f为横坐标,Re Y(f)为纵坐标,可以得到实频谱;以频率f为横坐标,Im Y(f)为纵坐标,可以得到虚频谱。根据采样定理,只有频率不超过Fs/2的信号才能被正确采集,即Fourier变换的结果中频率大于Fs/2的部分是不正确的部分,故不在频谱图中显示。即横坐标f 0, Fs/2(4)模块划分模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成制定的功能,满足用户需求。在模块分化时应遵循如下原则:改进软件结构提高模块独立性;模块规模应该适中;深度、宽度、扇出和扇入都应适当;模块的作用域应该在控制域之内;力争降低模块接口的复杂程度;设计单入口单出口的模块;模块功能应该可以预测。二、实验内容:参考给定的代码,构建交互界面,设计一个音频频谱分析仪,实现相应的功能。程序文本:function varargout = GGfig(varargin)% GGFIG M-file for GGfig.fig% GGFIG, by itself, creates a new GGFIG or raises the existing% singleton*.% H = GGFIG returns the handle to a new GGFIG or the handle to% the existing singleton*.% GGFIG(CALLBACK,hObject,eventData,handles,.) calls the local% function named CALLBACK in GGFIG.M with the given input arguments.% GGFIG(Property,Value,.) creates a new GGFIG or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before GGfig_OpeningFunction gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to GGfig_OpeningFcn via varargin.% *See GUI Options on GUIDEs Tools menu. Choose GUI allows only one% instance to run (singleton).% See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help GGfig % Last Modified by GUIDE v2.5 26-Dec-2014 21:19:45 % Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_OpeningFcn, GGfig_OpeningFcn, . gui_OutputFcn, GGfig_OutputFcn, . gui_LayoutFcn, , . gui_Callback, );if nargin & ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);end if nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end% End initialization code - DO NOT EDIT % - Executes just before GGfig is made visible.function GGfig_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to GGfig (see VARARGIN) % Choose default command line output for GGfighandles.output = hObject; % Update handles structureguidata(hObject, handles); % UIWAIT makes zhaiqi wait for user response (see UIRESUME)% uiwait(handles.figure1); % - Outputs from this function are returned to the command line.function varargout = GGfig_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structurevarargout1 = handles.output; % - Executes on button press in inputradiobutton.function inputradiobutton_Callback(hObject, eventdata, handles)% hObject handle to inputradiobutton (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,Value) returns toggle state of inputradiobuttonfunction filename_Callback(hObject, eventdata, handles)% hObject handle to filename (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,String) returns contents of filename as text% str2double(get(hObject,String) returns contents of filename as a double % - Executes during object creation, after setting all properties.function filename_CreateFcn(hObject, eventdata, handles)% hObject handle to filename (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);end % - Executes on button press in pushbutton1.function pushbutton1_Callback(hObject, eventdata, handles)filename,pathname=uigetfile(*.wav);set(handles.filename,String,filename);% hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)temp = wavread(get(findobj(Tag,filename),String);channel = str2double(get(handles.channelinput,String);handles.y = temp(:,channel);plot(handles.axes3,0:length(handles.y)-1,handles.y);%波形title(波形);guidata(hObject, handles);ysize = size(handles.y);set(handles.edit4,String,num2str(ysize(1);set(handles.edit20,String,num2str(ysize(1); function channelinput_Callback(hObject, eventdata, handles)% hObject handle to channelinput (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,String) returns contents of channelinput as text% str2double(get(hObject,String) returns contents of channelinput as a double % - Executes during object creation, after setting all properties.function channelinput_CreateFcn(hObject, eventdata, handles)% hObject handle to channelinput (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);end function edit3_Callback(hObject, eventdata, handles)% hObject handle to edit3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,String) returns contents of edit3 as text% str2double(get(hObject,String) returns contents of edit3 as a double % - Executes during object creation, after setting all properties.function edit3_CreateFcn(hObject, eventdata, handles)% hObject handle to edit3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);end function edit4_Callback(hObject, eventdata, handles)% hObject handle to edit4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,String) returns contents of edit4 as text% str2double(get(hObject,String) returns contents of edit4 as a double % - Executes during object creation, after setting all properties.function edit4_CreateFcn(hObject, eventdata, handles)% hObject handle to edit4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);end% - Executes on mouse press over axes background.function axes2_ButtonDownFcn(hObject, eventdata, handles)% hObject handle to axes2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % - Executes on button press in pushbutton3.function pushbutton3_Callback(hObject, eventdata, handles)% hObject handle to pushbutton3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)from = str2double(get(findobj(Tag,edit19),String);to = str2double(get(findobj(Tag,edit20),String);Fs = str2double(get(findobj(Tag,edit3),String);temp2 = handles.y(from:to);H = fft(temp2,to-from+1);L = ceil(length(H)/2);n = 0:L-1; C,I = max(abs(H);set(handles.edit13,String,1/(n(I)/L*pi*Fs/2/pi);set(handles.edit14,String,(n(I)/L*pi*Fs/2/pi);if(I = 1)set(handles.edit13,String,无限长); set(handles.edit14,String,直流);end %guo ling jian cen=1;ymax=max(handles.y(1) handles.y(2);ymin=min(handles.y(1) handles.y(2);if from1 | to-from5; msgbox(Error range!); return;endfor i=from+2:to-1; if handles.y(i-1)0 & handles.y(i-2)=0 & handles.y(i+1)0 if handles.y(i)=0 ti(n)=i; else ti(n)=i-handles.y(i)/(handles.y(i)-handles.y(i-1);% x1=i-1;% y1=handles.y(i-1);% x2=i;% y2=handles.y(i);% a=handles.y(i)-handles.y(i-1);% b=a*x1-y1;% ti(n)=b/a; end amp(n)=(ymax-ymin)/2; ymax=0; ymin=0; n=n+1; else if ymaxhandles.y(i) ymin=handles.y(i); end endendn=n-1;%freqence and periodicityfor i=1:n-1 T(i)=ti(i+1)-ti(i);endfreq = Fs/mean(T);%计算频率set(handles.edit5,String,1/freq);%周期set(handles.edit6,String,num2str(freq);%频率%幅值set(handles.edit7,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.edit8,String,num2str(mean(phase);%峰值set(handles.edit9,String,(max(handles.y(from:to)-min(handles.y(from:to)/2);%均值set(handles.edit10,String,mean(handles.y(from:to);%均方值set(handles.edit11,String,mean(handles.y(from:to).2);%半方差set(handles.edit12,String,std(handles.y(from:to)2);function pushbutton8_Callback(hObject, eventdata, handles)% hObject handle to pushbutton3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)from = str2double(get(findobj(Tag,edit19),String);to = str2double(get(findobj(Tag,edit20),String);Fs = str2double(get(findobj(Tag,edit3),String);temp2 = handles.y(from:to);H = fft(temp2,to-from+1);L = ceil(length(H)/2);n = 0:L-1;plot(handles.axes2,n/L*Fs/2/1000,2*sqrt(H(1:L).*conj(H(1:L);%幅度谱grid;plot(handles.axes4,n/L*Fs/2/1000,angle(H(1:L);%相位谱plot(handles.axes5,n/L*Fs/2/1000,real(H(1:L);%实频plot(handles.axes6,n/L*Fs/2/1000,imag(H(1:L);%虚频plot(handles.axes7,n/L*Fs/2/1000,abs(H(1:L).2);%功率谱 C,I = max(abs(H);set(handles.edit13,String,1/(n(I)/L*pi*Fs/2/pi);set(handles.edit14,String,(n(I)/L*pi*Fs/2/pi);if(I = 1)set(handles.edit13,String,无限长); set(handles.edit14,String,直流);end %guo ling jian cen=1;ymax=max(handles.y(1) handles.y(2);ymin=min(handles.y(1) handles.y(2);if from1 | to-from5; msgbox(Error range!); return;endfor i=from+2:to-1; if handles.y(i-1)0 & handles.y(i-2)=0 & handles.y(i+1)0 if handles.y(i)=0 ti(n)=i; else ti(n)=i-handles.y(i)/(handles.y(i)-handles.y(i-1);% x1=i-1;% y1=handles.y(i-1);% x2=i;% y2=handles.y(i);% a=handles.y(i)-handles.y(i-1);% b=a*x1-y1;% ti(n)=b/a; end amp(n)=(ymax-ymin)/2; ymax=0; ymin=0; n=n+1; else if ymaxhandles.y(i) ymin=handles.y(i); end endendn=n-1;%freqence and periodicityfor i=1:n-1 T(i)=ti(i+1)-ti(i);endfunction edit5_Callback(hObject, eventdata, handles)% hObject handle to edit5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,String) returns contents of edit5 as text% str2double(get(hObject,String) returns contents of edit5 as a double % - Executes during object creation, after setting all properties.function edit5_CreateFcn(hObject, eventdata, handles)% hObject handle to edit5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);end function edit6_Callback(hObject, eventdata, handles)% hObject handle to edit6 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,String) returns contents of edit6 as text% str2double(get(hObject,String) returns contents of edit6 as a double % - Executes during object creation, after setting all properties.function edit6_CreateFcn(hObject, eventdata, handles)% hObject handle to edit6 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);end function edit7_Callback(hObject, eventdata, handles)% hObject handle to edit7 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,String) returns contents of edit7 as text% str2double(get(hObject,String) returns contents of edit7 as a double % - Executes during object creation, after setting all properties.function edit7_CreateFcn(hObject, eventdata, handles)% hObject handle to edit7 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);end function edit8_Callback(hObject, eventdata, handles)% hObject handle to edit8 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,String) returns contents of edit8 as text% str2double(get(hObject,String) returns contents of edit8 as a double % - Executes during object creation, after setting all properties.function edit8_CreateFcn(hObject, eventdata, handles)% hObject handle to edit8 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);end function edit9_Callback(hObject, eventdata, handles)% hObject handle to edit9 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论