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

Gleiche Datei--> dlmread funktioniert, uigetfile nicht

 

Skipper
Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.01.11
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 25.01.2011, 23:56     Titel: Gleiche Datei--> dlmread funktioniert, uigetfile nicht
  Antworten mit Zitat      
Hallo,

ich habe einen Code, in dem ich die fft ausführen möchte.
Am liebsten wäre es mir, der Nutzer wählt die txt-Dateien per Multiselect selbst aus, von der er eine fft haben möchte, daher habe ich den Befehl
Code:
benutzt.

Code:
function [FrequenzLL1x, AmplitudeLL1x, Phase, Leistung] = func_fft_LL(x,fs)

%Eingangsgrößen
%x: Signal, Spaltenvektor
%fs: AbtastFrequenz_LL1_x

%Ausgangsgrößen (einseitig)
%y = [Freq Amplitude_LL1_x Phase Leistung]

M = uigetfile({'*.txt'},'MultiSelect','off');
%M = dlmread('Ruhig_FahrwerkReifen_VerstrebungUnten_Nr2_2011_01_05_1123.txt', '\t');
a_LL1_x = M(:,2);

Laenge_LL1_x = length(a_LL1_x); %Window length

%window function
window = hamming(Laenge_LL1_x);
a_LL1_x_fft = a_LL1_x.*window;

NFFT_LL1_x = 2^nextpow2(Laenge_LL1_x); %Transform length, Next power of 2 from length of x

fs=1000;
Xf = fft(a_LL1_x_fft,NFFT_LL1_x); % DFT of x
freq = (0:NFFT_LL1_x-1)*(fs/NFFT_LL1_x);

%Amplitude_LL1_x
AmplitudeLL1x = abs(Xf)/Laenge_LL1_x;
%Leistung
Leistung = Xf.*conj(Xf)/NFFT_LL1_x;
%Phase
Phase = unwrap(angle(Xf));


%--------------------------------------------------------------------------
% Plot the first half of the periodogram, up to the Nyquist frequency
% Plot single-sided Amplitude_LL1_x spectrum (Amplitude_LL1_x vs. Frequency)
%--------------------------------------------------------------------------
FrequenzLL1x = freq(1:floor(NFFT_LL1_x/2))';
AmplitudeLL1x = 2*AmplitudeLL1x(1:floor(NFFT_LL1_x/2));
AmplitudeLL1x(1) = AmplitudeLL1x(1)/2;
Phase = Phase(1:floor(NFFT_LL1_x/2));
Leistung = 2*Leistung(1:floor(NFFT_LL1_x/2));
Leistung(1)=Leistung(1)/2;


Das ist der Code, mit uigetfile bekomme ich den Fehler:
Code:
??? Attempted to access AmplitudeLL1x(1); index
out of bounds because numel(AmplitudeLL1x)=0.

Error in ==> func_fft_LL at 41
AmplitudeLL1x(1) = AmplitudeLL1x(1)/2;


Mit dlmread und der GLEICHEN Datei läuft es perfekt durch. Weswegen ich mir auch nicht erklären kann, warum er bei uigetfile einen leeren Array vermutet...


Ein weiteres Problem ist, dass ich mehrere Plots haben möchte und diese über
Code:
angegeben habe, leider kommt aber immer nur die erste.

Für Hilfe bin ich immer dankbar Very Happy
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: 26.01.2011, 04:36     Titel: Re: Gleiche Datei--> dlmread funktioniert, uigetfile nich
  Antworten mit Zitat      
Hallo Skipper,

Dann lies Dir doch mal die Hilfe-Texte zu UIGETFILE durch.

Zitat:
Code:
M = uigetfile({'*.txt'},'MultiSelect','off');
a_LL1_x = M(:,2);

M enthält nur den Filenamen, und "M(:, 2)" is damit der zweite Buchstabe.

Zitat:
Ein weiteres Problem ist, dass ich mehrere Plots haben möchte und diese über
Code:
angegeben habe, leider kommt aber immer nur die erste.

Immer nur die erste was? Und wann kommt sie? Was ist "n"?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.01.11
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 26.01.2011, 14:43     Titel:
  Antworten mit Zitat      
Hast du einen Lösungsvorschlag, wie ich die gewünschte Funktion umsetzten kann, also das auswählen einer Datei, die dann mit ihren Daten komplett eingelesen wird und danach Spalten auswählen?
Das n sollte für die "Nummern" der figures stehen, also n=1..9, das Problem habe ich aber soeben gelöst, ich habe die function immer neu definiert in einem M-File Laughing
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.01.2011, 15:02     Titel:
  Antworten mit Zitat      
Hallo,

hast du denn die Doku dazu mal gelesen? Dann sollte nämlich vollkommen klar sein, dass uigetfile dir den Dateinamen und nicht den Inhalt der Datei liefert. Einlesen musst du sie dann schon noch selber. Du willst wohl das:

Code:
[filename, pathname] =uigetfile({'*.txt'},'MultiSelect','off');
M = dlmread(fullfile(pathname, filename), '\t');
a_LL1_x = M(:,2);


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Skipper
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.01.11
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 27.01.2011, 13:06     Titel:
  Antworten mit Zitat      
Das ist nicht ganz das, was ich möchte, kommt aber schon sehr nahe dran. Ich möchte mehrere Dateien einlesen können und nicht nur eine,das wäre optimal. Hier liegt mein eigentliches Problem...
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 27.01.2011, 13:33     Titel:
  Antworten mit Zitat      
Hallo,

-->Forumsuche<-- verwenden!!!

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Skipper
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.01.11
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 27.01.2011, 13:36     Titel:
  Antworten mit Zitat      
Danke für den netten Tipp, da wäre ich nie drauf gekommen, nachdem ich schon Tage an diesem Problem bastle... Evil or Very Mad
Ich habe nämlich nachgeschaut, aber es gibt nicht das, was ich oben beschrieben habe!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 27.01.2011, 13:40     Titel:
  Antworten mit Zitat      
Hallo,

dann schau doch z.B. einmal hier: http://www.gomatlab.de/mehrere-exce.....t,daten+einlesen+sco.html

Ich habe hier beschrieben wie man alle Exelfiles aus einem Ordner einliest. Da muesstest du noch 1-2 Codezeilen aendern um es auf dein Problem umzumuenzen.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.01.2011, 13:40     Titel:
  Antworten mit Zitat      
Hallo,

sollen diese Dateien auf einmal ausgewählt werden?
Dann 'multiselect' auf 'on' und eine for-Schleife über die Dateien.
Wenn sie nacheinander ausgewählt werden sollen, dann das uigetfile auch noch in die Schleife rein.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Skipper
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.01.11
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 27.01.2011, 13:48     Titel:
  Antworten mit Zitat      
Die Idee ist gut, aber was mache ich bei der for-Schleife, wenn ich nie weiß, wie viele Dateien es sind, von 2-30 gibts da nämlcih alle Varianten und die Dateien leigen nicht schön in einem Extraordner. Deswegen kann ich auch nicht über die Zahl der Elemente gehen. Kann man die Anzahl der vom Nutzer ausgewählten angeben lassen und das dann als k=1..AnzahlAusgewählterDateien machen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.01.2011, 13:53     Titel:
  Antworten mit Zitat      
Hallo,

ich sehe das jetzt als Hinweis, dass du die erste Variante willst.
Antwort: Natürlich kannst du. Du brauchst ja nur im Nachhinein abfragen, wieviele Dateien ausgewählt wurden:

Code:
[filenames, pathname] =uigetfile({'*.txt'},'MultiSelect','on');
anzahl = length(filenames);
M = cell(1, anzahl);
for I = 1:anzahl
M{I} = dlmread(fullfile(pathname, filename{I}), '\t');
a_LL1_x{I} = M{I}(:,2);


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 27.01.2011, 13:53     Titel:
  Antworten mit Zitat      
Hallo,

falls du es mit der Multiselect-Option machen moechtest, ginge es so:
Code:

[FileName,PathName,FilterIndex] = uigetfile(pwd,'MultiSelect','on');
nrfiles = size(FileName,2); % Anzahl der Files fuer for Schleife
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Skipper
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.01.11
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 27.01.2011, 14:10     Titel:
  Antworten mit Zitat      
Okay, danke, das funktioniert super, jetzt nur noch eine letzte Frage, ich möchte die Spalten der ausgewählten Dateien dann in einem Plot vergleichen lassen. Ich habe die Schleife jetzt auch über die Plots gezogen, aber im Moment überschreibt er mir den Plot von Datei1 dann mit dem Plot von Datei2...
wie kann ich sagen, dass Datei1 in einer anderen Farbe geplottet wird als DateiN und alle ins gleiche Diagramm sollen?
Vielleicht mit dem hold on-Befehl?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.01.2011, 14:19     Titel:
  Antworten mit Zitat      
Hallo,

da hattest du ja schon die richtige Idee, musst es nur noch umsetzen Smile
Und wenn du automatisch verschiedene Farben auswählen lassen möchtest, kannst du
Code:

verwenden.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Skipper
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.01.11
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 27.01.2011, 14:32     Titel:
  Antworten mit Zitat      
DANKE DANKE DANKE

PROBLEM ENDLICH GELÖST!!!!!


Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  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 - 2025 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.