www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Excel-Datei in Matlab


Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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));

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter (Gast)
Datum:

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

Danke
Dieter

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bzw. wie kann ich dann die Daten plotten, wenn ich die mit uiimport 
importiere???

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dieter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Dieter (Gast)
Datum:

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

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.