// WAV-3d-Analyse-30 ///////////////////////////////////////////////////////////////////////////// mclose('all'); clear; close(); z=struct('pfad','','datei','','pfaddatei','','info','','laufzeit',0,'ueberdeckung',0,'posi',0,'start1',0,'start2',0,'mono',0,'ff',0,'power',0,'ffli',0,'powerli',0,'hoer1',0,'hoer2',0,'a1',0,'a2',0,'a3',0,'b1',0,'b2',0,'b3',0,'h1',0,'graph1',0,'graph2',0,'f',0,'cm',0,'kanalzahl',0,'kanal',1,'verstaerkung',1,'darst',1,'xa','','n',0,'i',0,'rota',[16. -20.]),'aktuell',0,'vorw',0; ///////////////////////////////////////////////////////////////////////////// function [z]=sub_neu(z) // NEUE DATEI AUFRUFEN // WAV Datei auswählen [z.datei,z.pfad]=uigetfile('*.wav','D:\Mdaten'); //WAV Datei wählen if isequal(z.datei,''); //Ist eine Date gewählt? else z.pfaddatei=z.pfad+'\'+z.datei; //Vollständigen Pfad erstellen z.info = wavread(z.pfaddatei,'info'); //WAV Info`s laden disp('//////////////////////////////////////////////////////////') disp('WAV-Datei: '+z.pfaddatei); //Ausgabe vollständiger Pfad disp('Kanäle: '+string(z.info(2))); //Ausgabe Anzahl der Kanäle disp('Samplerate: '+string(z.info(3))); //Ausgabe Samplerate disp('Dateilänge : '+string(z.info(8))); //Ausgabe Dateilänge disp('Laufzeit : '+string(z.info(8)/z.info(3))+' Sekunden'); //Laufzeit in Sek. disp('//////////////////////////////////////////////////////////') z.pfaddat=strsplit(z.pfaddatei,'.') z.laufzeit=floor(z.info(8)/z.info(3)); // lauzeit in sekunden set(se_dat_a,'string',z.pfaddatei); xtitle(strsplit(z.datei,'.')(1),'','',''); // ffliT Window z.w=window('hn',48000); // fflit window //LAUFZEIT / kanäle select z.info(2) case 1 then z.kanalzahl='Mono' case 2 then z.kanalzahl='Stereo' end set(se_dat_b,'string',' Laufzeit: '+string(z.laufzeit)+' Sek. / '+string(z.kanalzahl)); // //KANALZAHL if z.kanalzahl=='Mono' then set(se_kan_b,'visible',0); end if z.kanalzahl=='Stereo' then set(se_kan_b,'visible',1); end set(se_kan_a,'value',1); z.kanal=1; //MAX POSITION ANALYSE set(se_pos_c,'max',z.laufzeit); set(se_pos_c,'value',1); set(se_pos_b,'string','1'); z.posi=1; // VERSTÄRKUNG set(se_ver_b,'string','1'); set(se_ver_c,'value',1); z.verstaerkung=1; // ÜBERDECKUNG set(se_ueb_2,'string','48000'); set(se_ueb_f,'value',1) z.ueberdeckung=48000; //MAX POSITION ABSPIELEN set(se_hoer_a,'max',z.laufzeit); // se_dat_c=uicontrol(z.f,"style","text",'FontWeight','bold','HorizontalAlignment','left' ,'backgroundcolor',[1 0.8 0],'position', [930 5 450 20],'string',' Kanal: '+string(z.kanal)+' / Position: '+string(z.posi)+' Sek. / Verstärkung: '+string(z.verstaerkung)+' / Überdeckung: '+string(z.ueberdeckung)); // z.rota=[16 -20]; // wasserfall // [z]=sub_achsen_x_1(z) // [z]=sub_achsen_y_1(z) // [z]=sub_achsen_z_1(z) // [z]=rechenwerk1(z); // [z]=sub_far(z); // farbtabelllen // [z]=farbwerk(z) // // [z]=sub_malen_0(z); // // [z]=sub_was(z); // // end endfunction ///////////////////////////////////////////////////////////////////////////// function [z]=sub_berechnen(z) // BERECHNEN //KANALZAHL if isequal(z.datei,''); //Ist eine Date gewählt? else if se_kan_a.value==1 then z.kanal=1 end if se_kan_b.value==1 then z.kanal=2 end //POSITION z.posi= se_pos_c.value; set(se_pos_b,'string',string(z.posi)); // VERSTÄRKUNG z.verstaerkung=se_ver_c.value; set(se_ver_b,'string',string(z.verstaerkung)); // ÜBERDECKUNG select 1 case se_ueb_a.value then set(se_ueb_2,'string','1500');z.ueberdeckung=1500; case se_ueb_b.value then set(se_ueb_2,'string','1500');z.ueberdeckung=3000; case se_ueb_c.value then set(se_ueb_2,'string','1500');z.ueberdeckung=6000; case se_ueb_d.value then set(se_ueb_2,'string','1500');z.ueberdeckung=12000; case se_ueb_e.value then set(se_ueb_2,'string','1500');z.ueberdeckung=24000; case se_ueb_f.value then set(se_ueb_2,'string','1500');z.ueberdeckung=48000; end set(se_ueb_2,'string',string(z.ueberdeckung)); // se_dat_c=uicontrol(z.f,"style","text",'FontWeight','bold','HorizontalAlignment','left' ,'backgroundcolor',[1 0.8 0],'position', [930 5 450 20],'string',' Kanal: '+string(z.kanal)+' / Position: '+string(z.posi)+' / Verstärkung: '+string(z.verstaerkung)+' / Überdeckung: '+string(z.ueberdeckung)); // z.rota=[16 -20]; // wasserfall // [z]=sub_achsen_x_1(z) // [z]=sub_achsen_y_1(z) // [z]=sub_achsen_z_1(z) // [z]=rechenwerk1(z); // [z]=sub_far(z); // farbtabelllen // [z]=farbwerk(z) // // [z]=sub_malen_0(z); // // [z]=sub_was(z); // // end endfunction ///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// // Rechenwerk1 function [z]=rechenwerk1(z) //RECHENWERK1 // 480 BERECHNUNGEN DURCHFÜHREN winH=waitbar('Fast Fourier Transformation und Power Spektrum wird 480 mal berechnet.'); z.start1=z.posi*48000-47999; z.start2=z.posi*48000; i=1; while i<481 waitbar(i/480,winH); //testen if z.start1z.info(8) then // auffüllen z.wa=wavread(z.pfaddatei,[z.start1 z.info(8)]); z.mono=z.wa(z.kanal,:); z.mono=z.mono.*z.verstaerkung d=size(z.mono,2); z.mono(d+1:48000)=zeros(1:48000-d); end // if z.start1>z.info(8) & z.start2>z.info(8) then // nullen z.mono(1:48000)=zeros(1:48000); end // [z]=rechenwerk2(z) z.ffli(i,1:500)=z.ff(1:500); // fft daten z.powerli(i,1:500)=z.power(1:500); // leistungsdaten z.start1=z.start1+z.ueberdeckung; z.start2=z.start2+z.ueberdeckung; i=i+1 end close(winH); // endfunction ///////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// // Rechenwerk2 function [z]=rechenwerk2(z) //RECHENWERK1 // FFT BERECHNEN POWER BERECHNEN z.mono=z.mono.*z.w;//windows anwenden z.ff=fft(z.mono,-1,'nonsymmetric'); //Die FFT wird berechnen z.ff=z.ff/48000; z.ff=abs(z.ff(2:48000)); // powerspektrum z.power=abs(z.ff.* conj(z.ff)); //Powerspektrum der FFT berechnen z.power=z.power(1:500); z.ff=z.ff(1:500); // normieren z.ff=z.ff*4000;// normieren z.power=z.power*4000;// normieren endfunction ///////////////////////////////////////////////////////////////////////////// function [z]=farbwerk(z) // farbwerk aufbauen fx=1:1:480; //X-Achse zum ploten aufbauen fy=1:1:500; //Y-Achse zum ploten aufbauen // [z.a1,z.a2,z.a3]=genfac3d(fx,fy,z.ffli(fx,fy)); //Plot fflit [z.b1,z.b2,z.b3]=genfac3d(fx,fy,z.powerli(fx,fy)); //Plot leistung // endfunction ///////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function [z]=sub_malen_0(z) // select z.darst case 1 [z]=sub_malen_1(z) case 2 [z]=sub_malen_2(z) end endfunction ///////////////////////////////////////////////////////////////////////////// function [z]=sub_malen_1(z) // graph 1 if z.graph1 ==0 then else delete(z.graph1);z.graph1=0; end; z.h1.visible = "on"; sca(z.h1); plot3d1(z.a1,z.a2,list(z.a3,z.a3),theta=-20,alpha=16,flag=[-1,2,3]) z.graph1=gce(); z.h1.axes_visible = ["on","on","on"]; //////////////////////////////////////////////////////////////////////////// endfunction ///////////////////////////////////////////////////////////////////////// function [z]=sub_malen_2(z) // graph 1 if z.graph1 ==0 then else delete(z.graph1);z.graph1=0; end; z.h1.visible = "on"; sca(z.h1); plot3d1(z.b1,z.b2,list(z.b3,z.b3),theta=-20,alpha=16,flag=[-1,2,3]) z.graph1=gce(); z.h1.axes_visible = ["on","on","on"]; //////////////////////////////////////////////////////////////////////////// endfunction //////////////////////////////////////////////////////////////////////////// function[z]=sub_savgif_1(z) // if z.pfaddatei=='' then else zd=getdate(); zs=z.pfaddat(1)+'_Datum_'+string(zd(1))+'_'+string(zd(2))+'_'+string(zd(6))+'_'+string(zd(7))+'_'+string(zd(8))+'_'+string(zd(9))+'.gif'; xs2gif(gcf(),zs); end endfunction //////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// function [z]=sub_hoeren(z) // if z.datei=='' then else if se_hoer_a.value