




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、实验项目名称 音频频谱分析仪设计与实现没下载券联系企鹅241777728给你传原文件二、实验目的 构建交互界面,具有播放声音文件,显示波形与频谱,并可测量声音时域参数三、实验内容与步骤1.实验步骤音频信号频谱分析仪功能:(1) 音频信号输入,从声卡输入、从WAV文件输入、从标准信号发生器输入;(2) 信号波形分析,包括幅值、频率、周期、相位的估计,以及统计量峰值、均值、均方值和方差的计算;(3) 信号频谱分析,频率、周期的估计,图形显示幅值谱、相位谱、实频谱、虚频谱和功率谱的曲线2. 实验内容 参考以上界面,查阅相关资料,构建交互界面,设计一个音频频谱分析仪,实现相应的功能。四、实验环境计算机matlab R2012a环境五、实验过程程序与分析文本各部分的功能函数1. 声卡输入function shengkashuru_Callback(hObject, eventdata, handles)%声卡输入的回调函数set(handles.shengkashuru,value,1); set(handles.wavfile,value,0); set(handles.xinhaofasheng,value,0); h=findobj(Tag,luyinshijian); set(h,enable,on); h=findobj(Tag,kaishiluyin); set(h,enable,on); h=findobj(Tag,wavname); set(h,enable,off); h=findobj(Tag,dakaiwenjian); set(h,enable,off); h=findobj(Tag,inwave); set(h,enable,off); h=findobj(Tag,infudu); set(h,enable,off); h=findobj(Tag,infre); set(h,enable,off); h=findobj(Tag,inphase); set(h,enable,off); h=findobj(Tag,mix); set(h,enable,off); h=findobj(Tag,shengchengboxing);set(h,enable,off);2. 开始录音function kaishiluyin_Callback(hObject, eventdata, handles)%开始录音的回调函数 Fs=48000; N=str2double(get(handles.luyinshijian,String)*Fs; handles.y=wavrecord(N, Fs,1); handles.inputtype=1; guidata(hObject,handles);%保存handles结构体,使其能在其他函数中使用 plot(handles.fenxiduixiang,handles.y);%在波形显示区绘出波形 ysize=size(handles.y); set(handles.caiyangdianshu,String,num2str(ysize(1);3. WAV文件function wavfile_Callback(hObject, eventdata, handles)%wav文件形式的回调函数set(handles. shengkashuru,value,0); set(handles.wavfile,value,1); set(handles.xinhaofasheng,value,0); h=findobj(Tag,luyinshijian); set(h,enable,off); h=findobj(Tag,kaishiluyin); set(h,enable,off); h=findobj(Tag,wavname); set(h,enable,on); h=findobj(Tag, dakaiwenjian ); set(h,enable,on); h=findobj(Tag,inwave); set(h,enable,off); h=findobj(Tag,infudu); set(h,enable,off); h=findobj(Tag,infre); set(h,enable,off); h=findobj(Tag,inphase); set(h,enable,off); h=findobj(Tag,mix); set(h,enable,off); h=findobj(Tag,shengchengboxing);set(h,enable,off);4.打开文件function dakaiwenjian_Callback(hObject, eventdata, handles)%打开文件的回调函数channel=1;%声道选择filename,filepath=uigetfile(*.wav,wavfile);set(handles.wavname,string,filename);file=filepath,filename;temp,Fs=wavread(file); %文件读取函数set(handles.caiyangpinlv,String,Fs);set(handles.caiyangdianshu,String,size(temp,1);handles.inputtype=2;%变量inputtypehandles.y=temp(:,channel);guidata(hObject,handles);%保存handles结构体,使其能在其他函数中使用plot(handles.fenxiduixiang,handles.y); %在波形显示区绘出波形ysize=size(handles.y)5. 信号发生器function xinhaofasheng_Callback(hObject, eventdata, handles)%信号发生器的回调函数set(handles. shengkashuru,value,0); set(handles.wavfile,value,0); set(handles.xinhaofasheng,value,1); h=findobj(Tag,luyinshijian); set(h,enable,off); h=findobj(Tag,kaishiluyin); set(h,enable,off); h=findobj(Tag,wavname); set(h,enable,off); h=findobj(Tag, dakaiwenjian ); set(h,enable,off); h=findobj(Tag,inwave); set(h,enable,on); h=findobj(Tag,infudu); set(h,enable,on); h=findobj(Tag,infre); set(h,enable,on); h=findobj(Tag,inphase); set(h,enable,on); h=findobj(Tag,mix); set(h,enable,on); h=findobj(Tag,shengchengboxing);set(h,enable,on);6. 生成波形function shengchengboxing_Callback(hObject, eventdata, handles)%生成函数的回调函数Fs=str2double(get(findobj(Tag,caiyangpinlv),String);%获取采样频率 N=str2double(get(findobj(Tag,caiyangdianshu),String);%获取采样点数 x=linspace(0,N/Fs,N); soundtype=get(handles.inwave,Value); frequency=str2double(get(handles.infre,String); amp=str2double(get(handles.infudu,String); phase=str2double(get(handles.inphase,String); switch soundtype%选择波形函数 case 1 y=amp*sin(2*pi*x*frequency+phase); handles.inputtype=3; case 2 y=amp*sign(sin(2*pi*x*frequency+phase); handles.inputtype=3; case 3 y=amp*sawtooth(2*pi*x*frequency+phase,0.5); handles.inputtype=3; case 4 y=amp*sawtooth(2*pi*x*frequency+phase); handles.inputtype=3; case 5 y=amp*(2*rand(size(x)-1); handles.inputtype=4; end if get(handles.mix,Value)=0.0 handles.y=y; else handles.y=handles.y+y; end guidata(hObject,handles);%保存handles结构体,使其能在其他函数中使用 plot(handles.fenxiduixiang,handles.y); %在波形显示区绘出波形 title(WAVE);axis(0 N -str2double(get(handles.infudu,String) str2double(get(handles.infudu,String);7. 时域分析function timeanalyse_Callback(hObject, eventdata, handles)%时域分析回调函数 Fs=str2double(get(findobj(Tag,caiyangpinlv),String);%获取采样频率 N=str2double(get(findobj(Tag,caiyangdianshu),String);%获取采样点数 if handles.inputtype=0 msgbox(No wave exist! Please choose a input type!); return; end %guo ling jian ce n=1; ymax=max(handles.y(1) handles.y(2); ymin=min(handles.y(1) handles.y(2); from=str2double(get(handles.pointfrom,String); to=str2double(get(handles.pointto,String); if from1 | to-from5; msgbox(Error range!); return; end for 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 end end n=n-1; %freqence and periodicity for i=1:n-1 T(i)=ti(i+1)-ti(i); end freq=Fs/mean(T); if (handles.inputtype=1|handles.inputtype=2|handles.inputtype=4) set(handles.circle,String,非周期); set(handles.outfreq,String,非周期); end if(handles.inputtype=3) set(handles.circle,String,1/freq); set(handles.outfreq,String,num2str(freq); end set(handles.outamp,String,num2str(mean(amp(2:n-1); %phase phase=2*pi*(1-(ti(1:n-1)-1)./T+floor(ti(1:n-1)-1)./T); set(handles.outphase,String,num2str(mean(phase); %peak set(handles.outpeak,String,(max(handles.y(from:to)-min(handles.y(from:to)/2); %mean set(handles.outmean,String,mean(handles.y(from:to); %meansquare set(handles.outmeansquare,String,mean(handles.y(from:to).2); %sset(handles.outminus,String,std(handles.y(from:to)2);8. 频域分析function freqanalyse_Callback(hObject, eventdata, handles)%频域分析回调函数Fs=str2double(get(findobj(Tag,caiyangpinlv),String);%获取采样频率 N=str2double(get(findobj(Tag,caiyangdianshu),String);%获取采样点数 if handles.inputtype=0 msgbox(No wave exist! Please choose a input type!); return; end from=str2double(get(handles.pointfrom,String); to=str2double(get(handles.pointto,String); sample=handles.y(from:to); f=linspace(0,Fs/2,(to-from+1)/2); Y=fft(sample,to-from+1); C,I=max(abs(Y); if(handles.inputtype=1|handles.inputtype=2|handles.inputtype=4) set(handles.foutt,String,非周期); set(handles.foutfreq,String,非周期); end if(handles.inputtype=3) set(handles.foutt,String,1/f(I); set(handles.foutfreq,String,f(I); end Y=Y(1:(to-from+1)/2); plot(handles.fuzhipu,f,2*sqrt(Y.*conj(Y);%在波形显示区绘出波形 plot(handles.xiangweipu,f,angle(Y);%在波形显示区绘出波形 plot(h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司白云山爬山活动方案
- 公司新春装饰活动方案
- 公司职员服务活动方案
- 公司端午节节活动方案
- 公司红包墙抽奖活动方案
- 公司用人优惠活动方案
- 公司聚会活动策划方案
- 公司温泉旅游活动方案
- 公司联合宣传策划方案
- 公司西湖划船活动方案
- 全套行政人事管理制度汇编全套
- 干部履历表(99年标准版)
- 挖掘机安全技术交底主要内容
- 幼儿生活常规教育的现状研究
- 完整版-第八版内科冠心病课件
- 戴尔电脑培训课件
- 光伏电站逆变器检修规程
- 医生护士家长父母进课堂助教-儿童医学小常识PPT
- 2023春国开幼儿园科学教育专题形考任务1-4试题及答案
- 丹东港大东港区粮食、#13、#14泊位升级改造工程环境影响报告
- 生产计划排产表-自动排产
评论
0/150
提交评论