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

Daten aus *.mat-File einlesen + Signalverarbeitung

 

Johanna1987
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2013, 12:43     Titel: Daten aus *.mat-File einlesen + Signalverarbeitung
  Antworten mit Zitat      
Hallo,

ich komme in Matlab aufgrund eines trivialen Problems, selbst nach umfangreicher Literatur und Internet-Recherche nicht weiter.

Folgendes hab ich ich vor:

Messdaten sollen weiter verarbeitet werden, bspw. FFT. Diese liegen in einem *.mat-File vor, allerdings verschachtelt, d.h. wenn ich mein mat-File lade, so gibt es lediglich eine Variable, bspw 'Daten' hinter der sich weitere Variablen verstecken, d.h.: Daten.y_Werte.Werte

Diese kann ich aufrufen durch

>load 'Daten.mat'
>Daten.y_Werte.Werte

Hinter Werte verbirgt sich eine riesige Matrix 8000x20. Diese soll nun spaltenweise verarbeitet werden, d.h. Spalte 1 -> Signalverarbeitung, plotten, fertig; Spalte 2 -> Signalverarbeitung, plotten, fertig usw.

Ich hoffe, dass mir jemand weiterhelfen kann.

Vielen Dank im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.02.2013, 15:48     Titel: Re: Daten aus *.mat-File einlesen + Signalverarbeitung
  Antworten mit Zitat      
Hallo Johanna1987,

Was ist nun genau die Frage, bei der Du Hilfe benötigst?
Eine [8000x20] Matrix gilt gemeinhin nicht als "riesig".

Ich rate mal:
Code:
Data = Daten.y_Werte.Werte;
for iCol = 1:size(Data, 2)
  V = Data(:, iCol);
  % Jetzt Deine Berechnungen und die Grafik
end

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Johanna1987
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2013, 18:54     Titel:
  Antworten mit Zitat      
Hallo Jan,

ja vielen Dank Wink , es scheint zu funktionieren. Jedoch habe ich jetzt das Problem, dass die erstellten Plots jedes Mal überschrieben werden. Wie kann ich diese Problem beheben? Embarassed

Ich bräuchte also eine Funktion, um die nach jedem Durchlauf (pro Datenreihe werden sollen 6 Diagramme erstellt werden) die erstellten Diagramme speichert.

Sinnvoll wäre an dieser Stelle natürlich jedes Diagramm auch richtig zu benennen, bspw. Diagramm 1; Messreihe 1, aber das sei zunächst zweitrangig.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.02.2013, 14:59     Titel:
  Antworten mit Zitat      
Hallo Johanna,

Es ist nicht effizient, wenn wir raten, was Du genau machst. Wenn Du den Code postest, ist es trivial einen Ratschlag zu geben, an welcher Stelle man eine zusätzliche Zeile einfügen muss um eine neue Figure zu öffnen.
Ich weiß auch nicht, was genau "Diagramm speichern" bedeutet. Das könnten eine Menge verschiedener Dinge sein.
Es ist ebenfalls nicht klar, was "Diagramme benennen" bedeutet: Ein Titel üder dem Diagramm, ein Titel für die Figure, oder der Name eines abgespeicherten Grafik-Files?

Bei der Kommunikation in einem Forum ist zu bedenken, dass die Leser nicht den blassesten Schimmer davon haben, was Du genau machst, obwohl es für Dich vollkommen offensichtlich ist. Oft ist eine Antwort, bei der die Details geraten wurden, sogar noch schädlicher als gar keine Antwort, weil falsche Vorschläge Zeit rauben und einen zusätzlich verwirren. Deshalb rate ich Dir, alle notwendigen Details zu posten und dabei lieber ein klein wenig zu viele Details zu erklären.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Johanna1987
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.02.2013, 11:09     Titel:
  Antworten mit Zitat      
Code:
clc
clear all
close all

load ('Daten.mat')

fa = 1/Daten.x_werte.inkrement; % Abtastfrequenz 1/Ta
fn = fa/2; % Nyquistfrequenz
N = Daten.x_werte.werte; % gewünschte FFT-Länge (N=2^x, sonst wird der DFT-Algorithmus verwendet!)
df = fa/N; % diskrete Frequenzschrittweite = Auflösung des Spektrums
dt = 1/fa; %Inkrement
%f=0:df:fn; % Frequenzvektor in Hz nur positiver Freq.-bereich ->siehe
%Zeile 42
t=0:dt:(N-1)*dt; %Zeitvektor

Data = Daten.y_werte.werte;

for iCol = 1:1:24
    %size(Data, 2)
  y = Data(:,iCol);
  % Jetzt Deine Berechnungen und die Grafik


% Graphische Darstellung
% ----------------------
% max. Amplitude zur Skalierung der graphischen Darstellung feststellen:
max_y = max(abs(y))*1.1;
fig = figure(iCol);
plot(t,y)
axis([0 1 -max_y max_y])   %skallieren
title('Rohsignal')
ylabel('Amplitude')
xlabel('Zeit')
grid

% Frequenzbereich
% ----------------------------------
% Berechnung der FFT

Y = fft(y,N); % FFT

f = fa/2*linspace(0,df,N/2); % Frequenzvektor: Skalierung des Ergebnisses
fig=(figure(fig+1))
plot(f,2*abs(Y(1:N/2)))     % Plot in Skalierung
title('Frequenzspektrum y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')

% Ausgabe in dB
% ------------------
fig = figure(fig+1);
plot(f, 20*log10(2*abs(Y(1:N/2))))
%axis([-fn fn -100 20*log10(a/2)+3])
%axis([-fn fn -100 3])
title('Amplitudengang')
ylabel('Amplitude in dB')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
grid

% Fensterfunktion
% ----------------------
% Anhang an die bereits erfolgte Untersuchung
% -------------------------------------------
win = .5*(1 - cos(2*pi*(1:N)'/(N+1))); %Hanning Fenster
%y_win = y.*win; % Fensterung ohne Amplitudenkorrektur
y_win = y.*win*N/sum(win); % Fensterung mit Amplitudenkorrektur
max_y = max(abs(y_win))*1.1;

fig = figure(fig+1);
plot(y_win)
axis([0 N -max_y max_y])
title('Datensatz nach Fensterung mit Hann-Fenster')
ylabel('Amplitude')
xlabel('N Stützstellen')
grid

% Berechnung der FFT
% ------------------
Y_win = fft(y_win,N); % FFT

f = fa/2*linspace(0,df,N/2); % Frequenzvektor: Skalierung des Ergebnisses
fig=(figure(fig+1))
plot(f,2*abs(Y_win(1:N/2)))     % Plot in Skalierung
title('Frequenzspektrum y(t) nach Fensterung')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')

% Ausgabe in dB
% ------------------
fig = figure(fig+1);
plot(f, 20*log10(2*abs(Y_win(1:N/2))))
%axis([-fn fn -100 20*log10(a/2)+3])
%axis([-fn fn -100 3])
title('Amplitudengang')
ylabel('Amplitude in dB')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
grid

end
 


Die erste figure besitzt jetzt schon einmal die Laifvariable iCol und erhöht sich immer um 1. Wenn ich das Programm jetzt durchlaufen lasse, wird figure 1-6 problemlos erstellt, nun geht es beim nächsten iCol mit 2 weiter und die schon bestehende figure 2 wird überschrieben usw.

Meine Überlegung wäre nun nach jedem iCol die 6 erstellten zunächst zu speichern, bevor der nächste Datensatz verarbeitet wird.

Ich bin keine Matlab-Spezialistin, dies ist mein erster Kontakt mit Matlab. Der Code ist aus mehreren hier im Forum herumschwirrenden Codes zusammengebastelt und angepasst.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.02.2013, 22:26     Titel:
  Antworten mit Zitat      
Hallo Johanna,

Wenn dies Dein erster Kontakt mit Matlab ist, kannst Du mir bitter erklären, wie Du auf "clc, clear all, close all" kommst? Diese brutalen Aufräum-Methoden verfolgen mich durchs Forum und ich verstehe einfach nicht, wo die Idee dazu herkommen könnte. "clear all" löscht alle Funktionen aus dem Speicher und das Nachladen von der Festplatte raubt Zeit, bietet aber nur dann einen Nutzen, wenn man während(!) des Programmlaufs alle(!) M-Files geändert hat.

Zitat:
Meine Überlegung wäre nun nach jedem iCol die 6 erstellten zunächst zu speichern, bevor der nächste Datensatz verarbeitet wird.

Was bedeutet das nun genau? In welchem Format möchtest Du die Figure abspeichern? Wieso nur nach 6 Figures und nicht nach dem Erstellen jeder einzelnen Figure (das wäre einfacher).

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Johanna1987
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.02.2013, 17:16     Titel:
  Antworten mit Zitat      
Soviel Zeit benötigt das Programm dann doch wieder nicht, beschränke mich aber auch gerne auf:
Code:


Habe das Problem nun folgendermaßen gelöst:

Ich hab die erste figure aus der Schleife rausgezogen, dann 6 neue figures erstellt und diese über den printbefehl einzeln gespeichert.
Bevor die for-Schleife nun mit der nächsten Spalte anfängt und die Berechnungen erneut beginnen:

Code:


Wink

Also:

Code:


fig = figure ();

for iCol = 1:1:24
    %size(Data, 2)
  y = Data(:,iCol);
  nm = Name(:,iCol);
 
% Graphische Darstellung
% ----------------------
% max. Amplitude zur Skalierung der graphischen Darstellung feststellen:
max_y = max(abs(y))*1.1;
fig = figure(fig+1);
plot(t,y)
axis([0 1 -max_y max_y])                        %skallieren
title(nm)                                                  %Rohsignal
ylabel('Amplitude [m/s^2]')
xlabel('Zeit [s]')
grid
print(fig,'-dpng')

...

close all;

end

 


Ich gebe ja zu, es gibt sicherlich geschicktere Methoden, dennoch funktioniert es Smile.
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.