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

Mittels fft die Amplitude bestimmen

 

Sanjaa

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2016, 13:15     Titel: Mittels fft die Amplitude bestimmen
  Antworten mit Zitat      
Hallo,

ich habe meine gemessene Kurve mit einem Oszilloskop gespeichert(csv Datei). Ich kann mir die Kurve in Matlab anzeigen lassen.
Nun möchte ich die Amplitude mittel fft bestimmen.

Dazu habe ich folgenden Code auf dieser Website gefunden:
http://www.cbcity.de/frequenzspektr.....r-dft-mit-matlab#comments

Wie kann ich nun die Amplitude bestimmen? Ich kenne mich mit Matlab leider noch nicht so gut aus.

Danke!


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 30.11.2016, 17:25     Titel: Re: Mittels fft die Amplitude bestimmen
  Antworten mit Zitat      
Hallo Sanjaa,

Was ist genau Deine Frage?
Hast Du schon Matlab installiert? Weißt Du, wie man eine Funktion schreibt? Funktioniert der Daten-Import bereits? Bekommst Du Fehlermeldungen, wenn Du das Script laufen lässt? Wie können wir Dir genau helfen?

Bemerkung: Lasse Dich nicht von dem "clear all" am Anfang anstecken: Das ist eine schlechte Programmier-Praxis. Benutze lieber Funktionen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sanjaa

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2016, 18:14     Titel:
  Antworten mit Zitat      
Zur Info. Meine csa Datei zeigt im Workspace 2 Dateien an als 1000000x1 double, wenn ich sie importiere, falls diese Info relevant ist.

Wenn ich auf run gehe, zeigt er mir bereits in Zeile 13 einen Fehler an:

Error in Untitled (line 13)
P = filedata.data; %vertikale Netzlast in MW
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 30.11.2016, 19:54     Titel:
  Antworten mit Zitat      
Hallo Sanjaa,

Zitat:
Meine csa Datei zeigt im Workspace 2 Dateien an als 1000000x1 double, wenn ich sie importiere, falls diese Info relevant ist.

Relevant vielleicht schon, aber unverständlich.
Ist "csa" ein Tippfehler und Du meinst "csv"? Wie zeigt Dir die Datei im Workspace etwas an?

Zitat:
Wenn ich auf run gehe, zeigt er mir bereits in Zeile 13 einen Fehler an:

Error in Untitled (line 13)
P = filedata.data; %vertikale Netzlast in MW

Dies ist leider nur ein Teil der Fehlermeldung. Der wichtigste Teil fehl aber, nämlich welcher Fehler denn eigentlich aufgertreten ist.

Bitte poste den Code, den Du verwendest. Diese Zeile wirst Du ja nicht exakt übernehmen, oder?
Code:
filedata = importdata('Vertikale_Netzlast_2011.csv',';');


Gruß, Jan

Zuletzt bearbeitet von Jan S am 01.12.2016, 14:40, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Sanjaa

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2016, 11:37     Titel:
  Antworten mit Zitat      
csv Datei meine ich.

Ich Frage mich was ich in dem Code alles ändern muss? Ich verstehe nämlich leider die Hälfte vom Code nicht. Ich kann meine csv Datei hier nicht hochladen. Sie heißt werte.csv und ist im richtigen Pfad.

So habe ich es eingegeben(eigentlich habe ich nur diese Zeile geändert, sonst nichts:
filedata = importdata('werte.csv',';');
)

Code:
%% FFT der vertikalen Netzlast
clear all; close all; clc
 
% Datenquelle:
% http://www.50hertz-transmission.net/transmission/...
% files/sync/Netzkennzahlen/Netzlast/ArchivCSV/...
% Vertikale_Netzlast_2011.csv
filedata = importdata('werte.csv',';');
 
dt = 15; %min Abtastintervall
dh = 60/dt;%Stundenteiler
 
P = filedata.data;              %vertikale Netzlast in MW
t = 0:dt:(dt*length(P)-1); t=t';%Zeit in min
 
thour = t./(dh*dt);
tday  = thour./24;
tweek = tday./7;
 
plot(tday,P)
    grid on
    xlim([0 364])
    set(gca,'XTick',[0 31 59 90 120 151 181 212 242 273 303 334 364])
    set(gca,'XTickLabel',{'Jan', 'Feb','Mar','Apr','Mai','Jun','Jul',...
        'Aug','Sep','Okt','Nov','Dez','2012'})
    xlabel('Zeit [Monate]')
    ylabel('vertikale Netzlast [MW]')
    title([{'vertikale Netzlast 2011'};{'Datenquelle: http://www.50hertz-transmission.net/transmission/files/sync/Netzkennzahlen/Netzlast/ArchivCSV/Vertikale\_Netzlast\_2011.csv'}])
    set(gcf,'PaperPositionMode','Auto','Position',[100 100 1280 720])
    print('-dpng','-r300','vertikale-Netzlast.png')
 
Y=fft(P);   %Frequenzspektrum der vertikalen Mittellast berechnen
Y(1)=[];    %erster Wert ist Gleichanteil (Mittelwert)
 
n = length(P);
amplitude = abs(Y(1:floor(n/2))).^2;
nyquist = 1/2;
freq = (1:n/2)/(n/2)*nyquist*dh;
period=1./freq;
 
figure(2)
semilogx(period,amplitude,'LineWidth',2);
    grid on
    xlim([1 1000])
    xlabel('Periodendauer [h]')
    title([{'Frequenzspektrum der vertikalen Netzlast für das Jahr 2011'};{'Datenquelle: http://www.50hertz-transmission.net/transmission/files/sync/Netzkennzahlen/Netzlast/ArchivCSV/Vertikale\_Netzlast\_2011.csv'}])
    set(gcf,'PaperPositionMode','Auto','Position',[100 100 1280 720])
    set(gca,'XTick',[1:10,20:10:80,100:100:500,1000])
    text(12,2e14,'12h \rightarrow','HorizontalAlignment','right','FontSize',18)
    text(24,3e14,'24h \rightarrow','HorizontalAlignment','right','FontSize',18)
    text(84,0.5e14,'84h 15min \rightarrow','HorizontalAlignment','right','FontSize',18)
    text(168,2.5e14,'168h 30min \rightarrow','HorizontalAlignment','right','FontSize',18)
    print('-dpng','-r300','vertikale-Netzlast-FFT.png')]%


[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 01.12.2016, 11:53     Titel:
  Antworten mit Zitat      
Bitte nutze die Code-Umgebung (Siehe Button oben) - so ist dein code nicht lesbar, da smilies u.ä. eingefügt werden.

Wenn du den Code nicht verstehst, setze dir Breakpoints und stepe ihn Zeile für Zeile durch und schaue, was passiert.
(-> https://de.mathworks.com/help/matla.....earchHighlight=breakpoint )
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Sanjaa

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2016, 12:13     Titel:
  Antworten mit Zitat      
An dieser Zeile hängt es:

Code:
P = filedata.data;              %vertikale Netzlast in MW


Was soll data sein?


Code:
%% FFT der vertikalen Netzlast
clear all; close all; clc
 
% Datenquelle:
% http://www.50hertz-transmission.net/transmission/...
% files/sync/Netzkennzahlen/Netzlast/ArchivCSV/...
% Vertikale_Netzlast_2011.csv
filedata = importdata('werte.csv',';');
 
dt = 15; %min Abtastintervall
dh = 60/dt;%Stundenteiler
 
P = filedata.data;              %vertikale Netzlast in MW
t = 0:dt:(dt*length(P)-1); t=t';%Zeit in min
 
thour = t./(dh*dt);
tday  = thour./24;
tweek = tday./7;
 
plot(tday,P)
    grid on
    xlim([0 364])
    set(gca,'XTick',[0 31 59 90 120 151 181 212 242 273 303 334 364])
    set(gca,'XTickLabel',{'Jan', 'Feb','Mar','Apr','Mai','Jun','Jul',...
        'Aug','Sep','Okt','Nov','Dez','2012'})
    xlabel('Zeit [Monate]')
    ylabel('vertikale Netzlast [MW]')
    title([{'vertikale Netzlast 2011'};{'Datenquelle: http://www.50hertz-transmission.net/transmission/files/sync/Netzkennzahlen/Netzlast/ArchivCSV/Vertikale\_Netzlast\_2011.csv'}])
    set(gcf,'PaperPositionMode','Auto','Position',[100 100 1280 720])
    print('-dpng','-r300','vertikale-Netzlast.png')
 
Y=fft(P);   %Frequenzspektrum der vertikalen Mittellast berechnen
Y(1)=[];    %erster Wert ist Gleichanteil (Mittelwert)
 
n = length(P);
amplitude = abs(Y(1:floor(n/2))).^2;
nyquist = 1/2;
freq = (1:n/2)/(n/2)*nyquist*dh;
period=1./freq;
 
figure(2)
semilogx(period,amplitude,'LineWidth',2);
    grid on
    xlim([1 1000])
    xlabel('Periodendauer [h]')
    title([{'Frequenzspektrum der vertikalen Netzlast für das Jahr 2011'};{'Datenquelle: http://www.50hertz-transmission.net/transmission/files/sync/Netzkennzahlen/Netzlast/ArchivCSV/Vertikale\_Netzlast\_2011.csv'}])
    set(gcf,'PaperPositionMode','Auto','Position',[100 100 1280 720])
    set(gca,'XTick',[1:10,20:10:80,100:100:500,1000])
    text(12,2e14,'12h \rightarrow','HorizontalAlignment','right','FontSize',18)
    text(24,3e14,'24h \rightarrow','HorizontalAlignment','right','FontSize',18)
    text(84,0.5e14,'84h 15min \rightarrow','HorizontalAlignment','right','FontSize',18)
    text(168,2.5e14,'168h 30min \rightarrow','HorizontalAlignment','right','FontSize',18)
    print('-dpng','-r300','vertikale-Netzlast-FFT.png')
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 01.12.2016, 13:21     Titel:
  Antworten mit Zitat      
Gib doch bitte immer komplette Fehlermeldungen an.

Oben schreibst du, du hast nur eine Zeile geändert - gib doch bitte die Originalzeile mit an.

Ansonsten versuchst du derzeit auf ein Element in einem Struct zuzugreifen (filedata.data) welches vermutlich nicht da ist.
Versuche mal ".data" einfach zu entfernen.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Sanjaa

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2016, 13:56     Titel:
  Antworten mit Zitat      
Den originalen Code hab ich im ersten Beitrag verlinkt. Die veränderte Zeile(erste Zeile) ist nicht weiter wichtig.

Hab dass .data weggemacht. Es kommt folgender Fehler

Error using plot
Invalid second data argument

Error in Untitled (line 20)
plot(tday,P)
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 01.12.2016, 14:16     Titel:
  Antworten mit Zitat      
https://de.mathworks.com/help/matla.....earchHighlight=breakpoint

hast du dir das durchgelesen und deinen code mal debuggt?
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
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: 01.12.2016, 14:43     Titel:
  Antworten mit Zitat      
Hallo Sanjaa,

Zitat:
Ich Frage mich was ich in dem Code alles ändern muss?

Was möchtest Du denn ändern? Wie können wir Dir helfen?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sanjaa

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2016, 15:28     Titel:
  Antworten mit Zitat      
Ich möchte doch einfach nur die Amplitude anzeigen lassen von meiner csv Datei. Dafür muss ich den Code aus dem Netz anpassen. Was ich da alles verändern/ersetzen muss weiß ich ja selbst nicht.

Das Problem liegt an der csv Datei. Es sind 2 Bausteine im Workspace zusehen. Mit dem Oszilloskop werden die x und y Achse sozusagen gespeichert. Ich denke, dass ich das Problem weshalb eine Fehlermeldung kommt

Habe einen Screenshot eingefügt. VarName1 und VarName2 aus meiner csv Datei entstanden

screen.png
 Beschreibung:

Download
 Dateiname:  screen.png
 Dateigröße:  86.78 KB
 Heruntergeladen:  245 mal
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.12.2016, 02:11     Titel:
  Antworten mit Zitat      
Hallo Sanjaa,

Die Fehlermeldung bedeutet, dass "filedata" kein Struct ist. Mit dem Debugger findest Du heraus, was es statt dessen ist: Setze einen Breakpoint in die Zeile und schaue nach. Das kannst Du auf Deinem Rechner leicht überprüfen, während die Leser im Forum da nur herum raten können.

Zitat:
VarName1 und VarName2 aus meiner csv Datei entstanden

Ich kann in dem gezeigten Code nicht sehen, woher die beiden Variablen kommen. Auf jeden Fall "entstehen" nicht einfach spontan Variablen in Matlab.

Viel Erfolg, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 02.12.2016, 12:19     Titel:
  Antworten mit Zitat      
Jan, ich habe ihr bereits zwei mal vorgeschlagen, das Ganze zu debuggen...
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Sanjaa

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2016, 14:33     Titel:
  Antworten mit Zitat      
Hallo,

ich habe einen anderen besseren Code gefunden. Hab 2 Screenshot hochgeladen. Vom Code und vom Verlauf. Die Frequenz ist 1Khz. Der linke Zeitliche Verlauf ist korrekt, aber der rechte mit der x-Achse(Frequenz) zeigt mir die falsche Amplitude an.
Weiß jemand, woran es liegen könnte?

2.png
 Beschreibung:

Download
 Dateiname:  2.png
 Dateigröße:  18.34 KB
 Heruntergeladen:  226 mal
1.png
 Beschreibung:

Download
 Dateiname:  1.png
 Dateigröße:  54.25 KB
 Heruntergeladen:  270 mal
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2, 3, 4, 5  Weiter

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.