////FFT-P1-P50 mclose('all'); clear z=struct('pfad','','name','','pfadname','','sample',0,'start1',0,'start2',0,'info',[0 0 0 0 0 0 0 0],'laufz',0,'yf',0,'yff',[0.1],'g',0,'h1',0,'h2',0,'h3',0,'h4',0,'h5',0,'g1',0,'g2',0,'g3',0,'g4',0,'g5',0,'v',1,'p50',0,'lp1',0,'lp50',0,'hs50',0,'hs1',0,'kfakt',1,'ufakt',1,'p1a',0,'form',0,'pos',0,'kalibrierwert',0,'wahlwert',70,'ti','FFT Wave und Hörschwellen','v',1,'z',0,'xp1',0,'xp50',0,'kanal',1); ///////////////////////////// Kalibrierwert einstellen ///////////////////// z.kalibrierwert=70 /////////////////////////////////////////////////////////////////////////// // 25 Hz - 0.8609938 -- 860.9938 /////////////////////////////hörschwellen bis 8000 Hz //hs1 z.hs1=[31 42.3;40 36;50 29.8;63 24.9;80 20.9;100 17.1;125 13.3;160 9.1;200 5.5; 250 2.5;315 -0.1;400 -2.2;500 -3.8;630 -5.4;750 -6.5;800 -6.9;1000 -7.6; 1250 -7.4;1500 -9.1;1600 -9.9;2000 -13.1;2500 -15.9;3000 -17.2;3150 -17.4; 4000 -16.7;5000 -13.2;6000 -8;6300 -6.5;8000 -0.8] //hs1 ergänzung z.hs1e=[20 48;25 45.5;31 42.3] //hs50 z.hs50=[20 78.5;25 68.7;31 59.5;40 51.1;50 44;63 37.5;80 31.5;100 26.5; 125 22.1;160 17.9;200 14.4;250 11.4;315 8.6;400 6.2;500 4.4;630 3;750 2.4; 800 2.2;1000 2.4;1250 3.5;1500 2.4;1600 1.7;2000 -1.3;2500 -4.2;3000 -5.8; 3150 -6;4000 -5.4;5000 -1.5;6000 4.3;6300 6;8000 12.6] ///////////////////////////////////// function aus=fuellen(ein) //Reihung prüfen a=gsort(ein,'lr','i'); x=a(:,1); y=a(:,2); m=max(x); if m<20001 then l=linspace(1,m,m); s=size(x); for i=1:1:s(1)-1; // dx1=x(i); dx2=x(i+1); dx12=dx2-dx1; dy1=y(i); dy2=y(i+1); dy12=dy2-dy1; yz=dy1:dy12/dx12:dy2; l(x(i):x(i+1))=yz; end end aus=l; endfunction ////////////////////////Hörschwelle p1 //vervollständigung der Hörschwelle z.xp1=linspace(1,8000,8000); e=fuellen(z.hs1); z.xp1=e; //umrechnen von dB in linear auf 70 dB obergrenze e=z.xp1-70; e=e./20; e=10^e; z.lp1=e; ////////////////////////Hörschwelle p1e ergänzung //vervollständigung der Hörschwelle z.xp1=linspace(1,31,31); e=fuellen(z.hs1e); z.xp1e=e; //umrechnen von dB in linear auf 70 dB obergrenze e=z.xp1e-70; e=e./20; e=10^e; z.lp1e=e; ///////////////////////Hörschwelle p50 //vervollständigung der Hörschwelle z.xp50=linspace(1,8000,8000); e=fuellen(z.hs50); z.xp50=e; //umrechnen von dB in linear auf 70 dB obergrenze e=z.xp50-70; e=e./20; e=10^e; z.lp50=e; /////////////// //verstärkung a=1:1:10; a=a./20; a=10^a; z.z(1)=1; z.z(2:11)=a; //////////////////////////////// function [z]=neu(z) ////////////////////////////////////////////////////////////////////////////// //disp(z.h1) if z.g1 ==0 then else delete(z.g1);z.g1=0; end; if z.g2 ==0 then else delete(z.g2);z.g2=0; end; if z.g3 ==0 then else delete(z.g3);z.g3=0; end; if z.g4 ==0 then else delete(z.g4);z.g4=0; end; if z.g5 ==0 then else delete(z.g5);z.g5=0; end; // WAV Datei auswählen [z.name,z.pfad]=uigetfile('*.wav','D:\Mdaten'); //WAV Datei wählen if isequal(z.name,''); //Ist eine Date gewählt? else z.pfadname=z.pfad+'\'+z.name; //Vollständigen Pfad erstellen z.info = wavread(z.pfadname,'info'); //WAV Info`s laden disp('//////////////////////////////////////////////////////////') disp('WAV-Datei: '+z.pfadname); //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.pfadname,'.'); z.laufz=floor(z.info(8)/z.info(3)); // lauzeit in sekunden z.sample=z.info(3); //Samplerate der Audiodatei z.h1.data_bounds(2,1)=z.sample;//fenster oben x achse if z.info(2)==2 then set(u18,'string','2 Kanal') z.kanal=2 else set(u18,'string','1 Kanal') z.kanal=1 end //faktor berechnen a=70-z.kalibrierwert; a=a/20; a=10^a; a=1/a; z.kfakt=a; /////// set(u16,'string',z.pfadname); z.start1=1; z.start2=z.sample; z.pos=1; set(u3,'string',string(z.laufz)); set(u4,'max',z.laufz); set(u4,'min',1); [z]=rechenwerk(z); [z]=achseoben(z); [z]=achseunten(z); end endfunction //////////////////////////////////////////////////////////////////////////// function [z]=rechenwerk(z) // if z.start2 < z.info(8) then z.yf=wavread(z.pfadname,[z.start1 z.start2]); z.yf=z.yf(z.kanal,:); z.yf=z.yf*z.v; //// z.yff=fft(z.yf,-1,'nonsymmetric'); //Die FFT wird berechnen z.yff=z.yff/z.sample; z.g=z.yff(1); z.yff=abs(z.yff(2:8000)); z.yff=z.yff*2000; //eingangssignal a=abs(z.yf); a=sum(a); a=a/z.sample;//arithmetischer mittelwert c=a*1.5708187; b=a*1.111; set(u31,'string',string(' '+string(a)+ ' Gleichrichtwert')); set(u32,'string',string(' '+string(b)+ ' Effektivwert')); set(u33,'string',string(' '+string(c)+ ' Amplitude')); //// end; endfunction ///////////////////////////////////////////////////////////////////////7///// function [z]=achseoben(z) sca(z.h1); if z.g1 ==0 then else delete(z.g1);z.g1=0; end;// wav signal if z.g2 ==0 then else delete(z.g2);z.g2=0; end; // fft signal if z.g3 ==0 then else delete(z.g3);z.g3=0; end; // p50 signal if z.g4 ==0 then else delete(z.g4);z.g4=0; end; // p1 signal if z.g5 ==0 then else delete(z.g5);z.g5=0; end; // p1e signal z.h1.x_ticks=tlist(['locations','labels'],[0,z.sample*0.1,z.sample*0.2,z.sample*0.3,z.sample*0.4,z.sample*0.5,z.sample*0.6,z.sample*0.7,z.sample*0.8,z.sample*0.9,z.sample*1],[string(z.pos+0),string(z.pos+0.1),string(z.pos+0.2),string(z.pos+0.3),string(z.pos+0.4),string(z.pos+0.5),string(z.pos+0.6),string(z.pos+0.7),string(z.pos+0.8),string(z.pos+0.9),string(z.pos+1)]); plot([1:z.sample],z.yf,'red');//,'thickness',3); z.g1=gce(); //////////////////////// endfunction /////////////////////////////////////////////////////////////////////////// function [z]=achseunten(z) // if z.g2 ==0 then else delete(z.g2);z.g2=0; end; if z.g3 ==0 then else delete(z.g3);z.g3=0; end; if z.g4 ==0 then else delete(z.g4);z.g4=0; end; if z.g5 ==0 then else delete(z.g5);z.g5=0; end; sca(z.h2); a=z.yff*z.kfakt*z.ufakt; //plot(a,'blue','thickness',3); plot2d(a); z.g2=gce() // a=z.lp50*1000*z.kfakt*z.ufakt //plot([20:8000],a(20:8000),'green','thickness',3); plot2d([20:8000],a([20:8000])); z.g3=gce() // a=z.lp1*1000*z.kfakt*z.ufakt //plot([31:8000],a(31:8000),'red','thickness',3); plot2d([31:8000],a([31:8000])) z.g4=gce() // a=z.lp1e*1000*z.kfakt*z.ufakt //plot([20:31],a(20:31),'magenta','thickness',3); plot2d([20:31],a([20:31])); z.g5=gce() b=gca(); b.children.children(1).thickness=3; b.children.children(1).foreground=color('magenta'); b.children.children(2).thickness=3; b.children.children(2).foreground=color('red'); b.children.children(3).thickness=3; b.children.children(3).foreground=color('green'); b.children.children(4).thickness=3; b.children.children(4).foreground=color('blue'); // legend(['FFT - Wave';'Hörschwelle P50 DIN';'Hörschwelle P1';'Hörschwelle P1 Schätzung']); /////////////////////////////////////////////////////////////////////// endfunction ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// function [z]=position(z) // if z.pos>1 then // if z.pos