// Spektralanalyse FFT, Power zweidimensional 10Sekunden // Name: Analyse-2d-10Sekunden.sce // Datum: 1.11.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,'W3',0,'F0',0,'F1',0,'F2',0,'F3',0,'P1',0,'S1',0,'S2',0,'filter1',1,'filter2',2000,'terzfilter1',0,'terzfilter2',0,'gramax',0,'gramin',0); // z.terzfilter1=['22-27';'28-35';'36-44';'45-55';'56-70';'71-88';'89-110';'111-142';'143-177';'178-222';'223-280';'281-355';'356-444';'445-560';'561-712';'713-890';'891-1111';'1114-1424';'1425-1781']; z.terzfilter2=[22,27,25;28,35,31.5;36,44,40;45,55,50;56,70,63;71,88,80;89,110,100;111,142,125;143,177,160;178,222,200;223,280,250;281,355,315;356,444,400;445,560,500;561,712,630;713,890,800;891,1111,1000;1114,1424,1250;1425,1781,1600]; // z.F0=zeros(1,480000); z.F1=z.F0 z.F3=z.F0 z.W1=z.F0 z.W2=z.F0 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 if z.laufzeit<10 then disp('////////// Die Laufzeit ist kürzer als 10 Sekunden //////////');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-10); //verstärkung set(uc6,'value',1); //fmax set(uf2,'value',2000); //fmin set(uf1,'value',1); // // z.filter1=uf1.value+1; z.filter2=uf2.value+1; z.filter1=z.filter1*10; z.filter2=z.filter2*10; // z.F0=zeros(1,480000); // [z]=rechenwerk(z) // endfunction ///////////////////////////////////////////////////////////////////////////// //rechenwerk function [z]=rechenwerk(z) //////////////////////////////////////////////////////////////////////////// //einlesen z.start1=48000*(uc4.value-1)+1; z.start2=z.start1+480000-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; //fft z.F1=fft(z.W1,-1,'nonsymmetric'); z.F1=z.F1/480000; z.F2=abs(z.F1(1:20001)); z.F2=z.F2*2000; z.F2(1)=z.F2(1)*0.5 // powerspektrum z.P1=z.F1.* conj(z.F1); z.P1=abs(z.P1); z.P1=z.P1(1:20001); z.P1=z.P1*4000; z.P1(1)=z.P1(1)*0.25 //revision z.F3=z.F0; z.filter1=uf1.value+1; z.filter2=uf2.value+1; z.filter1=z.filter1*10; z.filter2=z.filter2*10; z.F3(z.filter1:z.filter2)=z.F1(z.filter1:z.filter2); F3(z.filter1:z.filter2)=z.F1(z.filter1:z.filter2); z.W2=fft(z.F3,1,'nonsymmetric'); z.W2=real(z.W2); z.W2=z.W2*480000*2; z.S1=sum(abs(z.W1(2:480000))); z.S2=sum(abs(z.W2(2:480000))); z.p2=floor(z.S2*100/z.S1); set(ub2aus,'string',string(z.p2)) [z]=malen1(z); [z]=malen2(z); [z]=malen3(z); [z]=malen4(z); endfunction /////////////////////////////////////////////////////////////////////////// function [z]=rechenw2(z) /////////////////////////////////////////////////////////////////////////// //revision z.F3=z.F0; z.filter1=uf1.value+1; z.filter2=uf2.value+1; z.filter1=z.filter1*10; z.filter2=z.filter2*10; z.F3(z.filter1:z.filter2)=z.F1(z.filter1:z.filter2); z.W2=fft(z.F3,1,'nonsymmetric'); z.W2=real(z.W2); z.W2=z.W2*480000*2; [z]=malen2(z) //prozent z.S1=sum(abs(z.W1(2:480000))); z.S2=sum(abs(z.W2(2:480000))); z.p2=floor(z.S2*100/z.S1); set(ub2aus,'string',string(z.p2)); //transponieren y(1:1000)=0; y(1001:480000)=z.F3(1:479000) z.W3=fft(y,1,'nonsymmetric'); z.W3=real(z.W3); z.W3=z.W3*480000*2; 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; 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; plot2d(z.W2); z.gra2=gce(); z.gra2.children.thickness=1; z.gra2.children.foreground=color('red'); [z]=sicht2(z); // endfunction /////////////////////////////////////////////////////////////////////////// function [z]=malen3(z) /////////////////////////////////////////////////////////////////////////// // malen grap 3 sca(z.fe2); if z.gra3==0 then else delete(z.gra3) end; plot2d2(0:20000,z.F2); z.gra3=gce(); z.gra3.children.thickness=3; z.gra3.children.foreground=color('scilabblue2'); [z]=sicht3(z); // endfunction /////////////////////////////////////////////////////////////////////////// function [z]=malen4(z) ////////////////////////////////////////////////////////////////////////// // malen graph 4 sca(z.fe2); if z.gra4==0 then else delete(z.gra4) end; plot2d2(0:20000,z.P1); z.gra4=gce(); z.gra4.children.thickness=3; z.gra4.children.foreground=color('scilabred2'); [z]=sicht4(z); // endfunction // function [z]=malenmax(z) //filtergrenzen setzen sca(z.fe2); if z.gramax==0 then else delete(z.gramax) end; plot2d([uf2.value*10 uf2.value*10],[0 1000]); z.gramax=gce(); z.gramax.children.thickness=2; z.gramax.children.foreground=color('plum'); // endfunction // function [z]=malenmin(z) //filtergrenzen setzen sca(z.fe2); if z.gramin==0 then else delete(z.gramin) end; plot2d([uf1.value*10 uf1.value*10],[0 1000]); z.gramin=gce(); z.gramin.children.thickness=2; z.gramin.children.foreground=color('pink'); // endfunction /////////////////////////////////////////////////////////////////////////// function [z]=sicht1(z) /////////////////////////////////////////////////////////////////////////// // graph1 ein/aus if ub1.value==1 then z.gra1.visible='on' else z.gra1.visible='off' end endfunction /////////////////////////////////////////////////////////////////////////// function [z]=sicht2(z) /////////////////////////////////////////////////////////////////////////// // graph2 ein/aus if ub2.value==1 then z.gra2.visible='on' else z.gra2.visible='off' end endfunction ////////////////////////////////////////////////////////////////////////// function [z]=sicht3(z) /////////////////////////////////////////////////////////////////////////// // graph3 ein/aus if uh1.value==1 then z.gra3.visible='on' else z.gra3.visible='off' end endfunction ////////////////////////////////////////////////////////////////////////////// function [z]=sicht4(z) ////////////////////////////////////////////////////////////////////////////// // graph 4 ein/aus if uh2.value==1 then z.gra4.visible='on' else z.gra4.visible='off' end endfunction /////////////////////////////////////////////////////////////////////////// //fenster 2 amplitudensteuerung function [z]=fensta100(z) ///////////////////////////////////////fenster 2 , amplitude 100 z.fe2.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"]); zh=z.fe2.data_bounds; zh(1,2)=0; zh(2,2)=1000; z.fe2.data_bounds =zh; endfunction // function [z]=fensta50(z) /////////////////////////////////////////// fenster 2 , amplitude 50 z.fe2.y_ticks=tlist(['locations','labels'],[0,50,100,150,200,250,300,350,400,450,500],["0","0.05","0.10","0.15","0.20","0.25","0.30","0.35","0.40","0.45","0.50"]); zh=z.fe2.data_bounds; zh(1,2)=0; zh(2,2)=500; z.fe2.data_bounds =zh; endfunction // function [z]=fensta25(z) /////////////////////////////////////////// fenster 2 , amplitude 25 z.fe2.y_ticks=tlist(['locations','labels'],[0,25,50,75,100,125,150,175,200,225,250],["0","0.025","0.050","0.075","0.100","0.125","0.150","0.175","0.200","0.225","0.250"]); zh=z.fe2.data_bounds; zh(1,2)=0; zh(2,2)=250; z.fe2.data_bounds =zh; endfunction // function [z]=fensta15(z) /////////////////////////////////////////fenster 2 , amplitude 15 z.fe2.y_ticks=tlist(['locations','labels'],[0,15,30,45,60,75,90,105,120,135,150],["0","0,015","0,030","0,045","0,060","0.075","0.090","0.105","0.120","0.135","0.150"]); zh=z.fe2.data_bounds; zh(1,2)=0; zh(2,2)=150; z.fe2.data_bounds =zh; endfunction // function [z]=fensta10(z) /////////////////////////////////////////fenster 2 , amplitude 10 z.fe2.y_ticks=tlist(['locations','labels'],[0,10,20,30,40,50,60,70,80,90,100],["0","0.01","0.02","0.03","0.04","0.05","0.06","0.07","0.08","0.09","0.1"]); zh=z.fe2.data_bounds; zh(1,2)=0; zh(2,2)=100; z.fe2.data_bounds =zh; endfunction // function [z]=fensta5(z) /////////////////////////////////////////fenster 2 , amplitude 5 z.fe2.y_ticks=tlist(['locations','labels'],[0,5,10,15,20,25,30,35,40,45,50],["0","0.005","0.010","0.015","0.020","0.025","0.030","0.035","0.040","0.045","0.050"]); zh=z.fe2.data_bounds; zh(1,2)=0; zh(2,2)=50; z.fe2.data_bounds =zh; endfunction // function [z]=fensta1(z) //////////////////////////////////////////// fenster 2 , amplitude 1 z.fe2.y_ticks=tlist(['locations','labels'],[0,1,2,3,4,5,6,7,8,9,10],["0","0.001","0.002","0.003","0.004","0.005","0.006","0.007","0.008","0.009","0.01"]); zh=z.fe2.data_bounds; zh(1,2)=0; zh(2,2)=10; z.fe2.data_bounds =zh; endfunction /////////////////////////////////////////////////////////////////////////// //fenster 2 frequenzsteuerung function [z]=fenstf20000(z) /////////////////////////////////// fenster 2 , frequenzachse 2000 z.fe2.x_ticks=tlist(['locations','labels'],[0,1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,11000,12000,13000,14000,15000,16000,17000,18000,19000,20000],["0","100","200","300","400","500","600","700","800","900","1000","1100","1200","1300","1400","1500","1600","1700","1800","1900","2000"]); z.fe2.sub_tics=[9,9,9]; zh=z.fe2.data_bounds; zh(1,1)=0; zh(2,1)=20000; z.fe2.data_bounds =zh; endfunction // function [z]=fenstf10000(z) ///////////////////////////////////// fenster 2 , frequenzachse 1000 z.fe2.x_ticks=tlist(['locations','labels'],[0,500,1000,1500,2000,2500,3000,3500,4000,4500,5000,5500,6000,6500,7000,7500,8000,8500,9000,9500,10000],['0','50','100','150','200','250','300','350','400','450','500','550','600','650','700','750','800','850','900','950','1000']); z.fe2.sub_tics=[4,9,9]; zh=z.fe2.data_bounds; zh(1,1)=0; zh(2,1)=10000; z.fe2.data_bounds =zh; endfunction // function [z]=fenstf5000(z) ///////////////////////////////////// fenster 2 , frequenzachse 500 z.fe2.x_ticks=tlist(['locations','labels'],[0,250,500,750,1000,1250,1500,1750,2000,2250,2500,2750,3000,3250,3500,3750,4000,4250,4500,4750,5000],['0','25','50','75','100','125','150','175','200','225','250','275','300','325','350','375','400','425','450','475','500']); z.fe2.sub_tics=[4,9,9]; zh=z.fe2.data_bounds; zh(1,1)=0; zh(2,1)=5000; z.fe2.data_bounds =zh; endfunction // function [z]=fenstf2400(z) ///////////////////////////////////// fenster 2 , frequenzachse 250 z.fe2.x_ticks=tlist(['locations','labels'],[0,100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400],['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']); z.fe2.sub_tics=[9,9,9]; zh=z.fe2.data_bounds; zh(1,1)=0; zh(2,1)=2400; z.fe2.data_bounds =zh; endfunction // function [z]=fenstf1200(z) ///////////////////////////////////// fenster 2 , frequenzachse 120 z.fe2.x_ticks=tlist(['locations','labels'],[0,50,100,150,200,250,300,350,400,450,500,550,600,650,700,750,800,850,900,950,1000,1050,1100,1150,1200],['0','5','10','15','20','25','30','35','40','45','50','55','60','65','70','75','80','85','90','95','100','105','110','115','120']); z.fe2.sub_tics=[4,9,9]; zh=z.fe2.data_bounds; zh(1,1)=0; zh(2,1)=1200; z.fe2.data_bounds =zh; endfunction // function [z]=fenstf600(z) ///////////////////////////////////// fenster 2 , frequenzachse 60 z.fe2.x_ticks=tlist(['locations','labels'],[0,20,40,60,80,100,120,140,160,180,200,220,240,260,280,300,320,340,360,380,400,420,440,460,480,500,520,540,560,580,600],['0','2','4','6','8','10','12','14','16','18','20','22','24','26','28','30','32','34','36','38','40','42','44','46','48','50','52','54','56','58','60']); z.fe2.sub_tics=[1,9,9]; zh=z.fe2.data_bounds; zh(1,1)=0; zh(2,1)=600; z.fe2.data_bounds =zh; endfunction // function [z]=fenstf300(z) ////////////////////////////////////// fenster 2 , frequenzachse 30 z.fe2.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],['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30']); z.fe2.sub_tics=[1,9,9]; zh=z.fe2.data_bounds; zh(1,1)=0; zh(2,1)=300; z.fe2.data_bounds =zh; endfunction ///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// ///////// S T A R T ////////////////////////////////////// //////////////////////////////////////////////////////////////////// start // Formular erstellen z.fo=figure('position',[10,10,1400,900]); z.fo.background= 33; z.fo.color_map = jetcolormap(1000); //Colormap festlegen z.fo.visible = "on"; z.fo.figure_name="Analyse-2d-10Sekunden.sc"; z.fo.BackgroundColor=[1 1 1]; // controls in das Formular einbauen ///////////////////////////////////////graphen fenster 1 //eingang ub1=uicontrol(z.fo,"style","radiobutton",'HorizontalAlignment','left','position', [1315 850 70 15],'string','Eingang','value',1,'callback','[z]=sicht1(z)'); ub1blau=uicontrol(z.fo,"style","text",'backgroundcolor',[0 0 1],'HorizontalAlignment','left' ,'position', [1385 850 5 15],'string',''); //ausgang ub2=uicontrol(z.fo,"style","radiobutton",'HorizontalAlignment','left','position', [1315 830 70 15],'string','Ausgang','value',1,'callback','[z]=sicht2(z)'); ub2red=uicontrol(z.fo,"style","text",'backgroundcolor',[1 0 0],'HorizontalAlignment','left' ,'position', [1385 830 5 15],'string',''); ub2aus=uicontrol(z.fo,"style","text",'HorizontalAlignment','center' ,'position',[1315 810 25 15],'string',''); ub2aus2=uicontrol(z.fo,"style","text",'HorizontalAlignment','left' ,'position',[1345 810 40 15],'string','% Eing.'); ub2aus2red=uicontrol(z.fo,"style","text",'backgroundcolor',[1 0 0],'HorizontalAlignment','left' ,'position', [1385 810 5 15],'string',''); //kanal uc1=uicontrol(z.fo,"style","radiobutton", 'position', [1315 785 75 20],'HorizontalAlignment','left','string','Kanal 1/2','value',0,'callback','[z]=rechenwerk(z)'); // position uc2=uicontrol(z.fo,"style","text",'HorizontalAlignment','center' ,'position', [1340 765 50 15],'string','0'); uc3=uicontrol(z.fo,"style","text",'HorizontalAlignment','center' ,'position', [1315 765 25 15],'string','Sek.'); uc4=uicontrol(z.fo,"style","spinner", 'position', [1315 745 75 20],'HorizontalAlignment','center','VerticalAlignment','middle','min',1,'max',1,'SliderStep',[1,10],'Title_position','top','callback','[z]=rechenwerk(z)'); // verstärkung uc5=uicontrol(z.fo,"style","text",'HorizontalAlignment','center' ,'position', [1315 725 75 15],'string','Verstärkung'); uc6=uicontrol(z.fo,"style","spinner",'string','Hallo','Title_position','top', 'position', [1315 705 75 20],'HorizontalAlignment','center','VerticalAlignment','middle','min',1,'max',10,'SliderStep',[1,10],'Title_position','top','callback','[z]=rechenwerk(z)'); // fmax uc7=uicontrol(z.fo,"style","text",'HorizontalAlignment','center' ,'position', [1315 685 75 15],'string','F max (Hz)'); uf2=uicontrol(z.fo,"style","spinner", 'position', [1315 665 75 20],'visible','on','HorizontalAlignment','center','VerticalAlignment','middle','min',1,'max',2000,'SliderStep',[1,10],'Title_position','top','value',2000,'callback','if uf2.value