Matlabs fread fopen in Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
liverpool
User
Beiträge: 3
Registriert: Freitag 17. Mai 2013, 08:15

Hallo Zusammen,
Ich beschäftige mich mit der Übersetzung eines MAtlabcodes auf Python.
Mit Python habe ich gar keine Erfahrung, aber die Grammatik kann man schon nachvollziehen. Das Einzige bei der Übersetzen, was mir unklar ist, sind die ersten 2 Zeilen.
Im TestSignal habe ich ungf. 15 Mio. Abtastwerte, die ich dann in signal packe. Dannach muss ich auf die einzelne Elemente des signals zugeifen.
Ich wäre sehr dankbar, wenn mir jedaman Tipps gibt, wie ich fopen und fread in Pathon benutzen kann und wie sieht überhapt mit dem Dateflow aus;
diese 15 Mio. Abtastwerte müssen doch irgendwo zwischengespeichert werden.

1: rx = fopen('TestSignal','r');
2: rx = fread(rx,'float=>double');
3: signal = sqrt(rx(1001:2:end).^2 + rx(1002:2:end).^2);

MFG.
BlackJack

@liverpool: Du müsstest Dich neben den Python-Grundlagen mit dem `numpy`-Paket auseinander setzen. Das hat auch ein Tutorial bei der Dokumentation.

Bei `numpy` suchst Du wahrscheinlich die `fromfile()`-Funktion und die `astype()`-Methode auf `numpy`-Arrays, wenn ich die Matlab-Dokumentation von `fread()` richtig verstanden haben. Also etwas in der Art (ungetestet):

Code: Alles auswählen

import numpy as np


def main():
    rx = np.fromfile('TestSignal', np.float32).astype(np.float64)
    signal = np.sqrt(rx[1001::2]**2 + rx[1002::2]**2)


if __name__ == '__main__':
    main()
Bei der `signal`-Zeile habe ich jetzt geraten was der Matlab-Ausdruck vielleicht bedeuten kann/soll. Da fehlt mir das Matlab-Wissen.
liverpool
User
Beiträge: 3
Registriert: Freitag 17. Mai 2013, 08:15

Danke vielmals. Das hat mehr Sinn, als das, was ich vor hatte.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Weil Matlab ab 1 indiziert, numpy aber ab 0, müssen die Indizes um eins verschoben werden.

Code: Alles auswählen

import numpy as np

def main():
    rx = np.fromfile('TestSignal', np.float32).astype(np.float64)
    signal = np.sqrt((rx.reshape(-1,2)[500:]**2).sum(1))

if __name__ == '__main__':
    main()
liverpool
User
Beiträge: 3
Registriert: Freitag 17. Mai 2013, 08:15

Dran habe ich nicht gedacht. Danke für den Tipp)
Antworten