// Spektralanalyse FFT, Power Sekundenweise zweidimensional // Name: Analyse-2d-v18-01.sce // Datum: 1.10.2018 ///////////////////////////////////////////////////////////////////////////// mclose('all'); clear; xdel(); z=struct('datei','','pfad','','pfaddatei','','info',0,'samplerate',0,'laufzeit',0,'fober',2000,'position',0,'start1',0,'start2',0,'gra1',0,'gra2',0,'gra3',0,'gra4',0,'W1',0,'w2',0,'F0',0,'F1',0,'F2',0,'F3',0,'P1',0,'S1',0,'S2',0) function [z]=neu(z) ////////////////////////////////////////////////////////////////////////////// // WAV Datei auswählen D:\Mdaten\Testsignale/100Hz-03A_g.wav [z.datei,z.pfad]=uigetfile('*.wav','D:\Mdaten'); //WAV Datei wählen if isequal(z.datei,'') then return end //Ist eine Date gewählt? z.pfaddatei=z.pfad+'\'+z.datei; //Vollständigen Pfad erstellen z.info = wavread(z.pfaddatei,'info'); //WAV Info`s laden z.laufzeit=floor(z.info(8)/48000); // lauzeit in ganzen sekunden z.samplerate=z.info(3); //Samplerate der Audiodatei if z.info(3)<>48000 then z.datei='';z.pfad='';z.pfaddatei='';disp('////////// Die Abtastfrequenz ist nicht 48000 //////////');return end 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))+' Abtastungen/Sekunde'); //Ausgabe Samplerate disp('Dateilänge : '+string(z.info(8))+' Byte'); //Ausgabe Dateilänge disp('Laufzeit : '+string(z.info(8)/z.info(3))+' Sekunden'); //Laufzeit in Sek. disp('//////////////////////////////////////////////////////////') // werte ins formular schreiben //pfad + dateiname set(u0a,'string',string(' ')+z.pfaddatei); //anzahl der kanäle set(uc1,'string',string('Kanal 1/'+string(z.info(2)))); set(uc1,'value',0); //position set(uc2,'string',string(z.laufzeit)); set(uc4,'max',z.laufzeit); //verstärkung set(uc6,'value',1); //fmax set(uc8,'value',2000); //fmin set(uc10,'value',1); // z.F0=zeros(1,48000); z.S1=sum(z.W1); // [z]=rechenwerk(z) // endfunction ///////////////////////////////////////////////////////////////////////////// //rechenwerk function [z]=rechenwerk(z) //////////////////////////////////////////////////////////////////////////// //einlesen z.start1=48000*(uc4.value-1)+1; z.start2=z.start1+48000-1; z.W1=wavread(z.pfaddatei,[z.start1 z.start2]); //kanalwahl z.W1=z.W1(uc1.value+1,:); //verstärkung z.W1=z.W1*uc6.value; //disp('>1>',max(z.W1),'<1<') //fft z.F1=fft(z.W1,-1,'nonsymmetric'); z.F1=z.F1/48000; //disp('<2',z.F1(101),'2>') z.F2=abs(z.F1(1:2001)); //disp('<3',z.F2(101),'3>') z.F2=z.F2*2000; // powerspektrum z.P1=z.F1.* conj(z.F1); z.P1=abs(z.P1); z.P1=z.P1(1:2001); z.P1=z.P1*4000; //revision z.F3=z.F0; z.F3(uc10.value+1:uc8.value+1)=z.F1(uc10.value+1:uc8.value+1); z.W2=fft(z.F3,1,'nonsymmetric'); z.W2=real(z.W2); z.W2=z.W2*48000*2; z.S1=sum(abs(z.W1(2:48000))); z.S2=sum(abs(z.W2(2:48000))); z.p2=floor(z.S2*100/z.S1); set(ub2aus,'string',string(z.p2)) [z]=malen1(z); [z]=malen2(z);8 [z]=malen3(z); [z]=malen4(z); endfunction /////////////////////////////////////////////////////////////////////////// function [z]=rechenw2(z) /////////////////////////////////////////////////////////////////////////// //revision z.F3=z.F0; z.F3(uc10.value+1:uc8.value+1)=z.F1(uc10.value+1:uc8.value+1); z.W2=fft(z.F3,1,'nonsymmetric'); z.W2=real(z.W2); z.W2=z.W2*48000*2; [z]=malen2(z) //prozent z.S1=sum(abs(z.W1(2:48000))); z.S2=sum(abs(z.W2(2:48000))); z.p2=floor(z.S2*100/z.S1); set(ub2aus,'string',string(z.p2)) endfunction // //////////////////////////////////////////////////////////////////////////// //malen1 function [z]=malen1(z) /////////////////////////////////////////////////////////////////////////// //malen graph 1 in fenster 1 sca(z.fe1); if z.gra1==0 then else delete(z.gra1) end; //disp(sum(abs(z.W1(2:2001)))) plot2d(z.W1); z.gra1=gce() z.gra1.children.thickness=1; z.gra1.children.foreground=color('blue'); [z]=sicht1(z); // endfunction //malen graph 2 in fenster 1 function [z]=malen2(z) /////////////////////////////////////////////////////////////////////////// // malen grap 2 sca(z.fe1); if z.gra2==0 then else delete(z.gra2) end; //disp('W1> ',sum(z.W1(2:2001)),' ',sum(z.W2(2:2001)),'