// mclose('all'); clear zi=struct('pfad','','dateiname','','fe','','sr',0,'start1',0,'start2',0,'info',0,'lz',0,'so',0,'yF',0,'afft',0,'afftl',0,'g',0,'f',0,'l',0,'r',0,'h1',0,'h2',0,'h3',0,'h4',0,'v',1); ///////////////////////////// // formular zi.f=gcf();// zi.f.color_map = jetcolormap(1000); //Colormap festlegen zi.f.visible = "on"; zi.f.figure_position = [20,20]; zi.f.figure_size = [1400,900]; zi.f.figure_name="Wav - Zeit- Frequenz - FFT - Analyse"; zi.f.BackgroundColor=[1 1 1]; zi.tag='Formular'; zi.so=0; // controls u1=uicontrol(zi.f,"style","pushbutton", 'position', [500 40 60 30],'string','Neu','callback','[zi]=neu(zi)'); u2=uicontrol(zi.f,"style","pushbutton", 'position', [570 40 50 30],'string','<<','callback','[zi]=links(zi)'); u3=uicontrol(zi.f,"style","text",'HorizontalAlignment','center' ,'position', [635 40 90 30],'string','0. Sek.'); u4=uicontrol(zi.f,"style","pushbutton", 'position', [740 40 50 30],'string','>>','callback','[zi]=rechts(zi)'); u5=uicontrol(zi.f,"style","pushbutton", 'position', [800 40 60 30],'string','Exit','callback','close'); u6=uicontrol(zi.f,"style","text",'HorizontalAlignment','left' ,'position', [100 5 1200 30],'string',zi.fe); u7=uicontrol(zi.f,"style","spinner", 'position', [660 100 50 40],'HorizontalAlignment','center','VerticalAlignment','middle','min',1,'max',10,'SliderStep',[1,10],'SliderStep',[1,10],'Title_position','top','callback','[zi]=verst(zi)'); u8=uicontrol(zi.f,"style","text",'HorizontalAlignment','left' ,'position', [658 145 60 20],'string','Verstärkung'); // ///////////////////////////////// // // // functionen function [zi]=neu(zi) ////////////////////////////////////////////////////////////////////////////// if zi.so>0 then delete(zi.h1) delete(zi.h2) delete(zi.h3) delete(zi.h4) end // WAV Datei auswählen [zi.dateiname,zi.pfad]=uigetfile('*.wav','D:\Mdaten'); //WAV Datei wählen if isequal(zi.dateiname,''); //Ist eine Date gewählt? else zi.fe=zi.pfad+'\'+zi.dateiname; //Vollständigen Pfad erstellen zi.info = wavread(zi.fe,'info'); //WAV Info`s laden disp('//////////////////////////////////////////////////////////') disp('WAV-Datei: '+zi.fe); //Ausgabe vollständiger Pfad disp('Kanäle: '+string(zi.info(2))); //Ausgabe Anzahl der Kanäle disp('Samplerate: '+string(zi.info(3))); //Ausgabe Samplerate disp('Dateilänge : '+string(zi.info(8))); //Ausgabe Dateilänge disp('Laufzeit : '+string(zi.info(8)/zi.info(3))+' Sekunden'); //Laufzeit in Sek. disp('//////////////////////////////////////////////////////////') zi.lz=floor(zi.info(8)/zi.info(3)); // lauzeit in sekunden zi.sr=zi.info(3); //Samplerate der Audiodatei set(u6,'string',zi.fe); zi.start1=1; zi.start2=zi.sr; zi.so=1; set(u3,'string',string(zi.so)+'. Sek.'); [zi]=wlana(zi); [zi]=linkeseite(zi); [zi]=rechteseite(zi); end endfunction //////////////////////////////////////////////////////////////////////////// function [zi]=wlana(zi) // if zi.start2 < zi.info(8) then zi.yF=wavread(zi.fe,[zi.start1 zi.start2]); zi.yF=zi.yF(1,:); zi.yF=zi.yF*zi.v; //// yFFT=fft(zi.yF,-1,'nonsymmetric'); //Die FFT wird berechnen yFFT=yFFT/zi.sr; zi.g=abs(yFFT(1))*1000; yFFT=yFFT(2:zi.sr-1); yFFT1=abs(yFFT); // nur positive Zahlen yFFT1=yFFT1*2000; // amplitude normieren zi.afft(1:500)=yFFT1(1:500); //Ergebnisse ins Array // powerspektrum yFFTL=yFFT.* conj(yFFT); //Powerspektrum der FFT berechnen yFFTL=abs(yFFTL); // realteil yFFTL=yFFTL*4000; // amplitude normieren zi.afftl(1:500)=yFFTL(1:500); //Ergebnisse ins Array //// end; endfunction ///////////////////////////////////////////////////////////////////////7///// function [zi]=linkeseite(zi) scf(zi.f); subplot(121); v=zi.yF; plot(v,'red','thickness',3); zi.h1=gce() zi.l=gca(); zi.l.visible = "on"; zi.l.axes_visible = ["on","on","on"]; zi.l.axes_reverse = ["off","off","off"]; zi.l.auto_ticks = ["off","off","off"]; zi.l.grid = [1,1]; zi.l.grid_thickness = [1,1]; zi.l.grid_style = [1,1]; zi.l.grid_position = "background"; zi.l.title.font_size=2; zi.l.title.text="WAV Signal"; zi.l.x_label.font_size=2; zi.l.x_label.text="Zeit in Millisekunden"; zi.l.x_label.visible="on"; zi.l.y_label.font_size=2; zi.l.y_label.text="Amplitude"; zi.l.y_label.visible="on"; zi.l.auto_scale="off"; // zeitachse zi.l.x_ticks=tlist(['locations','labels'],[0,4800,9600,14400,19200,24000,28800,33600,38400,43200,48000],["0","100","200","300","400","500","600","700","800","900","1000"]); // amplitudenachse zi.l.y_ticks=tlist(['locations','labels'],[-1,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1],["-1","-0.9","-0.8","-0.7","-0.6","-0.5","-0.4","-0.3","-0.2","-0.1","0","0.1","0.2","0.3","0.4","0.5","0.6","0.7","0.8","0.9","1"]); zi.l.sub_tics=[9,9,9]; zi.l.box = "back_half"; zi.l.background = -2; zi.l.tight_limits = ["on","on"]; zi.l.cube_scaling = "on"; zi.l.isoview = "off"; // mit den folgenden einstellungen der drei achsen kann die Anzeige angepasst werden ///////////////////////////////////////////////////////////////////////////// zh=zi.l.data_bounds; zh(1,2)=-1; zh(2,2)=1; zh(1,1)=1; zh(2,1)=zi.sr; zi.l.data_bounds =zh; zi.l.tag='Links'; // //////////////////////// endfunction /////////////////////////////////////////////////////////////////////////// function [zi]=rechteseite(zi) scf(zi.f); subplot(122); v=zi.afft; w=zi.afftl; plot(v,'blue','thickness',3); zi.h2=gce() bar(0,zi.g,1,'magenta'); zi.h3=gce() plot(w,'red','thickness',3); zi.h4=gce() ////////////////////// // zi.r=gca(); zi.r.visible = "on"; zi.r.axes_visible = ["on","on","on"]; zi.r.axes_reverse = ["off","off","off"]; zi.r.auto_ticks = ["off","off","off"]; zi.r.grid = [1,1]; zi.r.grid_thickness = [1,1]; zi.r.grid_style = [1,1]; zi.r.grid_position = "background"; zi.r.title.font_size=2; zi.r.title.text="FFT (blau) & FFT-Leistung (rot)"; zi.r.x_label.font_size=2; zi.r.x_label.text="Frequenz"; zi.r.x_label.visible="on"; zi.r.y_label.font_size=2; zi.r.y_label.text="Amplitude"; zi.r.y_label.visible="on"; zi.r.auto_scale="off"; // frequenzaschse zi.r.x_ticks=tlist(['locations','labels'],[0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400,410,420,430,440,450,460,470,480,490,500],["0","10","20","30","40","50","60","70","80","90","100","110","120","130","140","150","160","170","180","190","200","210","220","230","240","250","260","270","280","290","300","310","320","330","340","350","360","370","380","390","400","410","420","430","440","450","460","470","480","490","500"]); // amplitudenachse zi.r.y_ticks=tlist(['locations','labels'],[0,100,200,300,400,500,600,700,800,900,1000],["0","0.1","0.2","0.3","0.4","0.5","0.6","0.7","0.8","0.9","1"]); zi.r.sub_tics=[9,9,9]; zi.r.box = "back_half"; zi.r.background = -2; zi.r.tight_limits = ["off","off"]; zi.r.cube_scaling = "on"; zi.r.isoview = "off"; // mit den folgenden einstellungen der drei achsen kann die Anzeige angepasst werden ///////////////////////////////////////////////////////////////////////////// zh=zi.r.data_bounds; zh(1,2)=0; zh(2,2)=1000; zh(1,1)=0; zh(2,1)=250; zi.r.data_bounds =zh; zi.r.tag='Rechts'; /////////////////////////////////////////////////////////////////////// endfunction ////////////////////////////////////////////////////////////////////// function [zi]=rechts(zi) if zi.so==zi.lz then else delete(zi.h1) delete(zi.h2) delete(zi.h3) delete(zi.h4) zi.so=zi.so+1; set(u3,'string',string(zi.so)+'. Sek. von '+string(zi.lz)); zi.start1=zi.start1+zi.sr; zi.start2=zi.start2+zi.sr; [zi]=wlana(zi); [zi]=linkeseite(zi); [zi]=rechteseite(zi); end endfunction ////////////////////////////////////////////////////////////////////// function [zi]=links(zi) if zi.so<=1 then else delete(zi.h1) delete(zi.h2) delete(zi.h3) delete(zi.h4) zi.so=zi.so-1; set(u3,'string',string(zi.so)+'. Sek. von '+string(zi.lz)); zi.start1=zi.start1-zi.sr; zi.start2=zi.start2-zi.sr; [zi]=wlana(zi); [zi]=linkeseite(zi); [zi]=rechteseite(zi); end endfunction /////////////////////////////////////////////////////////////////// function [zi]=verst(zi) zi.v=u7.value; if zi.so>0 then delete(zi.h1) delete(zi.h2) delete(zi.h3) delete(zi.h4) [zi]=wlana(zi); [zi]=linkeseite(zi); [zi]=rechteseite(zi); end endfunction