Forum: Digitale Signalverarbeitung / DSP / Machine Learning Excel-Datei in Matlab


von Dieter (Gast)


Lesenswert?

Hallo,

ich habe ein Problem.
Ich habe Daten in Excel kreiert. Nun will ich die Datei auslesen und das 
Ergebnis plotten.

Ich habe nun folgenden Code in Matlab geschrieben. Allerdings gibt 
Matlab eine Fehlermeldung, die ich nicht verstehe.
Vielleicht kann mir da einer weiterhelfen:

Mein Code:

[nums, txt] = xlsread('MeineExcelDatei.xls') %Einlesen der Datei

varNames = char(txt(1,:)); %Bestimmen der 
Spaltenüberschriften=Variablennamen

for col=1:size(varNames,1),
  if isnan(nums(1,col)) %erstes Datenwort nicht numerisch?
    assignin('base',varNames(col,:),char(txt(2:end,col))); %Zuweisen der 
Strings in der Spalte
  else %falls doch numerisch?
    assignin('base',varNames(col,:),nums(:,col)); %Zuweisen der Zahlen 
in der Spalte
  end;
end;

Excel-Datei-Auszug:
Amplitude  Fkt  Zeit  Frequenz
1           0     0      50
1           -0,79 1      50
1           -1,56 2      50

es ist eine Sinus-Funktion.

Er gibt folgenden Fehler aus:
??? Error using ==> assignin
Invalid variable name "Fkt    " in ASSIGNIN.

Error in ==> excel at 15
           assignin('base',varNames(col,:),nums(:,col));

von gast (Gast)


Lesenswert?

ich improtiere das immer mit uiimport. in der gui kann man dann auch 
angeben, dass ein Komma als Dezimaltrennzeichen verwendet wird. 
Ansonsten Exel auf jeden fall aut Punkt umstellen

von Dieter (Gast)


Lesenswert?

In Excel habe ich die Komma durch Punkte ersetzt. Allerdings ist der 
Fehler nicht beseitigt worden :(
Hat jemand einen anderen Tip?

Danke
Dieter

von Dieter (Gast)


Lesenswert?

Bzw. wie kann ich dann die Daten plotten, wenn ich die mit uiimport 
importiere???

von gast (Gast)


Lesenswert?

dann hast du eine struktur mit einer matrix der datenwerte und einen 
vektor mit den spaltenüberschriften.

plot(struktur.data(:,1)struktur.data(:,2)) oder so ähnlich.

die richige spalte kannst du mit strcmp finden.

z.B.

pommes=find(  strcmp(struktur.text,'Pommes')  )

vielleicht muss man das auch in einer for schleife machen.

von Dieter (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe nun ein anderes Problem.
Ich habe mir wieder eine Excel-Datei erstellt. Diesmal mit gemessenen 
Werten, die ich in Excel importiert habe. Diese Daten will ich nun mit 
Matlab auswerten.
Excel-Datei-Name: matlabaufl  M-File-Name: Auflösung
Matlab gibt nun folgenden Fehler.

??? Auflösung
        |
Error: The input character is not valid in MATLAB statements or 
expressions.

Kann mir jemand sagen, was der Fehler bedeuted?
Wie ich den beheben kann.
Im Anhang findet ihr die Excel Tabelle.

Gruß Dieter

von Dieter (Gast)


Lesenswert?

Und so sieht mein M-File aus. ;)

clc
clear all

[nums, txt] = xlsread('matlabaufl.xls') %Einlesen der Datei

varNames = char(txt(1,:)); %Bestimmen der 
Spaltenüberschriften=Variablennamen

for col=1:size(varNames,1)
  if isnan(nums(1,col)) %erstes Datenwort nicht numerisch?
    assignin('base',varNames(col,:),char(txt(2:end,col))); %Zuweisen der 
Strings in der Spalte
  %else %falls doch numerisch?
    %assignin('base',varNames(col,:),nums(:,col)); %Zuweisen der Zahlen 
in der Spalte
  end;
end;

a = nums(1,4)
x = nums(:,2);
t = nums(:,1);
b = nums(1,5)

l = length(x);
lt = length(t);
if (b ~= 1000)   % ungleich
    abtast = 19200;
else abtast = 19200;
end

z = fft(x,abtast);
Leistungsspektrum = abs(z)/abtast; %Leistungsdichtespektrum
xAchse = 1000.*(0:abtast-1)./abtast;
achse = floor(xAchse.*(b/1000));

figure(1)
plot(t,x)
ylim([-a-1,a+1])
title('Sinus')
xlabel('Zeit [s]')
ylabel('Amplitude')
grid on;

figure(2)
stem(achse,Leistungsspektrum(1:abtast));
ylim([0,a+1])
title('Spektrum')
xlabel('Frequenz [Hz]')
ylabel('Amplitude')
grid on;

von Dieter (Gast)


Lesenswert?

Ok, ich habe den Fehler gefunden. Da stimmte was mit dem M-File nicht.

von Dieter (Gast)


Lesenswert?

Nun aber doch noch ein Fehler bzw. eine Frage.

Ich kenne die Formel für die Auflösung, wenn ein Rechteckfenster 
verwendet wird. Sie lautet: Auflösung = Abtastfrequenz / Anzahl der 
Abtastwerte

Ich habe nun das oben genannte Programm und möchte gerne wissen, welche 
Auflösung mir Matlab gibt.
Jetzt habe ich zwei Versuche durchgeführt. Einmal eine Periodendauer von 
1s und einmal von 5s verwendet. Die Auflösung ist aber konstant bei 
0,2083Hz

Das  verstehe ich noch nicht ganz.
Kann mir da jemand helfen?

Bzw mir vielleicht sagen, wie ich ein Rechteckfenster über mein Signal 
legen kann.
Habe unter help gefunden: rectwin
Weiß aber jetzt nicht, wie ich das anwenden muss.

Danke

von Dieter (Gast)


Lesenswert?

Sorry, nochmal was vergessen.
Die 0,2083 ist die Schrittweite des Zeitsignals am Eingangssignal.
Aber wie kann ich denn die Aulösung bestimmen?
Wenn ich mit 4800 abtaste und 1s bzw 5s messe?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.