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

Ein paar Fragen

 

ABel
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 23.04.20
Wohnort: NRW
Version: ---
     Beitrag Verfasst am: 30.08.2023, 15:01     Titel: Ein paar Fragen
  Antworten mit Zitat      
Hallo,

ich hab schon mit anderen Mathematikprogrammen gearbeitet und bin nun bei der Arbeit mit Octave über einige Punkte gestolpert.

1. Definition einer Variablen als int
>> i=int32(123)
>> Fs=192000
>> xx=(i-1)/Fs
xx = 0
weil nämlich
>> isinteger(xx)
ans = 1
Als Abhilfe habe ich nur die Verwendung von double() gefunden.
>> xx=double((i-1))/Fs
xx = 6.3542e-04
Gibt es andere, elegantere oder einfachere Methoden der Problemlösung?

2. Definition einer Variablen als Matrix
Ich benötige auch Matrizen, als Ergebnis von Berechnungen ergeben sich eigentlich Vektoren. Octave macht daraus aber Matrizen, (n,1) oder (1,n). Oft ist mir nicht klar warum bei der einen Rechnung eine (n,1)-Matrix und bei einer anderen eine (1,n)-Matrix herauskommt.
Bei weiteren Berechnungen sehe ich mich oft genötigt diese Matrizen mit (:,1) oder (1,: ) anzusprechen. Das erhöht nicht gerade die Lesbarkeit des Skriptes und ist Fehlerträchtig.
Viel schöner erscheint mir eine Lösung, die aus diesen Matrizen Vektoren macht.
Leider konnte ich mir bisher eine solche Lösung nicht ergooglen. Gibt es dazu eine Lösung?

3. Ermittlung der Größe einer Matrix
Dazu brauche ich bisher immer einen 2-Zeiler
Dummy=size(FFT);
Fmax=Dummy(1);
Für eine (n,1)-Matrix, oder eben
Fmax=Dummy(2);
Für eine (1,n)-Matrix.
Geht das auch in einer Zeile?

4. Ableitung mit Hilfe von diff()
Das Ergebnis von diff() erscheint mir doch sehr unbefriedigend. Soweit ich das sehe ermittelt diff() seine Ableitung nur über 2 Stützstellen.
Immerhin gibt es Differenzenquotient die über mehrere Stützstellen ermittelt werden. Gibt es für Octave Bibliotheken oder Toolboxen, die hier besseres bieten?
Wenn ich es schaffe, hänge ich hier Mal meine Funktion diffq() an.

5. fft()
Die Beschreibung der Funktion in der Dokumentation empfinde ich als unzulänglich?!
Was bekomme ich den von fft() in der ersten Zeile das Outputs? Für einen Frequenzgang darf ich erst in der 2ten Zeile anfangen. Meine Frequenzgangberechnung sieht nun so aus:
FFT=fft(Signal);
Dummy=size(FFT);
Fmax=Dummy(1);
Fend=(Fmax-1)/2;
FGang=sqrt(2)*FFT(2:Fend+1)/(Fmax-1);
Freq = Fs*(1:Fend)/(Fmax-1);
(Fs ist die Samplerate des Signals)
Geht das eleganter und besser lesbar?

Gruß Andreas

diffq.m
 Beschreibung:

Download
 Dateiname:  diffq.m
 Dateigröße:  806 Bytes
 Heruntergeladen:  86 mal
Private Nachricht senden Benutzer-Profile anzeigen


Busmaster
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 05.08.09
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 01.09.2023, 12:13     Titel:
  Antworten mit Zitat      
Hallo Andreas

1. Definition einer Variablen als int
>> i=int32(123)
>> Fs=192000
Ich habe es immer als großen Vorteil von Matlab/Octave empfunden, dass ich die Variablen nicht deklarieren muss.
Fs ist ja auch integer, wird aber bei dieser Eingabe als double behandelt.

2. Definition einer Variablen als Matrix
Wenn das Ergebnis einer Berechnung eine Matrix ist wird es schon einen Grund geben.
Umwandlung von Matrix in Vektor:
Es ist für weitere Berechnungen oft nicht egal, ob es ein Zeilen- oder Spaltenvektor ist.
Code:
M = rand(5,6);
V1 = M(:)

V2 = M(:)'
 


3. Ermittlung der Größe einer Matrix
Code:
[nrow, ncol] = size(M)


Für Vektoren auch
Code:



4. Ableitung mit Hilfe von diff()
Bei Messdaten gibt es Probleme mit dem Rauschen.
Eine Möglichkeit ist die vorherige Glättung z.B. durch Savitzky-Golay-Filter über mehrere Datenpunkte:
https://octave.sourceforge.io/signal/function/sgolayfilt.html
https://octave.sourceforge.io/signal/function/sgolay.html

Das SG-Filter kann auch modifiziert werden für die direkte Bildung der Ableitung über mehrere verrauschte Datenpunkte.


5. FFT
Die Matlab-Beispiele sollten auch unter Octave laufen.
https://docs.octave.org/v4.2.1/Signal-Processing.html

https://de.mathworks.com/discovery/fft.html

https://de.mathworks.com/help/matlab/math/fourier-transforms.html

https://de.mathworks.com/help/matlab/ref/fft.html?w.m

Gruss
Busmaster
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.