PRZETWARZANIE SYGNAŁÓW
Laboratorium #4

Wykreślanie sygnałów w środowisku Python
(skala czasu i modulacja amplitudy)

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

Zakład Elektroniki Medycznej
Instytut Elektroniki


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

CEL:

Wykreślanie sygnałów w środowisku Python.

ZADANIA:
1. Wykreślanie próbkowanych sygnałów sinusoidalnych w odpowiedniej skali czasowej:
a. Napisz skrypt definiujący N=2000 próbek sygnału harmonicznego x(t)=Asin(2pifx*t), gdzie A=10, fx=10Hz, o częstotliwości próbkowania fs=1000Hz. Wykreśl ten sygnał za pomocą polecenia plot (patrz: plot?).
b. Na jednym wykresie, wyświetl sumę trzech sinusoid o amplitudzie równej A=10 i następujących częstotliwościach: fx1=10Hz, fx2=20Hz, fx3=25Hz oraz o częstotliwości próbkowania fs=1000Hz. Wyświetl pierwszych N=2000 próbek sumy zdefiniowanych sinusoid.

  1. Napisz skrypt definiujący N=2000 próbek sygnału harmonicznego x(t)=A * sin(2 * pi * fx * t), gdzie A=10, fx=10Hz, o częstotliwości próbkowania fs=1000Hz. Wykreśl ten sygnał za pomocą polecenia plot (patrz: plot?)
  2. Na jednym wykresie, wyświetl sumę trzech sinusoid o amplitudzie równej A=10 i następujących częstotliwościach: fx1=10Hz, fx2=20Hz, fx3=25Hz oraz o częstotliwości próbkowania fs=1000Hz. Wyświetl pierwszych N=2000 próbek sumy powyżej zdefiniowanych sinusoid.

OCZEKIWANE WYNIKI:

In [2]:
%pylab inline
pylab.rcParams['figure.figsize'] = (14.0, 7.0)

print 'Zadanie a.'
f4.task_1a()
print 'Zadanie b.'
f4.task_1b()
Populating the interactive namespace from numpy and matplotlib
Zadanie a.

Zadanie b.

2. Wczytaj ecg_mit.mat sygnał dostępny w paczce Pliki sygnałów ze strony przedmiotu Przetwarzanie sygnałów.
Wykreśl pierwszych N=2000 próbek sygnału EKG w odpowiedniej skali czasu (w sekundach) i amplitudy (w mV), biorąc pod uwagę, że częstotliwość próbkowania wynosi fs=360 Hz oraz fakt, że do próbkowania i kodowania sygnalu ECG zarejestrowanego w zakresie napięcia -5mV i +5mV zastosowano 11-bitowy przetwornik analogowo-cyfrowy (ang. Analog to Digital Converter - A/D).

OCZEKIWANE WYNIKI:

In [3]:
f4.task_2()

3. Napisz funkcję quantize_ecg(vec,b), która symuluje przetwornik A/D konwertujący sygnał wejściowy do mniejszej liczby bitów. Parametr vec jest wektorem zawierającycm źródłowy 11-bitowy sygnał EKG, natomiast b jest parametrem wskazującym o ile bitów zmniejsza się liczba bitów kodujących próbkę sygnału ECG, np. jeśli b=2 funkcja powinna utworzyć sygnał cyfrowy EKG, którego próbki są kodowane 9 bitami (np. 11 - b = 9).

OCZEKIWANE WYNIKI:

In [4]:
from scipy.io import loadmat
x = loadmat('ecg_mit.mat')['ecg_mit']
ecg = reshape(x, len(x))
ecg1 = ecg[:2000]

print 'Wykres dla b = 1:'
b = 1
new_ecg = f4.quantize_ecg(ecg1,b)
figure()
plot(new_ecg)
title('Liczba bitow kodowania jednej probki %d'%(11-b))
show()

print 'Wykres dla b = 2:'
b = 2
new_ecg = f4.quantize_ecg(ecg1,b)
figure()
plot(new_ecg)
title('Liczba bitow kodowania jednej probki %d'%(11-b))
show()

print 'Wykres dla b = 3:'
b = 3
new_ecg = f4.quantize_ecg(ecg1,b)
figure()
plot(new_ecg)
title('Liczba bitow kodowania jednej probki %d'%(11-b))
show()

print 'Wykres dla b = 4:'
b = 4
new_ecg = f4.quantize_ecg(ecg1,b)
figure()
plot(new_ecg)
title('Liczba bitow kodowania jednej probki %d'%(11-b))
show()

print 'Wykres dla b = 5:'
b = 5
new_ecg = f4.quantize_ecg(ecg1,b)
figure()
plot(new_ecg)
title('Liczba bitow kodowania jednej probki %d'%(11-b))
show()

print 'Wykres dla b = 6:'
b = 6
new_ecg = f4.quantize_ecg(ecg1,b)
figure()
plot(new_ecg)
title('Liczba bitow kodowania jednej probki %d'%(11-b))
show()

print 'Wykres dla = 7:'
b = 7
new_ecg = f4.quantize_ecg(ecg1,b)
figure()
plot(new_ecg)
title('Liczba bitow kodowania jednej probki %d'%(11-b))
show()
Wykres dla b = 1:

Wykres dla b = 2:

Wykres dla b = 3:

Wykres dla b = 4:

Wykres dla b = 5:

Wykres dla b = 6:

Wykres dla = 7:

In [4]: