WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Komfortable Signalanalyse in 3D und in SCILAB

 

brummfritz
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.16
Wohnort: Düsseldorf
Version: Matlab R2015b
     Beitrag Verfasst am: 17.01.2018, 17:19     Titel: Komfortable Signalanalyse in 3D und in SCILAB
  Antworten mit Zitat      
Code:
// 3d-Analyse 6
// WAV Dateien mit Abtastfrequenzen von 22005 und 96000 Hz können genutzt werden
// Vermutlich können auch Dateien mit anderen Abtastfrequenzen genutzt werden.
// Abtastfrequenzen von 22000 bis 96000 sind möglich. Ich bevorzuge 48000.
// Es werden FFT Frequenzen von 1 bis 250 Hz berechnet
// Es werden Zeitabschnitte von 60 Sekunden berechnet
// Das Signal kann von 1 bis 10 verstärkt werden
// Es kann zwischen Kanal 1 und Kanal 2 gewechselt werden
// Es wird im Textfeld Position Sek. die Laufzeit der WAV Datei angezeigt
// Die Start-Position des zu berechnenden Abschnittes wird mit dem Zähler ausgewählt
// Es kann zwischen FFT Darstellung und Power Darstellung gewählt werden
// Es kann die Grafik Anzeige auf der Frequenz Achse gezoomt werden
// Die Zoomfrequenz kann mit dem Zähler eingestellt werden
// Mit der Taste Zoom Grafik wird die eingestellte Zoom Frequenz aktiviert
// Mit der Taste Save Grafik wird die angezeigte Grafik in einer gif Datei gespeichert
// Mit der Taste Start werden alle oben eingestellten Voreinstellungen aktiviert und neu berechnet

// mit der Playposition wird ein Startpunkt ausgewählt und eine Sequenz
// von 10 Sekunden Länge wird von diesem Startpunkt an abgespielt

// Mit der Taste Neu wird eine neue WAV Datei ausgewählt
// Nit der Taste Exit wird die Sitzung beendet
/////////////////////////////////////////////////////////////////////////////
mclose('all');
clear;
xdel();
z=struct('pfad','','datei','','pfaddatei','','info','','laufzeit',0,'samplerate',0,'ueberdeckung',0,'gleich',0,'posi',1,'start1',0,'start2',0,'wa',0,'ff',0,'power',0,'aaff',0,'aapp',0,'fo1',0,'fo2',500,'zeit',0,'a1',0,'a2',0,'a3',0,'b1',0,'b2',0,'b3',0,'h1',0,'graph1',0,'f',0,'cm',0,'kanal',1,'verstaerkung',1,'wa',0,'darst',1,'spiel',0,'spiel1',0);
/////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
function [z]=neu(z)
//////////////////////////////////////////////////////////////////////////////
// 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
if z.laufzeit<60 then;
    warning('Die WAV Datei muss mindestens 60 Sekunden Laufzeit haben')
else
set(u43,'max',z.laufzeit-60); // laufzeitwert max in formular spinner
set(u42,'string','max  '+string(z.laufzeit)); // laufzeitwert max in formular spinner
set(u62,'max',z.laufzeit-10); // laufzeitwert max in formular play spinner
set(u34,'max',z.info(2)); // kanalzahl max in formular spinner
z.samplerate=z.info(3); //Samplerate der Audiodatei
set(u71,'string',' WAV-Datei > '+z.pfaddatei); // dateiname ins formular
//überdeckung ermitteln
z.ueberdeckung=floor(z.samplerate/8);
z.gleich=0;
[z]=rechenwerk(z)
[z]=malen0(z)
end
end
endfunction
/////////////////////////////////////////////////////////////////////////////
function [z]=rechenwerk(z)// rechenwerk
//// FFT brechnen
z.start1=(z.posi-1)*z.samplerate;
z.start1=z.start1+1;
z.spiel1=z.start1;
z.start2=(z.posi*z.samplerate);
if z.start2<z.info(8)then
//
winId=waitbar('Berechne 473 FFTs, Leistungsspektren');
z.w=window('hn',z.samplerate);
for i=1:1:473; // überdeckung je sek =8 für 1 Min= 60-1*8+1 sek = 473
waitbar(i/473,winId);
z.wa=wavread(z.pfaddatei,[z.start1 z.start2]);
z.wa=z.wa(z.kanal,:);
z.wa=z.wa*z.verstaerkung;// verstärkung
//
z.ff=fft(z.wa,-1,'nonsymmetric'); //Die FFT wird berechnen
z.ff=z.ff/z.samplerate;
z.gleich=z.ff(1);
z.ff=abs(z.ff(2:z.samplerate));
// powerspektrum
z.power=abs(z.ff.* conj(z.ff));   //Powerspektrum der FFT berechnen
z.power=z.power(1:1000);
z.ff=z.ff(1:1000);
// normieren
z.ff=z.ff*2000;// normieren
z.power=z.power*4000;// normieren
z.aaff(i,1:500)=z.ff(1:500); // fft daten
z.aapp(i,1:500)=z.power(1:500); // leistungsdaten
z.start1=z.start1+z.ueberdeckung;
z.start2=z.start2+z.ueberdeckung;
end
close(winId);
set(u72,'string',' Gleichspannungsanteil > '+msprintf('%1.6f',z.gleich)); // dateiname ins formular
w=size(z.aaff);  //Größe des Array ermitteln
fx=1:1:w(1);   //X-Achse zum ploten aufbauen
fy=1:1:w(2);   //Y-Achse zum ploten aufbauen
//
[z.a1,z.a2,z.a3]=genfac3d(fx,fy,z.aaff(fx,fy));   //Plot fft
[z.b1,z.b2,z.b3]=genfac3d(fx,fy,z.aapp(fx,fy));   //Plot leistung

end
///
endfunction
////////////////////////////////////////////////////////////////////////////
function [z]=malen0(z)
//
select z.darst
case 1
    [z]=malen1(z)
case 2
    [z]=malen2(z)
end
endfunction
/////////////////////////////////////////////////////////////////////////////
function [z]=malen1(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]=malen2(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]=kanal(z)
    if u1.value==z.kanalzahl  then
    else
        z.kanal=u1.value;
    end
endfunction
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
function[z]=savgif1(z)
//
if z.pfaddatei=='' then
else
zd=getdate();
zs=z.pfaddat(1)+'_'+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]=starten1(z)
//
if z.pfaddatei=='' then
else
z.h1.zoom_box=[0,0,480,u52.value];
if z.graph1 ==0 then else delete(z.graph1);z.graph1=0; end;
[z]=rechenwerk(z)
[z]=malen0(z)
end
endfunction
///////////////////////////////////////////////////////////////////////
function [z]=position1(z)
//
a=z.laufzeit-61;
if z.posi<a then
//
z.posi2=z.posi;
end
endfunction
///////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
/////////     S T A R T      //////////////////////////////////////
//////////////////////////////////////////////////////////////////// start
// Formular erstellen
z.f=figure('position',[10,10,1400,900]);

//z.f.axes_size = [1800,874]
z.f.auto_resize = "on"
z.f.viewport = [0,0]
//z.f.figure_name = "Grafik-Fenster Nummer %d"
//z.f.figure_id = 0
z.f.info_message = ""
//cm=load('D:\Scilab\cm.dat')
//z.cm=cm;
//z.f.color_map = z.cm;
z.f.pixel_drawing_mode = "copy"
z.f.anti_aliasing = "off"
z.f.immediate_drawing = "on"
z.f.background =  -2
z.f.visible = "on"
z.f.rotation_style = "unary"
//z.f.event_handler = ""
//z.f.event_handler_enable = "off"
z.f.user_data = []
z.f.resizefcn = ""
z.f.closerequestfcn = ""
z.f.resize = "on"
//z.f.toolbar_visible = "on"
z.f.dockable = "on"
//z.f.layout = "none"
//z.f.layout_options = "OptNoLayout"
z.f.default_axes = "on"
z.f.icon = ""
z.f.tag = ""

// controls in das Formular einbauen
////////////////////////////////////voreinstellungen
// überschrift
u11=uicontrol(z.f,"style","text",'HorizontalAlignment','center' ,'position', [1310 870 80 20],'string','1 bis 250 Hz');
u12=uicontrol(z.f,"style","text",'HorizontalAlignment','center' ,'position', [1310 840 80 20],'string','Zeit 60 Sek.');
//
//verstärkung
u31=uicontrol(z.f,"style","text",'HorizontalAlignment','center' ,'position', [1310 810 80 20],'string','Verstärkung');
u32=uicontrol(z.f,"style","spinner", 'position', [1310 780 80 30],'HorizontalAlignment','center','VerticalAlignment','middle','min',1,'max',10,'SliderStep',[1,10],'Title_position','top','callback','z.verstaerkung=u32.value');
//kanalwahl
u33=uicontrol(z.f,"style","text",'HorizontalAlignment','center' ,'position', [1310 750 80 20],'string','Kanalwahl');
u34=uicontrol(z.f,"style","spinner", 'position', [1310 720 80 30],'HorizontalAlignment','center','VerticalAlignment','middle','min',1,'max',1,'SliderStep',[1,10],'Title_position','top','callback','z.kanal=u34.value');
//position der berechnung
u41=uicontrol(z.f,"style","text",'HorizontalAlignment','center' ,'position', [1310 690 80 20],'string','Position Sek.');
u42=uicontrol(z.f,"style","text",'HorizontalAlignment','center' ,'position', [1310 670 80 20],'string','1');
u43=uicontrol(z.f,"style","spinner", 'position', [1310 640 80 30],'HorizontalAlignment','center','VerticalAlignment','middle','min',1,'max',1,'SliderStep',[1,10],'Title_position','top','callback','z.posi=u43.value');
z.posi=u43.value
////darstellung
u46=uicontrol(z.f,"style","text",'HorizontalAlignment','center' ,'position', [1310 605 80 20],'string','Darstellung');
u47=uicontrol(z.f,"style","radiobutton",'groupname','darst','HorizontalAlignment','left','position', [1310 585 80 20],'string','FFT','callback','z.darst=1;[z]=malen0(z)');
u48=uicontrol(z.f,"style","radiobutton",'groupname','darst','HorizontalAlignment','left','position', [1310 565 80 20],'string','Power','callback','z.darst=2;[z]=malen0(z)');
u47.value=1;
//zoom
u51=uicontrol(z.f,"style","text",'HorizontalAlignment','center' ,'position', [1310 530 80 20],'string','Zoom Frequenz');
u52=uicontrol(z.f,"style","spinner", 'position', [1310 500 80 30],'HorizontalAlignment','center','VerticalAlignment','middle','min',1,'max',250,'SliderStep',[1,10],'Title_position','top','callback','');
u52.value=250;
u54=uicontrol(z.f,"style","pushbutton","Relief", "raised",'HorizontalAlignment','center' ,'position', [1310 470 80 20],'string','Zoom Grafik','callback','z.h1.zoom_box=[0,0,480,u52.value]');
//savegrafik
u55=uicontrol(z.f,"style","pushbutton","Relief", "raised",'HorizontalAlignment','center' ,'position', [1310 440 80 20],'string','Save Grafik','callback','[z]=savgif1(z)');
///start
u59=uicontrol(z.f,"style","pushbutton","Relief", "raised",'HorizontalAlignment','center' ,'position', [1310 410 80 20],'string','Start','callback','[z]=starten1(z)');
//position play
u61=uicontrol(z.f,"style","text",'HorizontalAlignment','center' ,'backgroundcolor',[0.8 0.5 0.5],'position', [1310 200 80 20],'string','Playposition');
u62=uicontrol(z.f,"style","spinner", 'position', [1310 170 80 30],'HorizontalAlignment','center','VerticalAlignment','middle','min',1,'max',1,'SliderStep',[1,10],'Title_position','top','callback','z.spiel1=u62.value');
z.spiel1=u62.value
u69=uicontrol(z.f,"style","pushbutton","Relief", "raised",'backgroundcolor',[0.8 0.5 0.5], 'position', [1310 130 80 25],'string','Play 10 Sek.','callback','z.spiel1=(u62.value-1)*z.samplerate+1;z.spiel=wavread(z.pfaddatei,[z.spiel1 z.spiel1+z.samplerate*10]);playsnd(z.spiel,z.samplerate)');
///dateianzeige unten
// Dateianzeige
u71=uicontrol(z.f,"style","text",'FontWeight','bold','HorizontalAlignment','left' ,'position', [50 10 700 20],'string','');
u72=uicontrol(z.f,"style","text",'FontWeight','bold','HorizontalAlignment','left' ,'position', [800 10 300 20],'string','');
// Neu
u98=uicontrol(z.f,"style","pushbutton","Relief", "raised",'backgroundcolor',[0.8 0.5 0.5], 'position', [1310 50 80 25],'string','Neu','callback','[z]=neu(z)');
// Exit
u99=uicontrol(z.f,"style","pushbutton","Relief", "raised", 'backgroundcolor',[0.8 0.5 0.5],'position', [1310 10 80 25],'string','Exit','callback','close');


u999a=uicontrol(z.f,"style","text",'backgroundcolor',[0 1 0],'position', [1392 410 10 480],'string','');
u999b=uicontrol(z.f,"style","text",'backgroundcolor',[0 1 0],'position', [1392 130 10 90],'string','');
u999c=uicontrol(z.f,"style","text",'backgroundcolor',[0 1 0],'position', [1392 10 10 65],'string','');

//////////////////////////////////////garphicfenster einbauen
z.h1 = newaxes(); //
z.h1.axes_bounds = [-0.05,-0.05,1.17,1.05];
///////////////////////////////////////////////
sca(z.h1)
z.h1.visible = "on"
z.h1.axes_visible = ["on","on","on"]
z.h1.axes_reverse = ["on","off","off"]
z.h1.grid = [1,1,1]
z.h1.grid_position = "background"
z.h1.grid_thickness = [1,1,1]
z.h1.grid_style = [1,1,1]
z.h1.x_location = "bottom"
z.h1.y_location = "left"
z.h1.auto_ticks = ["off","off","off"]
z.h1.z_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"]);
z.h1.y_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],["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"]);
z.h1.x_ticks=tlist(['locations','labels'],[0,40,80,120,160,200,240,280,320,360,400,440,480],["0","5","10","15","20","25","30",'35','40','45','50','55','60']);
z.h1.ticks_format = ["","",""]
z.h1.ticks_st = [1,1,1;0,0,0]
z.h1.box = "back_half"
z.h1.filled = "on"
z.h1.sub_ticks = [4,9,4]
z.h1.font_style = 6
z.h1.font_size = 2
z.h1.font_color = -1
z.h1.fractional_font = "off"

z.h1.title.font_size=2;
//z.h1.title.text=z.pfaddatei;
z.h1.x_label.font_size=2;
z.h1.x_label.text="Sekunden";
z.h1.x_label.visible="on";
z.h1.y_label.font_size=2;
z.h1.y_label.text="Frequenz";
z.h1.y_label.visible="on";
z.h1.z_label.font_size=2;
z.h1.z_label.text="Amplitude";
z.h1.z_label.visible="on";
//z.h1.legend=z.pfaddatei;
 
z.h1.isoview = "off"
z.h1.cube_scaling = "on"
z.h1.view = "3d"
z.h1.rotation_angles = [10,-10]
z.h1.log_flags = "nnn"
z.h1.tight_limits = ["on","on","on"]

z.h1.zoom_box = []
z.h1.auto_margins = "off"
z.h1.margins = [0.07,0.165,0.08,0.11]
z.h1.axes_bounds = [-0.05,-0.05,1.17,1.05]
z.h1.auto_clear = "off"
z.h1.auto_scale = "off"
z.h1.hidden_axis_color = 4
z.h1.hiddencolor = 4
z.h1.line_mode = "on"
z.h1.line_style = 1
z.h1.thickness = 1
z.h1.mark_mode = "off"
z.h1.mark_style = 0
z.h1.mark_size_unit = "tabulated"
z.h1.mark_size = 0
z.h1.mark_foreground = -1
z.h1.mark_background = -2
z.h1.foreground = -1
z.h1.background = -2
z.h1.arc_drawing_method = "lines"
z.h1.clip_state = "off"
//z.h1.clip_box = []
z.h1.user_data = []
z.h1.tag = ""
zh(1,3)=0;// Amplitude
zh(2,3)=1000;// Amplitude
zh(1,2)=0;// Frequenz
zh(2,2)=250;// Frequenz
zh(1,1)=0;// Zeit
zh(2,1)=480;//Zeit
z.h1.data_bounds =zh;

/////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
////farbe
for i=1:1200
    cm(i,:)=[0 0 0]
end
cm(1:150,:)=jetcolormap(150)
for i=130:1200
    cm(i,:)=[1 0.2 0]
end
z.cm=cm(30:1030,:);
cmm=[0 0 0.2]
z.cm(100,:)=cmm;
z.cm(200,:)=cmm;
z.cm(300,:)=cmm;
z.cm(400,:)=cmm;
z.cm(500,:)=cmm;
z.cm(600,:)=cmm;
z.cm(700,:)=cmm;
z.cm(800,:)=cmm;
z.cm(900,:)=cmm;
//z.cm=jetcolormap(1000)
z.f.color_map = z.cm;
///////////////////////////////////////////

 
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.