PRZETWARZANIE SYGNAŁÓW
Laboratorium #3

Import pakietów Pythonowych
zapisywanie/wczytywanie plików: tekstowych, binarnych, dźwiękowychoraz plików programu Matlab

M. Kociński, P. Strumiłło, A. Borowska-Terka

Zakład Elektroniki Medycznej
Instytut Elektroniki


In [1]:
import funkcje_do_lab3 as f3
f3.hide()
Out[1]:
W celu przejrzystości instrukcji, kod Ipython notebook jest domyślnie ukryty. Aby zobaczyć/ukryć kod, kliknij tutaj.

CEL:

Zapoznanie się z importowaniem pakietów Pythona oraz wczytywaniem i zapisywaniem plików tekstowych, binarnych, dźwiękowych (wave) oraz plików binarnych programu Matlab.

ZADANIA:
1.W tym ćwiczeniu poznamy cztery sposoby importowania pakietów Pythona w celu użycia ich we własnych skryptach. Utwórz i uruchom następujące skrypty w utworzonym folderze D:/Biomed2014_pl: sinus1.py, sinus2.py, sinus3.py, sinus4.py:

In [2]:
f3.fig(f3.s1)
Out[2]:
In [3]:
f3.fig(f3.s4)
Out[3]:

OCZEKIWANE WYNIKI:

In [4]:
%pylab inline
print ''
print 'sinus1:'
f3.sinus1()
Populating the interactive namespace from numpy and matplotlib

sinus1:

In [5]:
print ''
print 'sinus2:'
f3.sinus2()

sinus2:

In [6]:
print ''
print 'sinus3:'
f3.sinus3()

sinus3:

sinus4 (Import - sposób niezalecany!):

In [7]:
from pylab import *
from numpy import *

x=arange(100)
y=sin(x*pi/50)

plot(x,y)
show()

2.Wczytywanie i zapisywanie plików w formacie ASCII (plików tekstowych)

In [8]:
f3.fig(f3.r)
Out[8]:

Zwróć uwagę, że zapis oraz wczytywanie plików odbywa się w bieżącym katalogu.
Dla wczytania/zapisania plików z innego katalogu należy podać pełną cieżkę do pliku, np.:
xx, yy1, yy2 = np.loadtxt('d:/Biomed2014_pl/my_sin_cos.txt')

In [9]:
import numpy as np
x = np.arange(100)

y1 = np.sin(x*np.pi/50)
y2 = np.cos(x*np.pi/50)

np.savetxt('my_sin_cos.txt', (x,y1,y2),fmt='%.2f')
In [10]:
import os
files = os.listdir('.')   #wszystkie pliki w bieżącym katalogu
print 'Czy plik my_sin_cos.txt został nagrany?'
'my_sin_cos.txt' in files #sprawdzenie, czy plik 'my_sin_cos.txt' został nagrany?
Czy plik my_sin_cos.txt został nagrany?

Out[10]:
True
In [11]:
import numpy as np

# wczytanie danych z pliku:
xx, yy1, yy2 = np.loadtxt('my_sin_cos.txt')

# wyrysuj wczytane dane 
# możemy importować poszczegulne moduły(moduły lub funkcje z modułów) także w środku skryptu
from pylab import plot, show, title, figure
figure(1)
plot(xx,yy1,xx,yy2)
title('Loaded data - case 1')
show()

3.Wczytywanie i zapisywanie plików binarnych Pythona .npy and .npyz

In [12]:
f3.fig('binary_files.png')
Out[12]:
In [13]:
import numpy as np

b = np.arange(20.)
np.save('b.npy', b)
print 'Zmienna b:'
print b

print 'Zawartoć pliku b2.npy:'
b2 = np.load('b.npy')
print b2
Zmienna b:
[  0.   1.   2.   3.   4.   5.   6.   7.   8.   9.  10.  11.  12.  13.  14.
  15.  16.  17.  18.  19.]
Zawartoć pliku b2.npy:
[  0.   1.   2.   3.   4.   5.   6.   7.   8.   9.  10.  11.  12.  13.  14.
  15.  16.  17.  18.  19.]

In [14]:
cc = np.arange(5)
dd = np.arange(4,15,2.5)
ee = np.arange(100,110,2)
print 'cc:'
print cc
print 'dd:'
print dd
print 'ee:'
print ee
print ''
print 5*'*'
# nazwy: a,b,c będą nazwami kluczy tablicy
np.savez('multi_array.npz',a=cc, b=dd, c=ee)

#wczytywanie danych z pliku
multi = np.load('multi_array.npz')

print 'Lista tablic zapisana w tablicy <multi>:'
print multi.files
print ''

# to select and print individual arrays type in:
print 'Tablica a:'
print multi['a']
print ''

# przypisanie do nowej tablicy
zz = multi['b']
print 'Tablica zz:'
print zz
cc:
[0 1 2 3 4]
dd:
[  4.    6.5   9.   11.5  14. ]
ee:
[100 102 104 106 108]

*****
Lista tablic zapisana w tablicy <multi>:
['a', 'c', 'b']

Tablica a:
[0 1 2 3 4]

Tablica zz:
[  4.    6.5   9.   11.5  14. ]

4.Wczytywanie i zapisywanie plików programu Matlab *.mat

In [15]:
f3.fig('matlab_files.png')
Out[15]:
In [16]:
from scipy.io import loadmat, savemat
from numpy import reshape
from pylab import plot

ecg=loadmat('ecg_all.mat')['ecg_s']
ecg=reshape(ecg,len(ecg))
plot(ecg)
show() 

#zapisywanie danych w pliku .mat
savemat('ecg_py.mat',{'ecg_new':ecg})

5.Wczytywanie, zapisywanie oraz odtwarzanie plików dźwiękowych *.wav

In [17]:
f3.fig('play_audio.png')
Out[17]:
In [18]:
import winsound
winsound.PlaySound("scale.wav", winsound.SND_ALIAS)
In [19]:
f3.fig('load_wave.png')
Out[19]:

OCZEKIWANE WYNIKI:

In [20]:
from scipy.io.wavfile import read as read_wav

sampling_rate, data = read_wav('scale.wav')
print sampling_rate
print data
11025
[     0   2970   5876 ..., -19999 -19250 -16986]

In [21]:
from scipy.io.wavfile import write as write_wav

write_wav('inv_scale.wav',sampling_rate,data[::-1])

winsound.PlaySound("inv_scale.wav", winsound.SND_ALIAS)

6.Możesz pracować interaktywnie z dźwiękiem (sygnałami).
Tym razem uruchom linię komend systemu operacyjnego. Zmień bieżący katalog na D:/Biomed2014_pl.
Wpisz polecenie >>ipython notebook
Wybierając przycisk [New notebook] utwórz nowy plik audio.ipynb
W pierwszej komórce wpisz następującą sekwencję poleceń:

from IPython.display import Audio
import numpy as np
f1 = 320
f2 = 345
rate = 8000.0
L=3

times = np.linspace(0, L, rateL)
signal = np.cos(2
np.pif1times) + np.cos(2np.pif2*times)

Audio(data=signal, rate=rate)


Uruchom skrypt wybierając przycisk [Run Cell]. Zmień wartości zmiennych f1, f2, rate i uruchom skrypt ponownie.

OCZEKIWANE WYNIKI:

In [22]:
from IPython.display import Audio
import numpy as np
f1 = 320
f2 = 345
rate = 8000.0
L=3

times = np.linspace(0, L, rate*L)
signal = np.cos(2*np.pi*f1*times) + np.cos(2*np.pi*f2*times)

Audio(data=signal, rate=rate)
Out[22]:
In [22]: