Matlab code to Python

  • #1
Hello,
1. Homework Statement

I find diffuculties to transform fscanf and to apply the discrete wavelet transform order 2 from matla to python.

Homework Equations


This is the matlab code:
Matlab:
D_P=fopen('distance_profil.txt','r');
i=0;
while(feof(D_P)==0)% test for end of file
    i=i+1;
    sign=fscanf(D_P,'%f , ');
    classe=fgetl(D_P);
      %wavelet transform
       [caH(i,:),cdH(i,:)] = dwt(sign,'db2');     
% Segmentation 
   loc=[];
        [pks,locs] = findpeaks(abs(cdH(i,:)),'threshold',3);
        loc=[loc,locs];
        mod=abs(cdH(i,:));
   figure
   titre = ['distance profil : ' classe];
    
        subplot(2,1,1); plot(sign); title(titre);
        hold on, plot(2*locs,sign(2*locs),'dr')
        subplot(2,1,2); plot(abs(cdH(i,:))); title('Module  Details coef. for db2');
        hold on, plot(locs,mod(locs),'dr') 
end

The Attempt at a Solution



Python:
import pywt
import numpy as np
from scipy.signal import find_peaks_cwt
import matplotlib.pyplot as plt

D_P= open ("distance_profil.txt","r")
i=0
while True:
    line = D_P.readline().strip()
    if line == '':

        def ReadFile():
            sign = []
            with open('textfiledata.txt', 'rt') as myFile:
                for line in myFile:
                    sign.append(map(int, line.split(',')))
            return sign

        classe = D_P.readline().rstrip()
        cA= np.array(sign)
        cD= np.array(sign)
    
        i+=1

        array[cA(i,:), cD(i,:)] = pywt.dwt([sign, 'db2'])

        loc=[]
        [pks,locs] = find_peaks_cwt(abs(cdH(i,)),'threshold',3);
        loc=[loc,locs];
        mod=abs(cdH(i,:));
      
        plt.figure()
        plt.subplot(2,2,1)
        plt.plot(sign,2*locs,sign(2*locs),'ro')
        plt.title('distance profil : ' , classe);
      
        plt.subplot(2,2,2)
        plt.plot(abs(cdH(i,:)),locs,mod(locs),'ro')
        plt.title("Module des Details coef. for db2")
        plt.show()
        break
 
Last edited by a moderator:

Answers and Replies

  • #2
12,095
5,776
Fscanf simply reads in a float value and a comma and then the loop repeats the action

You could develop a similar function that reads a float at a time and when the line is exhausted read in a new line and when the file is exhausted exit the function with an error code.

Here's some that does something similar:

http://sciprogtips.blogspot.com/2010/01/fscanf-with-python.html
 

Related Threads on Matlab code to Python

  • Last Post
Replies
14
Views
4K
Replies
1
Views
1K
  • Last Post
Replies
3
Views
2K
  • Last Post
Replies
0
Views
5K
  • Last Post
Replies
0
Views
4K
  • Last Post
Replies
1
Views
10K
Replies
3
Views
1K
Replies
1
Views
2K
Replies
1
Views
4K
  • Last Post
Replies
1
Views
7K
Top