Documente Academic
Documente Profesional
Documente Cultură
biomedicale
Îndrumar de laborator
2014
Universitatea de Medicină şi Farmacie Grigore T. Popa Iaşi
Facultatea de Bioinginerie Medicală
2
Introducere
Cuprins
Lucrarea 1 ----------------------------------------------------------------------- 11
Introducere în MATLAB ------------------------------------------------------ 11
Comenzi, funcţii şi calcul numeric ----------------------------------------- 11
1 Considerații teoretice ------------------------------------------------------- 11
1.1 Prezentarea mediului MATLAB --------------------------------------- 11
1.2 Lansarea în lucru a programului MATLAB. Ferestre de lucru - 11
1.3 Moduri de lucru în MATLAB ------------------------------------------- 13
1.4 Informații generale. Principalele comenzi și funcții -------------- 17
1.4.1 Comenzi generale ----------------------------------------------------------- 18
1.4.2 Citirea datelor din fișiere -------------------------------------------------- 21
1.4.3 Operatori aritmetici -------------------------------------------------------- 23
1.4.4 Operatori relaţionali şi logici --------------------------------------------- 23
1.4.5 Operatori booleeni. Expresii booleene -------------------------------- 24
1.4.6 Caractere speciale ---------------------------------------------------------- 25
1.4.7 Funcţii matematice --------------------------------------------------------- 26
1.4.8 Funcţii destinate analizei datelor --------------------------------------- 26
1.4.9 Funcţii de intrare ------------------------------------------------------------ 27
1.4.10 Comenzi de control --------------------------------------------------------- 27
1.4.11 Definirea variabilelor------------------------------------------------------- 27
1.4.12 Matrici, vectori și scalari-definire și operații ------------------------- 28
1.5 Comenzi pentru reprezentări grafice -------------------------------- 33
1.5.1 Funcţii MATAB elementare pentru reprezentari grafice ---------- 33
1.5.2 Personalizarea graficilor -------------------------------------------------- 36
1.6 Signal ProcessingToolbox. Caracteristici principale -------------- 40
2 Desfăşurarea lucrării -------------------------------------------------------- 45
Lucrarea 2 ----------------------------------------------------------------------- 49
Semnale analogice ------------------------------------------------------------ 49
Seria și transformata Fourier ----------------------------------------------- 49
1 Considerații teoretice ------------------------------------------------------- 49
1.1 Seria Fourier --------------------------------------------------------------- 49
1.1.1 Seria Fourier trigonometrică --------------------------------------------- 49
1.1.2 Proprietăţi importante ---------------------------------------------------- 50
1.1.3 Seria Fourier armonică ---------------------------------------------------- 51
Introducere în MATLAB
Comenzi, funcţii şi calcul numeric
1 Considerații teoretice
1.1 Prezentarea mediului MATLAB
Scopul acestor lucrări de laborator este învăţarea unor metode
utilizate pentru prelucrarea numerică a semnalelor unidimensionale.
Instrumentul folosit, programul MATLAB, este simplu de învăţat şi
utilizat, foarte răspândit în mediile universitare şi poate fi mereu
actualizat. El integrează analiza numerică, calculul matriceal, procesarea
semnalelor și reprezentările grafice.
MATLAB (Matrix Laboratory) este un program interactiv, destinat
prelucrării numerice a datelor furnizate sub formă vectorială sau
matricială.
MATLAB-ul include și aplicații specifice, numite TOOLBOX-uri.
Acestea sunt colecții extinse de funcții MATLAB (fișiere M) care
dezvoltă mediul de programare de la o variantă la alta, pentru a rezolva
probleme diferite. În cazul procesării semnalelor se va lucra mai ales cu
Signal Processing Toolbox.
1.2Lansarea în lucru a programului MATLAB. Ferestre de lucru
Se selectează icoana specifică programului MATLAB şi apoi
MATLAB.exe. Pe monitor va apărea fereastra de comenzi ca în Figura. 1.
meniul pricipal
bara de omenzi
Figura 2. Selectarea din meniul de comandă a unui fişier nou sau a unuia existent
1
Din meniul General se selectează formatul de ieșire, toate calculele fiind
presupuse în dublă precizie
Exemplu
addpath c:MATLAB\Bin\numefisier.m
Are ca efect adăugarea noii căi, adică fișierul numefisier.m din directorul c.
2
comanda casesen off permite trecerea în modul nesesitiv
comanda casesen on permite revenirea în modul sensitiv
Exemplu
» who
Your variables are:
J1 dj param x1 x4
N dt s0 x2 x5
Y pad s1base1 x3 x6
Exemplul 1
Se citește un semnal ECG, ecg.txt descrărcat din baza de date
Physionet și apoi se salvează în format MATLAB (extensia mat)3. Apoi
se reîncarcă semnalul folosind noul fișier salvat.
3
http://eleceng.dit.ie/dorran/matlab/ecg.txt
1.5
1
Amplitude
0.5
-0.5
-1
0 1000 2000 3000 4000 5000 6000
Sample Number
4
http://eleceng.dit.ie/dorran/matlab/problems/hardware_demo/
image(image_signal)
50
100
150
200
250
300
350
400
450
500
50 100 150 200 250 300 350 400 450 500
+ adunare
- scădere
* înmulțire
/ împărțire
^ ridicare la putere
‘ transpus
5
~(a || b) = ~a && ~b și ~(a && b) = ~a || ~b
Există funcţiile:
• xor cu două argumente, ce corespunde operatorului xor (sau
exclusiv). Funcţia xor are valoarea true dacă un singur argument
are valoarea true (dar nu amândouă).
De exemplu, expresia xor(0, 4) are valoarea 1, iar expresia xor(1, 4)
are valoarea 1.
• all – returnează 1 dacă toate elementele unui vector sunt
adevărate sau nenule. Operează şi cu matrici (pe coloane).
• any - returnează 1 dacă oricare din elementele argumentului sunt
adevărate sau nenule; în caz contrar returnează 0
1.4.6 Caractere speciale
= operator de atribuire
, separator (de argumente și funcții)
[] folosite pentru formarea vectorilor și a matricilor
() folosite pentru expresii aritmetice, pentru argumente ale
funcțiilor, pentru notații indirecte, pentru a repera un
element într-un vector sau matrice
: folosite în indexarea variabilelor
; indică sfârșitul unei linii
... indică faptul că se continuă comanda pe linia următoare
% indică un comentariu
● funcții trigonometrice
cos, sin, tan, cot, sec funcțiile trigonometrice uzuale, cu
argumentul în radiani
acos, asin, atan, acot, funcțiile trigonometrice inverse
asec uzuale
cosh, sinh, tanh, coth, funcții hiperbolice
sech
acosh, asinh, atanh, funcții hiperbolice inverse
acoth, asech
b=3^a
va returna valoarea
b=
27
i, j sqrt(-1)
pi 3,1416....
ans numele implicit al unei variabile sau al unui
rezultat
eps precizia relativă în vigulă mobilă
Inf simbolul pentru infinit
NaN Not- a- Number
flaps contor al operatorilor în virgulă mobilă
nargin numărul argumentelor de intrare ale funcției
nargout numărul argumentelor de ieșire ale funcției
A=[1 2 4; 3 6 8 ]
Definește matricea
1 2 4
A=
3 6 8
Elementele unei matrici A pot fi identificate, în MATLAB, prin
notaţia A(i,j) şi semnifică elementul de la intersecţia liniei i cu coloana j.
Pentru a face referire la un element al matrcei sunt necesari doi indici, iar
referirea la un element al unui vector se face cu un singur indice.
Se remarcă faptul că dacă se atribuie o valoare unui element care
ocupă o poziție în afara dimensiunii maxime a unei marice sau unui
vector, dimensiunea acesteia/ acestuia este mărită automat până la
valoarea indicelui noului element, iar elementele nedefinite sunt setate la
valoarea zero.
● size (A) returnează dimensiunea matricei A.
Exemplu
k=0:0.5:5
ceează un vector cu elementele 0,0.5,1,1.5....5.
6
reshape(x,m,n) returnează o matrice cu m x n ale cărei elemente sunt luate
coloană după coloană din x; trebuie ca x să aibă m x n elemente.
a=
11 12 13
14 15 16
b=
11 15
14 13
12 16
c=
11 12 13
14 15 16
d=
11
14
12
15
13
16
f) ridicarea la putere
z=x.^p
reprezintă ridicarea la puterea p a matricei x. Expresia x^p are sens
numai pentru matrici pătratice și p scalar.
g) transpunerea
z=x’
Acest lucru face ca pentru o matrice cu dimensiunea nxm să se
obțină o matrice z cu dimensiunea mxn.
h) Produsul scalar al doi vectori se calculează cu instrucțiunea
sum:
z= sum(a.*b)
1.5 Comenzi pentru reprezentări grafice
1.5.1 Funcţii MATAB elementare pentru reprezentari grafice
Funcţiile MATAB pentru reprezentarile grafice elementare sunt:
● figure creează o fereastră grafică
● image afișează o imagine
● clf șterge figura curentă
● close all închide toate ferestrele grafice
● hold on/off permisiunea/interzicerea suprapunerii reprezentărilor
grafice
● plot desenează graficul în coordonate x-y liniare
● loglog este similar cu plot, cu excepția faptului că reprezintarea
grafică este la scară logaritmică pe x și y
● semilogx, semilogy reprezintare grafică la scară semilogaritmică
pe x, respectiv pe y
● subplot reprezintare grafică într-o porțiune a ecranului
● bar reprezintă un grafic cu bare
● hist reprezintă un grafic sub forma unei histograme
● polar reprezintă un grafic în coordonate polare
Exemplu: Să se reprezinte grafic un semnal sinusoidal
x (t ) = sin( 2π 0.1t ) și un semnal y (t ) = e −0.1t x (t )
Se scrie următorul program în MATLAB.
t=0:0.1:100;
x=sin(2*pi*0.1*t);
y=exp(-.1*t).*x;
subplot(211)
plot(t,x,'k'),ylabel('x(t)'),xlabel('timp sec)');
subplot(212)
plot(t,y,'k'),ylabel('y(t)'),xlabel('timp (sec)');
0.5
x(t)
-0.5
-1
0 20 40 60 80 100
timp sec)
0.5
y(t)
-0.5
0 20 40 60 80 100
timp (sec)
● plot (y)
Dacă argumentul y este complex, plot(y) este echivalent cu
plot(real(y), imag(y)).
Dacă y este un vector (linie sau coloană), atunci funcţia plot trasează
graficul y=y(i), unde i=1,2,…n este numărul de ordine al elementului y.
● plot (x,y,’linie tip’) reprezintă vectorul y funcție de vectorul x, cu
linia tip specificată
● plot (x1,y1,x2,y2,…) reprezintă simultan mai multe grafice, în
Același sistem de coordonate.
Pentru a reprezenta un grafic într-o anumită parte a ferestrei grafice
se folose;te comanda subplot având sintaxa:
● subplot(m,n,p) sau subplot(mnp) împarte fereastra grafică într-o
matrice mxn și reprezintă graficul în poziția p. Numerotarea pozițiilor se
face începând cu prima linie, apoi a doua ș.a.m.d.
● axis([xmin xmax ymin ymax]) stabilește scalarea axelor unei
reprezentari grafice curente la valorile precizate de scalarii: xmin, xmax,
ymin, ymax.
● axis(axis) “îngheață” limitele axelor la valorile curente, astfel
încât următoarele reprezentări să se facă cu aceleași limite
● axis(‘auto’) autoscalează reprezentarea grafică curentă, alegând
cele mai bune limite
● axis(‘on’) reface etichetele axelor graficelor
● axis(‘off’) șterge etichetele axelor graficelor
● axis(‘tight’) setază limitele axelor corespunzător intervalului
datelor
Reprezentarea discretă a datelor se face cu funcția stem sub forma
unor linii terminate cu cerculeț la extremitatea opusă axei. Se apelează cu
una din sintaxele:
● stem(y) trasează un grafic din linii terminate cu cerculeț, cu
elementele vectorului y
● stem(x,y) trasează un grafic din linii terminate cu cerculeț, cu
locațiile specificate de vectorul x. Valorile lui x trebuie să fie egal spațiate
și crescătoare.
● stem (x,y,’linie-tip’) Este similară funciei plot (x,y,’linie-tip’), cu
deosebirea că se trasează graficul cu linii terminale cu cerculeț.
1.5
0.5
-0.5
-1
-1.5
-2
0 5 10 15 20 25 30 35 40
1.5
0.5
-0.5
-1
-1.5
-2
0 5 10 15 20 25 30 35 40
Exemplul 2
Se reprezintă grafic funcția f ( x ) = sin (2π 50t ) , cu culoarea neagră
și linie-punct și funcția g ( x ) = − f (x ) cu markere * de culoare roșie. Se
scrie titlul “graficele funcțiilor f(x) și g(x)”; pe axa x se scrie t, iar pe y se
scrie f(x) și g(x).
Programul MATLAB este
t=0:.001:0.02
f=sin(2*pi*50*t)
g=-f
plot(t,f,'-.k',t,g,'*r'),grid on
title('Graficele functiilor f(x) si g(x)'),xlabel('t'),
ylabel('f(x) si g(x)')
0.8
0.6
0.4
0.2
f(x) si g(x)
-0.2
-0.4
-0.6
-0.8
-1
0 0.005 0.01 0.015 0.02
t
Exemplul 3
Se consideră un fișier s1base1.dat ce reprezintă înregistrarea unui
semnal electroencefalografic (EEG) pe 6 canale: central (stâng c3 și drept
c4), parietal (stâng p3 și drept p4) și occipital (stâng o1 și drept o2). Să se
scrie un program care permite afișarea acestor înregistrări, într-o figură cu
6 linii și o coloană, cu marcarea axelor (timpul și numele canalelor
respective). Graficele să fie cu culoarea neagră.
load('s1base1.dat');
s1base1=s1base1';
x1=s1base1(:,1);
x2=s1base1(:,2);
x3=s1base1(:,3);
x4=s1base1(:,4);
x5=s1base1(:,5);
x6=s1base1(:,6);
n=0:10/2499:10;
subplot(611),plot(n,x1,'k')
axis([0 10,-25 25])
title('EEG pentru activitate de baza') ylabel('c3');
subplot(612),plot(n,x2,'k')
axis([0 10,-25 25]);
ylabel('c4')
subplot(613),plot(n,x3,'k')
axis([0 10,-25 25]);
ylabel('p3')
subplot(614),plot(n,x4,'k')
axis([0 10,-25 25]);
ylabel('p4')
subplot(615),plot(n,x5,'k')
axis([0 10,-25 25]);
ylabel('o1')
subplot(616),plot(n,x6,'k')
axis([0 10,-25 25]);
ylabel('o2'),xlabel('time')
Waveform generation
chirp Swept-frequency cosine generator
diric Dirichlet (periodic sinc) function
gauspuls Gaussian pulse generator
pulstran Pulse train generator
rectpuls Sampled aperiodic rectangle generator
sawtooth Sawtooth function
sinc Sinc or sin(pi*x)/(pi*x) function
square Square wave function
tripuls Sampled aperiodic triangle generator.
Transforms
czt Chirp-z transform
dct Discrete cosine transform
dftmtx Discrete Fourier transform matrix
fft Fast Fourier transform
fftshift Swap vector halves
hilbert Hilbert transform
idct Inverse discrete cosine transform.
ifft Inverse fast Fourier transform.
Filter analysis and implementation
abs Magnitude
angle Phase angle
casfilt Cascade filter implementation
conv Convolution
fftfilt Overlap-add filter implementation.
filter Filter implementation
filtfilt Zero-phase version of filter
2 Desfăşurarea lucrării
1. Operarea cu matrici, vectori și scalari
a) Se consideră următoarele matrici:
A = [2 3 4; 5 2 9; 16 0 0]
B = [1 2 3; 1 1 1; 2 3 2]
Să se calculeze în MATLAB:
a) C1 = A + B
b) C2 = A − B
c) C3 = A + p
d) C4 = A* B
e) C5 = A * p
f) D = A'
g) E = B'
h) Z = A/ B
i) W = A\ B
j) Y = A.^ p
Să se verifice că Z = A * B −1 si W = A−1 * B .
b) Să se genereze un vector cu pas liniar, cu limitele:
a min = 2, a max = 10, pas = 2 .
c) Să se genereze un vector cu pas liniar, cu limitele:
a min = 2, a max = 10, N = 5 , unde N este numărul de elemente.
d) Să se genereze un vector cu N=5 elemente distribuite
logaritmic între decadele 10-2 și 102.
e) Fie un vector y = [1 : 0.11 : 123]
Să se genereze un vector cu toate elementele egale cu 1, având
lungimea egală cu numărul elementelor vectorului y.
f) Să se efectueze produsul scalar al vectorilor:
a = [2 3]
b = [− 4 4]
g) Să se efectueze produsul vectorial al vectorilor de la punctul
(f).
h) Să se calculeze produsul element cu element al matricilor:
A = [1 2 3; 4 5 6; 7 8 9]
B = [0 1 0; 0 1 0; 0 1 0]
2. Reprezentarea grafică
Semnale analogice
Seria și transformata Fourier
1 Considerații teoretice
1.1 Seria Fourier
Un semnal analogic x(t)este periodic dacă și numai dacă:
+ = , ∀ ∈ . (1)
T se numește perioadă.
Nu există biosemnale periodice, ci numai semnale cvasiperiodice. De
exemplu semnalul ECG este un semnal cvasiperiodic.
Un semnal analogic periodic x(t), de perioadă T, se poate scrie ca
suma ponderată de semnale sin și cos din PF7 dacă sunt satisfacute
condițiile lui Dirichlet:
1) este absolut integrabil pe o perioada T
2) are un numar finit de maxime si minime în intervalul (0,T)
3) are un numar finit de discontinuităţi în intervalul (0,T)
Mulțimea PF conţine un număr infinit de funcţii (este necesar să se
utilizeze pentru descompunere un număr mare de funcţii sin şi cos). Se
poate limita numărul de funcţii, cu condiția ca să nu se obţină erori mari.
1.1.1 Seria Fourier trigonometrică
Un semnal periodic x(t), de pulsaţie Ω0, ce există pentru toate
valorile lui t şi satisface condiţiile lui Dirichlet, poate fi descompus în
serie Fourier trigonometrică astfel:
∞ (2)
x ( t ) = ∑ ak cos ( k Ω 0t ) + bk sin ( k Ω 0t )
k =0
T
2 (3)
x ( t ) cos ( k Ω 0t ) dt
T ∫0
ak =
T
1
x ( t )dt
T ∫0
a0 =
T
2
x ( t ) sin ( k Ω 0t ) dt
T ∫0
bk =
0 T
2
2
= ∫ x ( t ) sin ( k Ω0t ) dt + ∫ x ( t ) sin ( k Ω 0t ) dt =
T T
− 2 0
T T
2 2 2
= − ∫ x ( t ) sin ( k Ω0t ) dt + ∫ x ( t ) sin ( k Ω 0t ) dt = 0
T 0
0
(5)
=
cosΩ
(6)
T
T 2
2 2
ak = ∫ x ( t ) cos ( k Ω0t ) dt = ∫ x ( t ) cos ( k Ω t ) dt =
0
T 0 T T
−
2
0 T
2
2
= ∫ x ( t ) cos ( k Ω0t ) dt + ∫ x ( t ) cos ( k Ω 0t ) dt =
T T
− 2 0
T T
2 2 2
= − ∫ x ( t ) cos ( k Ω0t ) dt + ∫ x ( t ) cos ( k Ω0t ) dt = 0
T 0
0
(7)
=
sinΩ
a0
A0 =
2
Ak = ak2 + bk2
bk
Φ k = − arctg
ak
∞ (9)
x (t ) = ∑ ck e jk Ω0t
k =−∞
T
1
x ( t ) e− jk Ω0t dt
T ∫0
ck =
ck = ck e jΦk
ak + jbk
ck =
2
ak − jbk
c− k =
2
1 2
ck = ak + bk2
2
b
Φ k = − arctg k
ak
Reprezentarea modulului |
| în funcţie de kΩ reprezintă spectrul
de amplitudine.
Reprezentarea fazei Φ
în funcţie de kΩ reprezintă spectrul de fază
1.1.5 Relaţia lui Parceval
Puterea unui semnal periodic de perioadă T este:
(10)
∞
T T T
1 1 1
∫ x (t ) dt = ∫ x ( t ) x∗ ( t ) dt = ∫ x ( t ) ∑ cn∗e − jnΩ0t dt =
2
Px =
T 0
T 0 T 0 n =−∞
∞ T
∗ 1
∞ ∞
∑ n T ∫ ( ) ∑ n n ∑ cn
− jnΩ0t ∗ 2
= c x t e dt = c c =
n =−∞ 0 n =−∞ n =−∞
∞ (11)
∑
2
Px = cn
n =−∞
2 Exemple MATLAB
2.1 Exemplul 1 - biosemnal ce poat fi aproximat ca fiind semnal
periodic
S-a monitorizat temperatura abdominală şi consumul de oxigen la un
porumbel într-un mediu lumină-întuneric controlat și s-a constatat că
există o anumită periodicitate determinată de succesiunea lumină-
întuneric (zi-noapte), adică de ceasul circadian8.
Se urmărește programul lucrare2_ex1.m:
8
Bruce E., Biomedical signal processing and signal modeling, John Wiley & Sons,
2001.
41
Tb (grade)
40
39
38
37
0 10 20 30 40 50
9
8
VO2 (ml/min)
7
6
5
4
3
0 10 20 30 40 50
Time (ore)
Data=punctat, Aproximare=solid
42
41
Tb (grade)
40
39
38
37
0 5 10 15 20 25 30 35 40 45 50
Time (ore)
1.5
0.5
)
rade
T (g
b
-0.5
-1
0 10 20 30 40 50
Time (ore)
Data=punctat, Aproximare=solid
1.5
0.5
T (grade)
b
-0.5
-1
0 10 20 30 40 50
Time (ore)
Data=punctat, Aproximarea=solid
41.5
41
40.5
40
T (grade)
39.5
39
b
38.5
38
37.5
37
0 10 20 30 40 50
Time (ore)
0.8
0.6
0.4
0.2
x(t)
-0.2
-0.4
-0.6
-0.8
-1
0.5
-0.5
-1
-1.5
0 0.2 0.4 0.6 0.8 1
Timp
3 Desfășurarea lucrării
1. Exemplul 1
1. Se înțelege funcția fitsin.m.
2. Se completează fișierul script lucrare2_ex1.m cu liniile de
cod necesare pentru a se putea vizualiza atât semnalul
aproximat și cel real ca în figura 2.
3. Se completează fișierul script lucrare2_ex1.m cu liniile de
cod necesare pentru a se putea reprezenta diferența dintre
semnalul real și cel aproximat, precum și semnalul care se
obține dacă se sumează semnalul de eroare și aproximarea
acestuia cu semnalul sinusoidal având parametri
specificați.
4. Se repetă procedura de aproximare a noii erori dintre
semnalul aproximat prin sumare și semnalul real.
5. Se interpreteză rezultatul.
6. Concluzii
2. Exemplul 2
1. Se demonstrează relația (12)
1 Noţiuni teoretice
Un semnal analogic sinusoidal, reprezentat de relaţia
x a (t ) = A cos(2πF0t + θ) , (1)
xk (t ) = A cos(2πFk t + θ) , (3)
FS ≥ 2 Fmax = 2 B , (4)
iar refacerea semnalului se face cu ajutorul unui filtru trece jos ideal, după
funcţia de interpolare dată de relaţia
n
∞
sin 2πB t −
n 2 B (5)
xa (t ) = ∑ xa
n = −∞ 2 B 2πB t − n
2B
Schematic, trecerea de la un semnal analogic la unul discret și invers,
poate fi privită ca în Figura 1.
2 Exemple MATLAB
În această lucrare se urmăreşte punerea în evidență a erorii de alias
apărută ca urmare a eşantionării unui semnal analogic cu o frecvenţă sub
frecvenţa minima de eșantionare şi reconstrucţia unui semnal analogic
dintr-un semnal discret.
Nu este uşor a se ilustra fenomenul de alias cu ajutorul unui program
MATLAB, deoarece acest mediu lucrează numai cu semnale discrete,
reprezentate prin vectori. Se utilizează reproduceri vizuale (sau audio) ale
semnalului pentru a ilustra fenomenul de aliasing.
Deoarece în MATLAB se poate lucra doar cu semnale discrete şi nu
este posibil să se genera un semnal analogic, trebuie simulată axa t a
timpului real (caracteristic semnalelor analogice).
Pentru a simula semnale se va alege ca frecvenţă de simulare o
frecvenţă de cel puţin 5 ori mai mare decât frecvenţa de eşantionare.
În concluzie, vor exista două frecvenţe de eşantionare în această
lucrare: una pentru eşantionare şi una pentru simularea semnalului
continuu, mult mai mare decât cea de eşantionare.
Exemplul 1
Se consideră un semnal analogic sinusoidal având frecvența de 400
Hz, înregistrat pe o durată de 5 ms. Acest semnal este eșantionat cu
frecvența de eșantionare de 10 kHz. Să se afișeze semnalul pe durata
înregistrării, precum și semnalul eșantionat9, pe aceeași figură, pe grafice
separate.
Programul lucrare3_ex1.m ilustrează procesul de eşantionare.
%lucrare5_ex1
%Exercitiul 1
clear all
close all
Fo=400;
Fs=8000;
9
Notă: se va folosi comanda stem
stem(Y) afişează secvenţa de date Y ca linii de la axa x terminate cu cercuri
stem(X,Y) afişează secvenţa de date Y pentru valorile specificate în X.
stem(...,'filled') produce afişare tip stem cu markere.
stem(...,'linespec') utilizează tipurile de linii specificate (a se vedea plot)
tfinal=5*10^-2;
tn=0:1/Fs:tfinal-1/Fs; %ms
phi=0;
x=sin(2*pi*Fo*tn+phi);
subplot(211);
plot(10^3*tn,x);
%xlabel('Time, msec');
ylabel('Amplitude');xlabel('Time, msec');
title('Semnalul continuu x_{a}(t)');
axis([0 5 -1.2 1.2])
subplot(212);stem(10^3*tn,x);
ylabel('Amplitude');
title('Semnalul esantionat x_{n}(t)');
axis([0 5 -1.2 1.2])
0.5
Amplitudine
-0.5
-1
0 1 2 3 4 5
Timp, msec
Semnalul esantionat x(n)
1
0.5
Amplitudine
-0.5
-1
0 1 2 3 4 5
a) Exemplul 2
Se consideră un semnal analogic sinusoidal având frecvența de 400
Hz, eșantionat cu frecvența de eșantionare de 10 kHz. Să se afișeze
%lucrare3_ex2
%Exercitiu 2
clear all
close all
N=499;
Fsim=50000;
Fo=400;
Fs=10000;
phi=0;
n=0:N;
xa=cos(2*pi*(Fo/Fsim)*n+phi);
xs=[];
xn=[];
for i=1:length(xa)/(Fsim/Fs);
xn(i)=xa(1+(Fsim/Fs)*(i-1));
xs=[xs 1 zeros(1,(Fsim/Fs)-1)];
end;
subplot(311);plot((0:length(xa)-1),xa);
axis([0 (length(xa)-1) -1.2 1.2 ]);
legend('Semnal analogic');
subplot(312);stem((0:length(xn)-1),xn);
axis([0 (length(xn)-1) -1.2 1.2]);
legend('Semnalul esantionat');
subplot(313);plot((0:length(xn)-1),xn);
axis([0 (length(xn)-1) -1.2 1.2]);
legend('Semnalul esantionat reprezentat cu plot');
xlabel('timp');
1
Semnal analogic
0
-1
0 50 100 150 200 250 300 350 400 450
1
Semnalul esantionat
0
-1
0 10 20 30 40 50 60 70 80 90
1
Semnalul esantionat reprezentat cu plot
0
-1
0 10 20 30 40 50 60 70 80 90
timp
T=1/Fs;
n = 0:T:1;
xs = cos(2*pi*F*n);
subplot(212);
stem(n,xs,'r');
grid on;
xlabel('Timp index n')
title('Semnal discret x[n]');
0.5
-0.5
-1
0 0.2 0.4 0.6 0.8 1
Timp, msec
Semnal discret x[n]
1
0.5
-0.5
-1
0 0.2 0.4 0.6 0.8 1
Timp index n
%lucrare3_ex4
clear all
close all
F = 13;
T = 0.1;
n = (0:T:1)';
xn = cos(2*pi*F*n);
t = linspace(-0.5,1.5,500)';
ya = sinc((1/T)*t(:,ones(size(n))) -
(1/T)*n(:,ones(size(t)))')*xn;
stem(n,xn,'r')
hold on
plot(t,ya)
grid on
xlabel('Timp, msec');ylabel('Amplitudine');
axis([0 1 -1.2 1.2]);
0.8
0.6
0.4
0.2
Amplitudine
-0.2
-0.4
-0.6
-0.8
-1
un semnal cu o frecvență mai mică (și anume 3Hz) decât cea a semnalului
de la care s-a plecat.
d) Exemplul 5
Se consideră un semnal sinusoidal având frecvența de 3 Hz. Să se
scrie un program care să permită afișarea semnalului continuu și a
eșantioanelor atunci când se eșantionează cu frecvențele de eșantionare de
100 Hz, 50 Hz, 10 Hz și 6 Hz.
clear all
close all
f = 3;
t = 0:0.0005:1;
xa = cos(2*pi*f*t);
n=0:1/100:1;
xn=cos(2*pi*f*n);
figure
plot(n,xn,'o','MarkerFaceColor','r','MarkerSize',10)
hold on
plot(t,xa,'LineWidth',2), grid on
xlabel('Fs=100Hz');ylabel('Amplitudine');
n=0:1/50:1;
xn=cos(2*pi*f*n);
figure
plot(n,xn,'o','MarkerFaceColor','r','MarkerSize',10)
hold on
plot(t,xa,'LineWidth',2), grid on
xlabel('Fs=50Hz');ylabel('Amplitudine');
n=0:1/10:1;
xn=cos(2*pi*f*n);
figure
plot(n,xn,'o','MarkerFaceColor','r','MarkerSize',10)
hold on
plot(t,xa,'LineWidth',2), grid on
xlabel('Fs=10Hz');ylabel('Amplitudine');
n=0:1/6:1;
xn=cos(2*pi*f*n);
figure
plot(n,xn,'o','MarkerFaceColor','r','MarkerSize',10)
hold on
plot(t,xa,'LineWidth',2), grid on
xlabel('Fs=6Hz');ylabel('Amplitudine');
0.8
0.6
0.4
0.2
Amplitudine
-0.2
-0.4
-0.6
-0.8
-1
0 0.2 0.4 0.6 0.8 1
Fs=100Hz
0.8
0.6
0.4
0.2
Amplitudine
-0.2
-0.4
-0.6
-0.8
-1
0 0.2 0.4 0.6 0.8 1
Fs=50Hz
0.8
0.6
0.4
0.2
Amplitudine
-0.2
-0.4
-0.6
-0.8
-1
0 0.2 0.4 0.6 0.8 1
Fs=10Hz
0.8
0.6
0.4
0.2
Amplitudine
-0.2
-0.4
-0.6
-0.8
-1
0 0.2 0.4 0.6 0.8 1
Fs=6Hz
3 Desfășurarea lucrării
Exercițiul 1
Să se refacă exemplele 3 și 4 pentru următoarele 4 valori pentru Fs:
26 Hz, 40 Hz , 100 Hz și 1000 Hz.
Exercițiul 2
Fie un semnal sinusoidal analogic dat de relaţia
xa (t ) = cos 2πF0t
a) Să se afişeze semnalul x(n) pentru 0≤ n ≤50 pentru FS=5 kHz
şi F0=0,5;2;3;4,5 kHz. Explicaţi similarităţile şi diferenţele
între diferitele grafice.
b) Presupunem că F0=2 kHz, iar FS=50 kHz. Să se afişeze x(n).
Care este frecvenţa f0 ?
Exercițiul 3
Pentru semnalul eşantionat dat de relaţia (2), fie Fs=8 kHz.
a) Să se reprezinte cu plot semnalul sinusoidal iniţial (1). Fie
frecvenţa semnalului sinusoidal F0=300 Hz şi eşantioanele
luate pe durata de 10 ms. Faza este arbitrară. Să se reprezinte
semnalul discret. Să se compare.
b) Să se reprezinte semnalul discret cu plot. În acest caz punctele
sunt conectate cu linii, astfel încât aspectul de semnal
sinusoidal este evident. Conectarea punctelor cu linii este o
formă de reconstrucţie a semnalului care transformă semnalul
discret în semnal continuu. Aceasta nu este forma ideală dată
de teorema eşantionării, dar, în multe situaţii este
satisfăcătoare.
c) Să se efectueze mai multe reprezentări ale semnalului discret,
modificând F0 de la 100 Hz la 475 Hz în paşi de 125 Hz. Folosiţi
subplot pentru reprezentare. Comentaţi.
d) Repetaţi c) dar variaţi frecvenţa sinusoidei de la 7525 la 7900
Hz în paşi de 125 Hz. Comentaţi fenomenul în comparaţie cupunctul
c).
e) Refaceţi c) dar variaţi frecvenţa F0 de la 32100 la 32475 în
paşi de 125 Hz.
Exercițiul 4
Semnale discrete
1 Considerente teoretice
Prin semnal se înţelege orice cantitate sau calitate fizică care variază
cu timpul, spaţiul sau oricare altă sau alte variabile independente şi
transportă sau conţine informaţie. Deşi semnalele pot fi reprezentate în
multe moduri, în toate cazurile informaţia este conţinută în modelul de
variaţie adoptat. Matematic, semnalele sunt modelate ca funcţii de una sau
mai multe variabile independente.
Un semnal se numeşte monodimensional dacă este reprezentat în
funcţie de o singură variabilă independentă.
Un semnal se numeşte M-dimensional dacă valoarea sa este o funcţie
de M variabile independente.
Prelucrarea numerică a semnalelor se ocupă cu reprezentarea
numerică a semnalelor originale în domeniul variabilei sau al variabilelor
sau într-un domeniu transformat şi cu modificarea algoritmică a acestora
cu ajutorul procesoarelor numerice pentru a analiza, modifica sau extrage
informaţii din semnale.
Un semnal definit în timp discret, x [k ] sau x (n ) (ca notație), este o
funcţie a cărei variabilă independentă este un întreg şi este reprezentat de
obicei printr-o secvenţă de numere.
Modelul matematic al unui semnal discret poate fi definit ca o
aplicație
x : F → X ,n → x [ n ]
astfel încât, pentru secvenţe unidimensionale
∀n ∈ F ⊆ N sau Z ⇒ x (n ) ∈ X ⊆ N , R sau C
Obişnuit, x (n ) defineşte al k-lea eşantion al semnalului discret x (n )
indiferent dacă acesta provine din eşantionarea unui semnal analogic sau
nu. Descrierea secvenţelor poate fi efectuată prin:
• reprezentarea funcţională;
• reprezentarea tabelară;
0.5
0
-2 0 2 4 x(n+3)6 8 10 12
1
0.5
0
-2 0 2 4 x(n-3) 6 8 10 12
1
0.5
0
-2 0 2 4 6 8 10 12
Semnale discrete
Dacă semnalul x(n) este înregistrat sau memorat, este simplu să se
decaleze în timp semnalul, dar fizic operația de avans al semnalului nu
este realizabilă deoarece o asemenea operație implică eșantioane ale
semnalului care nu au fost generate încă.
2. Reflexia în timp
Rezultatul înlocuirii variabilei n cu -n este o reflexie a semnalului
față de origine (n = 0).
Exemplu
Se consideră același semnal ca cel din exemplul precedent. Să se
reprezinte semnalul reflectat.
Se obține reprezentarea din Figura 2.
x(n)=0,75 n*u(n)
1
0.8
0.6
0.4
0.2
0
-10 -8 -6 -4 -2 0 2 4 6 8 10
x(-n)
1
0.8
0.6
0.4
0.2
0
-10 -8 -6 -4 -2 0 2 4 6 8 10
y (n ) = Ax (n ) .
y (n ) = x1 (n ) + x2 (n ) .
y (n ) = x1 (n ) ⋅ x 2 (n ) .
1.1 Generarea unor semnale elementare
Semnalele elementare sunt generate cu următoarele secvenţe de
comenzi MATLAB
1. Impulsul unitate: delta=[1;zeros(100,1)]
2. Semnalul treaptă unitate u=ones(100,1)
3. Semnal dreptunghiular: d=[ones(1,5), zeros(1,3)]
4. Semnal sinusoidal: s=2*(pi/8)*(0:15)
5. Semnal tip "sinc" : sc=sinc(0:0.25:8)
6. Semnal exponențial: ex=exp(-(0:15))
7. Semnalul ce reprezintă ridicarea la pătrat: ex1=pow2(-0.5*(0:15))
8. Semnalul ce reprezintă ridicarea la cub: ex2=3.^(0:15)
9. Secvența aleatoare distribuită normal: ran=randn(1,16)
În continuare sunt prezentate câteva programe simple de generare şi
vizualizare a unor semnale elementare pentru anumite domenii de valori
ale variabilei independente.
Pentru a obţine impulsul unitate centrat pe valoarea 0 a variabilei
independente se utilizează programul MATLAB lucrarea_4_ex1.m.
Impulsurile δ [n − n0 ] pot fi folosite la construirea trenurilor de impulsuri
periodice, de perioadă P și lungime MP
Universitatea de Medicină şi Farmacie Grigore T. Popa Iaşi
Facultatea de Bioinginerie Medicală
Lucrarea 4 79
Semnale discrete
M −1
s[ n ] = ∑ Al δ[ n − lP ] .
l =0
% lucrarea 4 ex1
% generarea impulsului unitate delta
clear all
close all
% generarea unui vector linear între -20 ?i 20
n = -20:20;
delta = [zeros(1,20) 1 zeros(1,20)];
% afi?area
stem(n,delta);
xlabel('Timp n');ylabel('Amplitudine');
title('Impuls unitate discret');
axis([-20 20 0 1.2]);
% generarea trenurilor de impulsuri
P=5;
M=6;
x=[1;zeros((P-1),1)];
y=x*ones(1,M);
y1=y(:);
figure
stem(y1)
xlabel('tren de impulsuri')
axis([0 length(y1) 0 1.2]);
% lucrarea4_ex2
% generarea unui semnal discret de tip exponentíal complex
clear all
close all
c = (1/20)+(pi/9)*i;
K = 2;
n = 0:40;
x = K*exp(c*n);
subplot(2,1,1);
stem(n,real(x));
xlabel('Timp n');ylabel('Amplitudine');
title('Parte reală');
subplot(2,1,2);
stem(n,imag(x));
xlabel('Timp n');ylabel('Amplitudine');
title('Parte imaginară');
10
Amplitudine
-5
-10
0 5 10 15 20 25 30 35 40
Timp n
Parte imaginară
15
10
Amplitudine
-5
-10
0 5 10 15 20 25 30 35 40
Timp n
% lucrarea4_ex3
% generarea unei secvente exponential reale
clear all
close all
n = 0:20;
a = input('a=')
A = 0.2;
x = A*a.^n;
stem(n,x);
xlabel('Timp n');ylabel('Amplitudine');
Semnale discrete
1.4 Generarea unei secvenţe sinusoidale
% lucrare4_ex5
% generarea unei secvené sinusoidale
clear all
close all
n = 0:40;
f = input('f=');
faza = 0;
A = 1.5;
arg = 2*pi*f*n - faza;
x = A*cos(arg);
stem(n,x); % afisarea secventei
axis([0 40 -3 3]);
grid;
title('secventa sinusoidala');
xlabel('Timp n');
ylabel('Amplitudine');
axis;
% lucrarea4_ex5
% generarea unei secventa modulate in amplitudine
clear all
close all
n = 0:100;
m = 0.1;
fpurtatoare = 0.1;
fmodulatoare = 0.01;
xpurtatoare = sin(2*pi*fpurtatoare*n);
xmodulatoare = sin(2*pi*fmodulatoare*n);
y = (1+m*xpurtatoare).*xmodulatoare;
stem(n,y);grid;
xlabel('Timp n');ylabel('Amplitudine');
% lucrarea4_ex6
% netezirea semnalelor prin mediere
clear all
close all
R=31;
% generare de zgomot aleatoriu (a se revedea functia rand)
zgomot = 0.8*(rand(R,1) - 0.5);
m = 0:R-1;
%generarea unui semnal neperturbat
s = 2*m.*(0.9.^m);
%generarea unui semnal perturbat aditiv cu zgomot
x = s + zgomot';
plot(m,zgomot','r-',m,s,'k--',m,x,'b-.');
xlabel('Timp n');ylabel('Amplitudine');
x1 = [0 0 x];
x2 = [0 x 0];
x3 = [x 0 0];
%medierea celor trei secvente decalate
y = (x1 + x2 + x3)/3;
hold on
plot(m,y(2:R+1),'m');
legend('zgomot[n] ','s[n] ','x[n] ','y[n] ');
xlabel('Timp n');ylabel('Amplitudine');
8
zgomot[n]
7 s[n]
x[n]
6 y[n]
5
Amplitudine
-1
0 5 10 15 20 25 30
Timp n
Semnale discrete
1.7 Proprietăți asupra variabilei independente
Exemplul 1
Se realizează o funcție MATLAB care face decalarea cu k eșantioane
pentru 3< ≤ 3 ≤ 3! .
function [y,m]=decalare(x,n1,n2,k)
n=n1:n2;
m=n+k;
y=x;
clear all
close all
n1=0;
n2=100;
n=n1:n2;
x = sin(2*pi*1/100*n);
k=3;
[y,m] = decalare(x,n1,n2,k); % decalare la dreapta cu 3
esantioane
subplot(2,1,1), stem(n,x), title('semnal initial')
subplot(2,1,2), stem(m,y),axis([0 n2 -1.2 1.2],
title('semnal intarziat cu 3 esantioane')
semnal initial
1
0.5
-0.5
-1
0 20 40 60 80 100
0.5
-0.5
-1
0 20 40 60 80 100
Exemplul 2
Se realizează o funcție MATLAB care realizează reflexia unui semnal
discret.
function [y,n]=reflexie(x,m)
y=fliplr(x);
n=-fliplr(m);
Se verifică funcția creată cu ajutorul următorului cod10:
clear all
close all
n=-10:100;
x=sin(2*pi*(1/100)*n);
[y,m]=reflexie(x,n);
subplot(211)
stem(n,x), grid
title('semnal initial')
subplot(212)
stem(m,y), grid
title('semnal reflectat')
10
Se va verifica și cum lucrează funcția fliplr.m.
Universitatea de Medicină şi Farmacie Grigore T. Popa Iaşi
Facultatea de Bioinginerie Medicală
Lucrarea 4 85
Semnale discrete
semnal initial
1
0.5
-0.5
-1
-20 0 20 40 60 80 100
semnal reflectat
1
0.5
-0.5
-1
-100 -80 -60 -40 -20 0 20
function [z,p]=adunare_semnale(x,n,y,m)
% p durata lui y(n)
p=min(min(n),min(m)):max(max(n),max(m));
% initializare cu un vector cu elemente egale cu 0, de
lungime egala cu p
z1=zeros(1,length(p));
z2=z1;
%z1 cu durata lui x
a=find((p>=min(n))&(p<=max(n))==1);
z1(a)=x;
%z2 cu durata lui y
b=find((p>=min(m))&(p<=max(m))==1);
z2(b)=y;
z=z1+z2;
2. Exercițiul 2
Să se realizeze o funcție care să returneze un semnal impuls unitate
discret decalat cu n0 eșantioane, precum și afișarea acestuia. Semnalul
este definit și reprezentat pe un interval finit cuprins între n1 și n211.
3. Exercițiul 3
Să se realizeze o funcție care să returneze un semnal treaptă unitate
discret decalat cu n0 eșantioane, precum și afișarea acestuia. Semnalul
este definit și reprezentat pe un interval finit cuprins între n1 și n2.
4. Exercitiul 4.
Să se genereze și să se reprezinte în domeniul indicat următoarele
semnale sinusoidale
0
< = 23 ; 3? , −15 ≤ 3 ≤ 15
17
0
! = 23 ; 3? , 0 ≤ 3 ≤ 68
17
11
Este elegant să se utilizeze relața logică 3 == 0.
Universitatea de Medicină şi Farmacie Grigore T. Popa Iaşi
Facultatea de Bioinginerie Medicală
Lucrarea 4 87
Semnale discrete
0
R = 23 ;303 + ? , −10 ≤ 3 ≤ 10
3
0 0
= = cos U 3 + W , 0 ≤ 3 ≤ 25
√17 3
Să se dea o formulă mai simplă pentru x3(n) și să se studieze
periodicitatea secvențelor. Se va verifica și în MATLAB periodicitatea.
5. Exercițiul 5.
Să se genereze un vector cu 1000 elemente dintr-un semnal
sinusoidal: xsin=sin(2*pi*1:0.1:1000). Să se vizualizeze semnalul pentru
200 eșantioane.
Să se determine maximul, minimul media, mediana și dispersia
semnalului cu ajutorul comenzilor max, min, mean, median, std.
Să se repete aceste comenzi pentru secvențele generate de comenzile
square, sawtooth, rand, randn.
6. Exercițiul 6.
Să se scrie o funcție Matlab care să genereze o sinusoidă de lungime
finită, cu 5 argumente de intrare: 3 pentru parametrii sinusoidei si 2
pentru a specifica primul și ultimul indice al secvenței finite. Funcția va
returna un vector coloană care va conține valorile sinusoidei și
reprezentarea grafică a acesteia.
7. Exercitiul 7.
Să se modifice funcția de la exercitiul 6, astfel încât să se returneze 2
argumente: un vector al indicilor semnalului și valorile semnalului.
8. Exercitiul 8.
1 Considerente teoretice
Un sistem discret este un dispozitiv sau un algoritm care operează
asupra unui semnal discret, numit intrare sau excitaţie, conform unor
reguli bine definite, pentru a produce un alt semnal discret, numit ieşirea
sau răspunsul sistemului.
Semnalul de intrare x[n] este transformat de sistemul discret în
semnalul de ieşire y[n] , conform relaţiei
y[n] ≡ H [x[n]] (1)
Dacă ieşirea y[n, k ] este egală cu y[n − k ] pentru toate valorile lui k,
sistemul este invariant în timp. În caz contrar, dacă y[n, k ] ≠ y[n − k ] ,
chiar pentru o singură valoare a lui k, sistemul este variant în timp.
1.1.3 Sisteme discrete liniare şi neliniare
Prin definiţie, un sistem discret, relaxat, caracterizat de operatorul H
este liniar dacă satisface principiul superpoziţiei, adică
2 Aplicaţii rezolvate
2.1 Proprietăţile sistemelor discrete.
2.1.1 Proprietatea de liniaritate pentru sistemele discrete.
% lucrarea5_ex1
% generare semanal intrare
clear all
close all
n = 0:40;
a = 2;b = -3;
x1 = cos(2*pi*0.1*n);
x2 = cos(2*pi*0.4*n);
x = a*x1 + b*x2;
%definirea sistemului
num = [2.2403 2.4908 2.2403];
den = [1 -0.4 0.75];
%calculul iesirii y1[n] si y2[n]
y1 = filter(num,den,x1);
y2 = filter(num,den,x2);
%calculul iesirii y[n]
y = filter(num,den,x);
yt = a*y1 + b*y2;
% calculul diferentei iesirilor d[n]
d = y - yt;
% afisarea iesirilor si a diferentei
subplot(311)
stem(n,y);
ylabel('Amplitudine');
title('Iesire produsa suma ponderata a semnalelor de
intrare : a \cdot x_{1}[n] + b \cdot x_{2}[n]');
subplot(312)
stem(n,yt);
ylabel('Amplitudine');
title('Iesirea ponderata: a \cdot y_{1}[n] + b \cdot
y_{2}[n]');
subplot(313)
stem(n,d);
xlabel('Timp n');ylabel('Amplitudine');
title('diferenta iesirilor');
-50
0 5 10 15 20 25 30 35 40
Iesirea ponderata: a ⋅ y1[n] + b⋅ y2[n]
50
Amplitudine
-50
0 5 10 15 20 25 30 35 40
-15
x 10 diferenta iesirilor
5
Amplitudine
-5
0 5 10 15 20 25 30 35 40
Timp n
% lucrarea5_ex2
% generarea semnalului de intrare
clear all
n = 0:20;
k = input('decalarea este k=');
a = 2;b = 3;
x = a*cos(2*pi*0.1*n) + b*cos(2*pi*0.4*n);
%semnal decalat cu k unitati
xd = [zeros(1,k) x];
%definirea sistemului prin definirea coeficientilor de la
numaratorul si numitorul functiei de transfer
num = [2.2403 2.4908 2.2403];
den = [1 -0.4 0.75];
% calculul iesirii y[n]
y = filter(num,den,x);
% calculul iesirii yd[n]
yd = filter(num,den,xd);
% calculul diferentei d[n]
%[zeros(1,k) y] este iesirea decalata cu k esantioane
ydecalat=[zeros(1,k) y];
d=ydecalat-yd;
% afisarea iesirilor
subplot(411)
stem(n,y);
ylabel('Amplitudine');
title('Iesirea y[n]'); grid;
subplot(412)
stem(ydecalat)
title('Iesirea decalata cu k y[n-k]'); grid;
subplot(413)
stem(yd)%(1:21));
ylabel('Amplitudine');
title('iesirea datorata intrarii decalate cu k x[n-k]');
grid;
subplot(414)
stem(d);
xlabel('Timp n'); ylabel('Amplitudine');
title('Diferenta semnalelor'); grid;
Iesirea y[n]
Amplitudine
20
0
-20
0 5 10 15 20
Iesirea decalata cu k y[n-k]
20
0
-20
0 5 10 15 20 25
iesirea datorata intrarii decalate cu k x[n-k]
Amplitudine
20
0
-20
0 5 10 15 20 25
Diferenta semnalelor
Amplitudine
1
0
-1
0 5 10 15 20 25
Timp n
% lucrarea5_ex3
% stabilitatea este testata pe baza sumei raspunsurilor la
impuls
% values of the impulse response samples
clear all
close all
%definirea sistemelor
num = [1 -0.8];
den = [1 1.5 0.9];
N = 200;
%raspunsul la impuls cand sistemul este descris prin num si
den
h = impz(num,den,N+1);
suma = 0;
for k = 1:N+1;
suma = suma + abs(h(k));
1
Amplitudine
-1
-2
-3
0 50 100 150 200
Timp n
3 Desfăşurarea lucrării
Exemplul 1
Se consideră programul lucrarea5_ex1.m.
Ieşirea y[n] obţinută prin ponderarea intrării şi yt[n] obţinută prin
combinarea ieşirilor y1[n] şi y2[n] cu aceleşi ponderi conduc la concluzia
ca sistemul este liniar sau neliniar?
Să se modifice programul astfel încât să simuleze sistemul
y [ n ] = x [ n ] x [ n − 1] .
Exemplul 2
Se consideră programul lucrarea5_ex2.m
Secvenţele de ieşire y[n] şi y[n-10] generate prin rularea
programului conduc la concluzia că sistemul este sau nu invariant în
timp?
Să se modifice programul astfel încât să simuleze sistemul
y [ n ] = nx [ n ] + x [ n − 1] .
Noile secvenţe de ieşire y[n] şi y[n-10] generate prin rularea
programului conduc la concluzia că sistemul este sau nu invariant în
timp?
Exemplul 3
Se consideră programul lucrarea5_ex3.m
Sistemul descris în program este stabil sau instabil?
Valoarile lui h [ k ] sunt……
1 Noţiuni teoretice
Dacă semnalul de intrare x(n) este o sumă ponderată de impulsuri
unitate, adică:
∞
x (n ) = ∑ x(k )δ (n − k ) ,
k = −∞
2 Comenzi MATLAB
Comenzile MATLAB utilizate pentru calculul convoluţiei liniare
sunt:
conv
deconv
Pentru a calcula convoluţia discretă a două secvenţe x(n) şi h(n),
adică 3 ∗ ℎ3 , se definesc vectorii x şi h având elementele
secvenţelor x(n) şi h(n). Apoi se utilizează comanda
y = conv(x,h)
Această comandă presupune că primul element în x şi primul element
în h corespund momentului de timp n=0, astfel încât primul element al
vectorului de ieşire y corespunde la n=0. Dacă situaţia nu este aceasta,
atunci vectorul de ieşire va fi calculat corect, dar idexul elementelor
trebuie corectat. De exemplu,
Universitatea de Medicină şi Farmacie Grigore T. Popa Iaşi
Facultatea de Bioinginerie Medicală
Lucrarea 6 99
Suma de convoluţie
x = [1 1 1 1 1];
h =[0 1 2 3];
y = conv(x,h);
conduce la y = [0 1 3 6 6 6 5 3]. Dacă indexul pentru x şi cel pentru h
sunt cei precizați anterior, atunci y[0] = 0, y[1] = 1, .... În general,
indexul primului element din y este suma dintre indexul primului element
din x şi indexul primului element din h. De exemplu, dacă primul
elemnet din h corespunde la n = -2 şi primul element din x corespunde la
n = -3, atunci primul element din y corespunde la n = -5.
Trebuie avut grijă atunci când se calculează convoluţia unor secvenţe
infinite. Dacă vectorul x are lungimea q şi vectorul h are lungimea r,
atunci trebuie ca vectorul y să fie trunchiat pentru a avea o lungime
min(q,r).
Comanda conv poate fi utilizată şi pentru a înmulţi polinoame: să
presupunem că în vectorul a sunt introduşi coeficienţii polinomului a(s)
şi în vectorul b coeficienţii polinomului b(s), atunci coeficienții
polinomului a(s)b(s) pot fi gasiţi ca elemente ale vectorului definit ca ab
= conv(a,b).
Comanda deconv este inversa convoluţiei. Poate fi utilizată pentru
împărţirea polinoamelor. Fiind date polinoamele a(s) şi b(s) cu
coeficienţii memoraţi în a şi b, atunci coeficienţii polinomului c(s) =
b(s)/a(s) se găsesc utilizând comanda c = deconv(b,a).
3 Aplicaţii rezolvate
Exemplul 1
Ilustrarea situaţiei în care indexul semnalului discret pentru primul
element este diferit de 0.
Se consideră un semnal definit astfel:
0 3 = −1
3 = \ 1 0 ≤ 3 ≤ 10
0 10 < 3 ≤ 14
Să se calculeze convoluția 3 ∗ 3.
% Exemplul 1
clear all
close all
x = [0 ones(1,10) zeros(1,5)]; % corespunde la n=-1 până
la n=14
y = conv(x,x);
n=-1:14;
subplot(211)
stem(n,x)
subplot(212)
stem(n(1)+n(1):n(end)+n(end),y)
title('Exemplul 1')
ylabel('x[n]*v[n]')
xlabel('n')
1
0.8
0.6
0.4
0.2
0
-2 0 2 4 6 8 10 12 14
Exemplul 1
10
8
x[n]*v[n]
0
-5 0 5 10 15 20 25 30
n
Exemplul 2
Ilustrarea convoluţiei pentru semnale armonice discrete.
Se consideră două semnale discrete care au provenit din semnale
analogice cu frecvențe de 2 Hz și 5 Hz. Să se calculeze convoluția acestor
Suma de convoluţie
% Exemplul 2
clear all
close all
n=0:1/100:1;
x = sin(2*pi*2*n);
h = sin(2*pi*5*n);
y = conv(x,h);
subplot(311)
stem(n,h);
title('Exemplul 2')
ylabel('h[n]')
subplot(312)
stem(n,x)
ylabel('x[n]')
subplot(313)
stem(n,y(1:length(n)))
xlabel('n')
ylabel('y[n]')
-1
0 0.2 0.4 0.6 0.8 1
1
x[n]
-1
0 0.2 0.4 0.6 0.8 1
10
y[n]
-10
0 0.2 0.4 0.6 0.8 1
n
Exemplul 3
Ilustrarea convoluţiei pentru care indexul primelor elemente este 0.
% Exemplul 3
clear all
close all
a = input('Type in the first sequence = ');
b = input('Type in the second sequence = ');
c = conv(a, b);
M = length(c)-1;
n = 0:M;
disp('output sequence =');disp(c)
stem(n,c);
xlabel('Time index n');
ylabel('Amplitude');
title('Éxemplul 3')
Éxemplul 3
60
50
40
y(n)
30
20
10
0
0 2 4 6 8 10 12 14 16
n
Exemplul 4
Ilustrarea situaţiei în care indexul semnalului discret pentru primul
element este diferit de 0.
Suma de convoluţie
function [y,ny]=convolutie(x,h,nx,nh)
nxi=nx(1);
nxs=nx(end);
nhi=nh(1);
nhs=nh(end);
nyi=nxi+nhi;
nys=nxs+nhs;
ny=nyi:nys;
y=conv(x,h);
subplot(311)
stem(nx,x)
subplot(312)
stem(nh,h)
subplot(313)
stem(ny,y)
0.5
0
-3 -2 -1 0 1 2 3
1
0.5
0
-1 0 1 2 3 4
6
0
-4 -2 0 2 4 6 8
4 Aplicaţii propuse
Exercițiul 1
Se dau secvenţele:
1, daca n = 0,1,2,3,4,5
x[n] =
0, in rest
n + 1, daca n = 0,1,2
h[n] =
0, in rest
Exercițiul 2
Calculaţi analitic y[n] = x[n] ∗ h[n] şi verificaţi rezultatul,folosind
funcţia conv.m.
Arătaţi că operaţia de convoluţie este asociativă (se vor folosi
h ( n ) = 0,5n h2 ( n ) = 0,3n n = [1: 20]
semnalele 1 , , ).
Exercițiul 3
Universitatea de Medicină şi Farmacie Grigore T. Popa Iaşi
Facultatea de Bioinginerie Medicală
Lucrarea 6 105
Suma de convoluţie
Se dau secvenţele:
x[n] = u[n] − u[n − N ]
h[n] = α n ⋅ u[n]
a) Calculaţi convoluţia lor pe suportul n = [0,99] pentru cazurile
N = 50;α = 0,5 şi N = 50;α = 1 .
b) generaţi cu ajutorul programului MATLAB cele două secvenţe
pe suportul n = 0,99 şi calculaţi convoluţia lor liniară.
c) reprezentaţi grafic secvenţele x[n], h[n] , precum şi secvenţele
rezultate la punctul b).
Exercițiul 4
Să se scrie un program prin care să se arate că filtrarea este o operaţie
de convoluţie.
Exercițiul 5
Se consideră două semnale discrete x(n) și h(n).
3 = 4e3 − 1 + 3e3 − 2 + 2e3 − 3
ℎ3 = Ee3 + e3 − 1G/2
1. Să se calculeze manual convoluția celor două secvențe.
2. Scrieți un program MATLAB în care să se afișeze cele două
semnale
3. Calculați în acest program convoluția, utilizând comanda conv.
4. Afișați semnalele și rezultatul convoluției utilizând comanda
subplot.
5. Descrieți natura efectului răspunsului la impuls h(n).
1 Consideraţii teoretice
1.1 Funcţia de corelaţie şi funcţia de autocorelaţie a semnalelor
deterministe discrete
Corelaţia este o operaţie matematică care seamănă cu convoluţia
deoarece:
- pentru ambele operaţii sunt necesare două semnale;
- formulele lor de definiţie sunt asemănătoare.
Spre deosebire de convoluţie, obiectivul corelaţiei este acela de a
măsura gradul de similitudine dintre cele două semnale implicate.
Corelaţia este o operaţie utilă în multe aplicaţii ca: geologie, radar,
comunicaţii digitale, bioinginerie.
Fie două semnale discrete, x(n) şi y(n), pe care dorim să le
comparăm. Presupunem că ambele semnale sunt de energie finită.
Funcţia de corelaţie sau intercorelaţie dintre semnalele x(n) şi y(n)
este o secvenţă, notată rxy(l), care este definită cu relaţia:
∞ (1)
rxy (l ) = ∑ x(n )y (n − l ) , l∈Z
n = −∞
sau
∞ (2)
rxy (l ) = ∑ x(n + l )y (n ) , l∈Z .
n = −∞
∞ (3)
ryx (l ) = ∑ y(n )x(n − l )
n = −∞
∞ (7)
rxx (l ) = ∑ x(n )x(n − l ),
n = −∞
sau, cea echivalentă:
∞ (8)
rxx (− l ) = ∑ x(n + l )x(n)
n = −∞
N − k −1 (9)
rxy (l ) = ∑ x(n )y(n − l )
n=i
N − k −1 (10)
rxx (l ) = ∑ x(n )x(n − l ) ,
n=i
rxx (l ) (13)
ρ xx (l ) =
rxx (0)
rxy (l ) (14)
ρ xy (l ) =
rxx (0)ryy (0)
Evident,
ρ xx (l ) ≤ 1 si ρ xy (l ) ≤ 1 . (15)
- biased
- unbiased
- coeff normalizează secveţa atfel încât funcţia de autcorelaţie
este 1 pentru dacalaj 0.
[c,lags] = xcorr (A,B,’option’), returnează într-un vector c de
lungime 2M-1 funcţia de corelaţie, iar într-un vector lags decalajele
3 Aplicații rezolvate
3.1 Corelația unui semnal perturbat cu zgomot aditiv
Se consideră o secvență x(n) egală cu
1
Se folosesc funcții realizate în Lucrarea 6.
Universitatea de Medicină şi Farmacie Grigore T. Popa Iaşi
Facultatea de Bioinginerie Medicală
112 Lucrarea 7
800
X= 2
Y= 805.2102
600
400
200
-200
-400
-4 -2 0 2 4 6 8
(a)
600
400
200
-200
-400
-4 -2 0 2 4 6 8
(b)
Figura 1. Reprezentarea funcției de corelație dintre semnalul perturbat cu
zgomot aditiv și senalul întârziat
600
400
200
-200
-400
-6 -4 -2 0 2 4 6
2
S-a folosit exemplul din cartea Semmlow J., Signals and Systems for
Bioengineers: A MATLAB-based Introduction, Academic Press, 2011
Universitatea de Medicină şi Farmacie Grigore T. Popa Iaşi
Facultatea de Bioinginerie Medicală
116 Lucrarea 7
% lucrarea 7 -exemplul 2
clear all; close all;
fs = 1/0.0002; % frecventa de
esantionare
load neural_data.mat;
t = (1:length(x))/fs; % vectorul de timp
subplot(211);
plot(t,y,'r',t,x,':k');
xlabel('Timp(sec)','FontSize',14);
ylabel('x(t) si y(t)','FontSize',14);
[rxy,lags] = axcor(x,y); % calcul corelatie
cu axcor (functie realizata)
subplot (212);
plot(lags/fs,rxy,'k'); % and plot
crosscorrelation
xlabel('Timp (sec)','FontSize',14);
ylabel('rxy','FontSize',14)
[max_corr, max_shift] = max(rxy);
disp([max_corr lags(max_shift)/fs])
1
x(t) si y(t)
0.5
-0.5
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4
Timp(sec)
0.6
0.4
rxy
0.2
-0.2
-0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4
Timp (sec)
4 Desfăşurarea lucrării
Exercițiul 1
Să se scrie un program care să calculeze pas cu pas funcţia de
corelaţie a două secvenţe discrete şi să reprezinte grafic rezultatul obţinut.
Se vor considera ecvenţele: x(n) = [1 3 − 2 1 2 − 1 4 4 2] şi
y(n ) = [2 − 1 4 1 − 2 3] . Să se verifice rezultatul folosind funcţia
xcorr(A,B).
Exercițiul 2
Utilizând programul realizat să se calculeze şi să se afişeze funcţia de
autocorelaţie a secvenţei x(n) de la punctul precedent. Concluzii.
Exercițiul 3
Să se calculeze şi să se afişeze funcţia de corelaţie a secvenţei x(n) cu
y(n ) = x(n − 2) . Concluzii.
Exercițiul 4
Să se calculeze funcţia de autocorelaţie a secvenţei x(n) în situaţia în
care este perturbat aditiv cu un zgomot aleator (se va utiliza funcţia rand.
Concluzii.
Exercițiul 5
Să se determine perioada unei secvenţe armonice
x(n ) = cos(0.25πn ), 0 ≤ n ≤ 95 , pertubate aditiv cu un zgomot având
amplitudinea distribuită uniform în domeniul [-0,5, 0,5] .
Exercițiul 6
Se consideră fişierele s1base1.dat şi s1rotate1.dat. Să se vizualizeze
înregistrările EEG din fişierele existente.
ck = c N − k si ∠c k = −∠ c N − k (4)
adică:
c0 = cN si ∠c0 = −∠cN ,
c1 = cN −1 si ∠c1 = −∠cN −1 , (5)
M
cN = cN si ∠cN = 0, n par ,
2 2 2
Pentru un semnal real, este suficient să se afle spectrul ck, numai pentru
N (N par) și numai pentru N − 1 (N impar). Acest lucru este în
k = 0, k = 0,
2 2
concordanță cu faptul că domeniul pulsațiilor ω al semnalelor discrete
reale este [0, π ] 14.
Puterea medie a unui semnal discret periodic cu perioada N se
definește cu formula
În funcție de coeficienții seriei Fourier, puterea medie se poate scrie
N −1
2
Px = ∑ ck . (6)
n =0
2
Secvența ck pentru k = 0,1,…,N-1 este distribuția de putere în
funcție de frecvență și se numește spectrul densității de putere.
Referindu-ne doar la module, densitatea spectrală de putere nu conține
nici o informație despre fază.
Spectrul densității de putere a unui semnal discret periodic este
discret și periodic, cu periada egală cu cea a semnalului.
1.2 Transformata Fourier pentru semnale discrete aperiodice
Transformata Fourier a unui semnal discret aperiodic, notat x(n), se
defineşte ca:
14 N k
0≤k ≤ ⇒ 0 ≤ 2k ≤ N ⇒ 0 ≤ 2πk ≤ πN ⇒ 0 ≤ 2π ≤ π ⇒ 0 ≤ 2πf ≤ π ⇒ 0 ≤ ω ≤ π
2 N
∞
X (ω) = ∑ x (n )e − jωn . (7)
n = −∞
X(ω) reprezintă descompunerea semnalelor x(n) în domeniul
frecvenţă și este cunoscută sub denumirea de Transformata Fourier
Discretă (TFD, acronimul în limba engleză este DFT- Discrete Fourier
Transform).
Domeniul de frecvenţă al transformatei Fourier în cazul semnalelor
discrete este [− π, π] sau, echivalentul [0,2π]. X(ω) este periodică, cu
perioada 2π.
Deoarece semnalul este discret în timp, transformata Fourier a
semnalelor dicrete implică o sumă de termeni în loc de o integrală, ca în
cazul semnalelor analogice.
Notând cu xN şi XN vectorii corespunzători valorilor semnalului,
2π
−j
respectiv valorilor TFD a acestuia şi w N = e N
o rădăcină de ordin N a
unităţii, DFT în N puncte se exprimă în formă matriceală.
X N = WN ·xN (8)
unde WN este matricea transformării liniare, cu elementele
WN (i, k ) = ( wN ) .
ik
X (− ω ) = X (ω ) , (13)
∠X (− ω ) = −∠X (ω ) .
Decalarea în domeniu
x(n − k ) e − jωk X (ω)
timp
Reflexia în domeniul
x (− n ) X (− ω)
timp
Teorema Wiener-
rxx (l ) S xx (ω)
Khintchine
X (ω − ω0 )
Decalajul în domeniul
e jω0n x (n )
frecvenţă
1 1
Modularea x (n ) cos ω0 n X (ω + ω0 ) + X (ω − ω0 )
2 2
∞ ∞
Teorema lui Parseval ∑ x1 (n )x2∗ (n ) ∫ X1(ω )X 2 (ω )dω
∗
n =−∞ −∞
π
x1 (n )x 2 (n )
1
X 1 (λ ) X 2 (ω − λ )dλ
2π −∫π
Multiplicarea
Conjugata
x ∗ (n ) X ∗ (ω)
transformatei
clear all
close all
n=0:1/99:1;
x=sin(2*pi*15*n)+sin(2*40*pi*n);
X=fft(x);
a=fftshift(abs(X)); b=unwrap(angle(X));1
subplot(211),stem(a),subplot(212),stem(b)
50
40
30
20
10
0
0 20 40 60 80 100
-5
-10
-15
-20
0 20 40 60 80 100
3 Aplicaţii rezolvate
3.1 Exemplul 1- transformata Fourier discretă
% Exemplul 1
% Evalueaza DFT
clear all
close all
% Se calculeaza pulsatiile la care se evalueaza DFT
w = -4*pi:8*pi/511:4*pi;
num = [2 1];den = [1 -0.6];
h = freqz(num, den, w);
% Afisarea raspunsului in frecventa
subplot(2,1,1)
plot(w/pi,real(h));grid
title('Partea reala din H(omega})')
xlabel('\omega /\pi');
ylabel('Amplitudine');
subplot(2,1,2)
plot(w/pi,imag(h));grid
title('Partea imaginara din H(omega})')
xlabel('\omega /\pi');
ylabel('Amplitudine');
figure
subplot(2,1,1)
plot(w/pi,abs(h));grid
title('Spectrul de amplitudine |H(omega})|')
xlabel('\omega /\pi');
ylabel('Amplitudine');
subplot(2,1,2)
plot(w/pi,angle(h));grid
title('Spectrul de faza arg[H(omega})]')
xlabel('\omega /\pi');
ylabel('Faza in radiani');
Amplitudine 6
0
-4 -3 -2 -1 0 1 2 3 4
ω /π
Partea imaginara din H(omega})
4
2
Amplitudine
-2
-4
-4 -3 -2 -1 0 1 2 3 4
ω /π
(a)
6
Amplitudine
0
-4 -3 -2 -1 0 1 2 3 4
ω /π
Spectrul de faza arg[H(omega})]
2
Faza in radiani
-1
-2
-4 -3 -2 -1 0 1 2 3 4
ω /π
(b)
Figura 2. Modulul și faza transformatei Fourier discrete (Exemplul 1)
Modulul Transformatei Fourier a secventei initiale Modulul Transformatei Fourier a secventei deplasate
45 45
40 40
35 35
30 30
25 25
20 20
15 15
10 10
5 5
0 0
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
Faza Transformatei Fourier a secventei date Faza Transformatei Fourier a secventei deplasate
4 4
3 3
2 2
1 1
0 0
-1 -1
-2 -2
-3 -3
-4 -4
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
% Exemplul 3
% Proprietatea de deplasare in frecventa
clear all
close all
w = -pi:2*pi/255:pi;
wo = 0.4*pi;
x1=[1 2 3 4 5 6 7 8 9];
L = length(x1);
X1 = freqz(x1, 1, w);
n = 0:L-1;
x2 = exp(wo*i*n).*x1;
X2 = freqz(x2, 1, w);
subplot(221)
plot(w/pi,abs(X1));grid
title('Spectrul de amplitudine al secventei initiale')
subplot(222)
plot(w/pi,abs(X2));grid
title('Spectrul de amplitudine al secventei deplasate in
frecventa')
subplot(223)
plot(w/pi,angle(X1));grid
title('Spectrul de faza al secventei initiale')
subplot(224)
plot(w/pi,angle(X2));grid
title('Spectrul de faza al secventei deplasate in frecventa')
40 40
35 35
30 30
25 25
20 20
15 15
10 10
5 5
0 0
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
3 3
2 2
1 1
0 0
-1 -1
-2 -2
-3 -3
-4 -4
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
subplot(223)
plot(w/pi,abs(X));grid
title('Modulul DFT a convolutiei dintre cele doua secvente')
subplot(224)
plot(w/pi,angle(Y));grid
title('Faza DFT a convolutiei')
Modulul produsului dintre DFT ale celor doua secvente Faza produsului dintre DFT ale celor doua secvente
90 4
80 3
70 2
60 1
50 0
40 -1
30 -2
20 -3
10 -4
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
Modulul DFT a convolutiei dintre cele doua secvente Faza DFT a convolutiei
90 4
80 3
70 2
60 1
50 0
40 -1
30 -2
20 -3
10 -4
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
% Exemplul 5
% Proprietatea de multiplicare
clear all
close all
w = -pi:2*pi/255:pi;
x1 = [1 2 3 4 5 6 7 8 9];
x2 = [1 1 1 -2 1 2 3 4 1];
y = x1.*x2;
X1 = freqz(x1, 1, w);
X2 = freqz(x2, 1, w);
Y = freqz(y,1,w);% transformata Fourier a produsului
subplot(311)
plot(w/pi,abs(X1));grid
title('Modulul DFT a secventei x1')
subplot(312)
plot(w/pi,abs(X2));grid
title('Modulul DFT a secventei x2')
subplot(313)
plot(w/pi,abs(Y));grid
title('Modulul DFT a produsului celor doua secvente')
0
-1 -0.5 0 0.5 1
Modulul DFT a secventei x2
20
10
0
-1 -0.5 0 0.5 1
Modulul DFT a produsului celor doua secvente
100
50
0
-1 -0.5 0 0.5 1
% Exemplul 6
% Proprietatea de inversare in timp
clear all
close all
w = -pi:2*pi/255:pi;
x = [1 2 3 4 5 6 7 8 9];
L = length(x)-1;
X1 = freqz(x, 1, w);
X2 = freqz(fliplr(x), 1, w); %vezi fliplr.m
X3 = exp(w*L*i).*X2;
subplot(221)
plot(w/pi,abs(X1));grid
title('Modulul DFT a secventei originale')
subplot(222)
plot(w/pi,angle(X1));grid
title('Faza DFT a secventei originale ')
subplot(223)
plot(w/pi,abs(X3));grid
title(' Modulul DFT a secventei reflectate')
subplot(224)
plot(w/pi,angle(X3));grid
title('Faza DFT a secventei reflectate')
10 -2
0 -4
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
10 -2
0 -4
-1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
3.7 Exemplul 7. - relaţiile dintre DFT ale părţilor pare şi impare ale
secvenţelor reale periodice
Se reprezintă grafic partea reală şi cea imaginară a spectrului unei
secvenţe x(n) şi a spectrului părţii pare a acestei secvenţe:
1
xe (n ) = ( x (n ) + x (− n )) .
2
% Program P6_11
% Relatiile dintre DFT ale partilor pare
% si impare a secventelor reale
x = [1 2 4 2 6 32 6 4 2 zeros(1,247)];
x1 = [x(1) x(256:-1:2)];
xe = 0.5 *(x + x1);
XF = fft(x);
XEF = fft(xe);
clf;
k = 0:255;
subplot(2,2,1);
plot(k/128,real(XF)); grid;
ylabel('Amplitudine');
title('Re(DFT\{x[n]\})');
subplot(2,2,2);
plot(k/128,imag(XF)); grid;
ylabel('Amplitudine');
title('Im(DFT\{x[n]\})');
subplot(2,2,3);
plot(k/128,real(XEF)); grid;
xlabel('n');ylabel('Amplitudine');
title('Re(DFT\{x_{e}[n]\})');
subplot(2,2,4);
plot(k/128,imag(XEF)); grid; axis([0 2 -100 100])
xlabel('n');ylabel('Amplitudine');
title('Im(DFT\{x_{e}[n]\})');
% Program P6_12
% Echivalenta energiilor
x = [(1:128) (128:-1:1)];
XF = fft(x);
a = sum(x.*x)
b = round(sum(abs(XF).^2)/256)
% Lucrarea 8_exemplul 12
clear all;
close all;
Universitatea de Medicină şi Farmacie Grigore T. Popa Iaşi
Facultatea de Bioinginerie Medicală
136 Lucrarea 8
load Resp
Fs = 125;
max_freq = 2; % frecvenat max pentru afisare
N = length(resp);
f = (1:N)*fs/N; % vectorul de frecventa
t = (1:N)/fs; % vectorul de timp
plot(t,resp,'k');
xlabel('Timp (sec)','FontSize',14);
ylabel('Respiratie','FontSize',14);
figure;
X = fft(resp);
m_plot = round(max_freq/(fs/N)); % m pentru frecv 2Hz
subplot(211);
plot(f(1:m_plot-1),abs(X(2:m_plot)),'k');
xlabel('Frequency (Hz)','FontSize',14);
ylabel('|X(f)|','FontSize',14);
phase = unwrap(angle(X));
phase = phase * 360/(2*pi);
subplot(212);
plot(f(1:m_plot-1),phase(2:m_plot),'k');
xlabel('Frequency (Hz)','FontSize',14);
ylabel('|X(f)|','FontSize',14);
[peak m_peak] = max(abs(X(2:m_plot)));
max_freq = f(m_peak)
max_time = 1/max_freq
breath_min = 60/max_time
Respiratie
1.1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0 10 20 30 40 50 60
Timp (sec)
30
spectrul de amplitudine
20
10
0
0 0.5 1 1.5 2
Frecventa (Hz)
2000
spectrul de faza
1000
-1000
-2000
0 0.5 1 1.5 2
Frecventa(Hz)
clear all
close all
fs = 44100; % the signal is known to have been recorded at
this rate
bass_guitar = wavread('bass.wav', 5*fs); %read in first 5
seconds; fs = 44100Hz
ft = fft(bass_guitar);
mag_ft = abs(ft);
plot(mag_ft) % plot magnitudes versus frequency bins
ylabel('Magnitude/Amplitude')
xlabel('Bin Number')
low_freq_mags = mag_ft(1:2000); %the magnitudes of the low
freq content are stored in a new variable
%Note: 2000 in the above command corresponds to
2000/length(mag_ft)*fs = 400Hz
figure
plot(low_freq_mags);
ylabel('Magnitude/Amplitude')
xlabel('Bin Number')
N = length(mag_ft);
freq_scale = 0:fs/(N-1):fs;
figure
plot(freq_scale, mag_ft);
ylabel('Magnitude/Amplitude')
xlabel('Frequency (Hz)')
low_mag_freq_scale = freq_scale(1:length(low_freq_mags));
figure
plot(low_mag_freq_scale, low_freq_mags);
ylabel('Magnitude/Amplitude')
xlabel('Frequency (Hz)')
figure
plot(bass_guitar);
15
http://eleceng.dit.ie/dorran/matlab/problems/hardware_demo/
ylabel('Amplitude')
xlabel('Sample Number')
first_note = bass_guitar(1:38000); %exrtact the first note
from the signal
ft_first_note = fft(first_note);
mags = abs(ft_first_note);
freq_scale = 0: fs/(length(mags) -1) : fs;
low_freq_bin_range = length(mags)*(400/44100);
low_freq_mags = mags(1:low_freq_bin_range);
low_freq_scale = freq_scale(1: low_freq_bin_range);
figure
plot(low_freq_scale, low_freq_mags)
ylabel('Magnitude/Amplitude')
xlabel('Frequency (Hz)')
0.3
0.2
0.1
Amplitude
-0.1
-0.2
-0.3
-0.4
0 0.5 1 1.5 2 2.5
Sample Number 5
x 10
5000
4500
4000
3500
Magnitude/Amplitude
3000
2500
2000
1500
1000
500
0
0 50 100 150 200 250 300 350 400
Frequency (Hz)
2000
1800
1600
1400
Magnitude/Amplitude
1200
1000
800
600
400
200
0
0 50 100 150 200 250 300 350 400
Frequency (Hz)
4 Desfăşurarea lucrării
Exercițiul 1
Calculaţi şi vizualizaţi spectrul secvenţei 1D:
1, n = 0,7
x (n ) =
0, in rest
Exercițiul 2
Calculaţi şi vizualizaţi TFD în N=50 de puncte ale unei secvenţe 1D
cosinusoidale cu frecvenţa f0=2,25/50, folosind secvenţe de comenzi
MATLAB16.
Exercițiul 3
Se dau două secvenţe 1D:
x=[0, 0.25, 0.5, 0.75, 1]
h=[0, 0.5, 1, 0.5, 0]
Calculaţi produsul transformatelor lor Fourier discrete şi transformaţi
apoi invers acest produs în domeniul timp.
Exercițiul 4
Scrieţi un program în MATLAB care să permită calculul convoluţiei
liniare a două secvenţe prin intermediul transformatei Fourier discrete.
Exercițiul 5
Se consideră un semnal analogic xa(t).
16
Să se verifice efectul comenzii:
n1=length(x);
y2=x*dftmtx(n1).
17
A se vedea in MATLAB comanda randn (n,m)
Universitatea de Medicină şi Farmacie Grigore T. Popa Iaşi
Facultatea de Bioinginerie Medicală
142 Lucrarea 8
Exercițiul 6
De consideră secvenţa:
n n ∈ N
x (n ) = cu N = 8 .
0 in rest
Să se verifice următoarele proprietăţi ale transformatei Fourier
discrete:
• decalajul în timp
• inversiunea în timp
• decalajul în frecvenţă
• modularea
filtru FIR are o fază liniară dacă şi numai dacă răspunsului la impuls, h[n]
, satisface condiţia:
h (n ) = ± h (M − 1 − n ) , n = 0, M − 1 ,
relaţie cunoscută şi sub numele de condiţia de liniaritate a lui Gibbs.
Filtrele pentru care este îndeplinită condiţia de simetrie (h(n)=h(M-1-
n)) sunt utilizate, în general, pentru filtrare propriu-zisă, pe când cele
pentru care este îndeplinită condiţia de asimetrie (h(n)=-h((M-1-n))sunt
utilizate în aplicaţii cu defazare (integrator, diferenţiator, transformator
Hilbert).
1.2 Metode de aproximare a filtrelor FIR
Metodele de aproximare ale funcţiei de transfer folosite în cazul
filtrelor FIR sunt:
1) metoda ferestrelor de timp;
2) metoda eşantionării în frecvenţă;
3) metoda optimală.
1.2.1 Metoda ferestrelor
Etapele de proiectare în cazul metodei ferestrelor sunt:
10 Specificarea răspunsului în frecvenţă ideal (dorit), notat H d (ω )
(atenuarea în banda de oprire, atenuarea în banda de trecere şi frecvenţele
capetelor de bandă).
20 Obţinerea impulsului la impuls hd [n ] prin calcularea transformatei
Fourier inverse:
π
1
hd [n ] = ∫ H d (ω )e
j ωn
dω ,
2π −π
Pentru filtrele selective de frecvenţă expresia pentru hd [n ] este dat ă
în tabelul 1.
Hamming 2 πn
0.54 + 0.46 cos
N
Blackman 2πn 4πn
0.42 + 0.5 cos + 0.08 cos
N N
2
Kaiser 2n
J 0 β 1 − J 0( β )
N − 1
n=0
j 2 π(k + α )n
1 M −1
h (n ) = ∑ H (k + α )e M n = 0, M − 1 ,
M k =0
Dacă h(n ) este real, se observă ca eşantioanele în frecvenţă
H (k + α ) satisfac proprietatea de simetrie:
H (k + α ) = H ∗ (M − k − α ) ,
Această condiţie împreună cu cea pentru h(n ) face ca numărul de
puncte în care se precizează H (ω ) să se reducă la (M + 1)/2 dacă M este
impar şi la M/2 dacă M este par.
Există patru situaţii posibile:
1. h[n] simetric, α=0
2. h[n] simetric, α=1/2
3. h[n] antisimetric, α=0
4. h[n] antisimetric, α=1/2.
Pentru fiecare situaţie se stabileşte relaţia pentru răspunsul la impuls
h(n ) .
Avantajul metodei eşantionării în frecvenţă constă în structura de
eşantionare eficientă atunci când multe din eşantioanele în frecvenţă sunt
zero.
1.2.3 Metoda optimală
În scopul minimizării erorii se pot utiliza 1-3 eşantioane suplimentare
situate în banda de tranziţie. Aceste se folosesc într-un procedeu de
optimizare, numit metoda celor mai mici pătrate.
O altă metodă folosită pentru proiectarea filtrelor FIR prin metoda
optimizării este metoda lui Remez.
2 Implementarea în MATLAB a filtrelor FIR
A. Metoda ferestrelor şi a eşantionării în frecvenţă
Pentru proiectarea filtrelor FIR cu ajutorul metodei ferestrelor şi a
eşantionării în frecvenţă se folosesc următoarele funcţii:
1
boxcar- pentru fereastra dreptunghiulară; blackman- pentru fereastra Blackman;
bartlett- pentru fereastra Bartlett; hamming- pentru fereastra Hamming; hann pentru
fereastra Hanning; kaiser- pentru fereastra Kaiser; pentru o listă completă a funcțiilor
fereastră utilizate se va folosi help-ul pentru funcția window
%lucrarea 9-exemplul 1
% proiectarea unui filtru FTJ, FIR cu fereastra kaiser
% lungime = 61, Beta = 4.533514
clear all
close all
kw = kaiser(61,4.533514);
b = fir1(60,0.3,kw);
[h,omega] = freqz(b,1,512);
mag = 20*log10(abs(h));
plot(omega/pi,mag);axis([0 1 -80 5]); grid
xlabel('\omega/\pi'); ylabel('Castig (dB)')
title('Filtru trece jos FIR proiectat cu o fereastra Kaiser')
-10
-20
-30
Castig (dB)
-40
-50
-60
-70
-80
0 0.2 0.4 0.6 0.8 1
ω/π
%lucrare9_exemplul2
clear all
close all
b=fir1(64,[0.3 0.6]);
freqz(b,1);
x=[1 zeros(1,99)] ;
y=filter(b,1,x);
figure
stem(y)
title('Raspunsul la impuls')
xlabel('n')
50
Magnitude (dB)
-50
-100
-150
0 0.2 0.4 0.6 0.8 1
Normalized Frequency (×π rad/sample)
1000
Phase (degrees)
-1000
-2000
-3000
0 0.2 0.4 0.6 0.8 1
Normalized Frequency (×π rad/sample)
Raspunsul la impuls
0.3
0.2
0.1
-0.1
-0.2
-0.3
-0.4
0 20 40 60 80 100
n
5
Magnitude (dB)
-5
-10
-15
0 0.2 0.4 0.6 0.8 1
Normalized Frequency (×π rad/sample)
0
-2000
Phase (degrees)
-4000
-6000
-8000
-10000
0 0.2 0.4 0.6 0.8 1
Normalized Frequency (×π rad/sample)
(a)
Raspunsul in amplitudine al filtrului FIR
1.2
0.8
Amplitudine
0.6
0.4
0.2
0
0 0.2 0.4 0.6 0.8 1
ω/π
(b)
Figura 4. Răspunsul în frecvență al filtrului FIR
proiectat cu metoda eșantionării în frecvență (exemplul 3)
Universitatea de Medicină şi Farmacie Grigore T. Popa Iaşi
Facultatea de Bioinginerie Medicală
Lucrarea 9 155
2
Este o funcție depășită, care în variantele noi de MATLAB este numită
firpmord.m (are aceeași descriere ca remezord.m)
Universitatea de Medicină şi Farmacie Grigore T. Popa Iaşi
Facultatea de Bioinginerie Medicală
Lucrarea 9 157
3
Este o funcție depășită, care în variantele noi de MATLAB este numită firpm.m
(are aceeași descriere ca remez.m)
% lucrarea 9- exemplul 4
% proiectarea unui filtru FIR cu faza liniara prin metoda
optimala (equiripple)
% Estimarea ordinului
clear all
close all
fedge=input('Frecventele benzilor de trecere si de taiere =
');
mag=input('amplitudinile dorite in fiecare banda = ');
dev=input('deviatia permisa in fiecare banda = ');
FS=input('Frecventa de esantionare = ');
[n, fo, mo, w]=firpmord(fedge,mag,dev,FS);
fprintf('Ordinul filtrului este %f \n',n);
% proiectarea filtrului (aflarea coeficientilor b)
b = firpm(n,fo,mo,w);
Raspunsul in amplitudine
5
-5
-10
Castig (dB)
-15
-20
-25
-30
-35
-40
0 0.2 0.4 0.6 0.8 1
ω/π
Exemplul 5
Să se filtreze trece jos cu un filtru FIR un semnal produs de
respirație, înregistrat pe o durată de 10 min, și care se găsește în
% lucrarea 9-exemplul 5
% ferestra dreptunghiulara si fereastra Blackman
% lungimea ferestrelor L = 17 si L = 65.
% frecventa de taiere normalizata este Fcn=Fc/(Fs/2)
close all;
clear all;
load('Resp.mat');
N = 1024; % numarul punctelor pentru afisare
Fs = 12.5;
f = (1:N)*Fs/N; % vectorul frecventelor pentru afisare
Fc = 2/Fs; % frecventa de taiere normalizata
L = [17 65];
for m = 1:2
L1 = L(m)-1; % L1 par
for k = 1:L(m) % generare functia sin(n)/n
n = k-L1/2 ; % n = k - L1/2 unde L1 par
if n == 0
b(k) = 2*Fc; % caz in care numitorul este 0
else
b(k) = sin(2*pi*Fc*n)/(pi*n); % raspunsul la impuls
end
end
%hn = hn .* blackman(L+1)';
H = fft(b,N);
figure(1)
subplot(1,2,m);
plot(f(1:N/2),abs(H(1:N/2)),'k');
text(2,.9,['lungime = ',num2str(L(m))],'FontSize',12);
xlabel('Frecventa (Hz)','FontSize',14);
axis([0 Fs/2 0 1.2]);
ylabel('B(f)','FontSize',14);
4
S-a folosit exemplul din cartea Semmlow J., Signals and Systems for
Bioengineers: A MATLAB-based Introduction, Academic Press, 2011
figure(2)
subplot(2,1,1)
plot(resp)
axis tight
title('semnal nefiltrat')
y=filter(b,1,resp)
subplot(2,1,2)
plot(y)
text(200,.9,['fereastra dreptunghiulara lungime =
',num2str(L(m))],'FontSize',12);
title('semnal filtrat')
axis tight
pause
end
close all;
clear all;
load('Resp.mat');
N = 1024;
Fs = 12.5;
f = (1:N)*Fs/N;
Fc = 2/Fs;
L = [17 65];
figure
for m = 1:2
L1 = L(m)-1;
for k = 1:L(m)
n = k-L1/2 ;
if n == 0
b(k) = 2*Fc;
else
b(k) = (sin(2*pi*Fc*n))/(pi*n);
end
end
wb = blackman(L(m));
b = b .* wb;
H = fft(b,N);
figure(1)
subplot(1,2,m);
plot(f(1:N/2),abs(H(1:N/2)),'k');
text(2,.9,['Length = ',num2str(L(m))],'FontSize',12);
xlabel('Frecventa (Hz)','FontSize',12);
axis([0 Fs/2 0 1.2]);
ylabel('B(f)','FontSize',12);
figure(2)
subplot(2,1,1)
plot(resp)
axis tight
title('semnal nefiltrat')
y=filter(b,1,resp)
subplot(2,1,2)
plot(y)
text(200,.9,['fereastra dreptunghiulara lungime =
',num2str(L(m))],'FontSize',12);
title('semnal filtrat')
axis tight
pause
end
1 1
lungime = 17 lungime = 65
0.8 0.8
B(f)
B(f)
0.6 0.6
0.4 0.4
0.2 0.2
0 0
0 2 4 6 0 2 4 6
Frecventa (Hz) Frecventa (Hz)
semnal nefiltrat
1
0.8
0.6
0.4
0.2
100 200 300 400 500 600 700
semnal filtrat
1
fereastra dreptunghiulara lungime = 17
0.8
0.6
0.4
0.2
0
100 200 300 400 500 600 700
semnal nefiltrat
1
0.8
0.6
0.4
0.2
100 200 300 400 500 600 700
semnal filtrat
1
fereastra dreptunghiulara lungime = 65
0.8
0.6
0.4
0.2
0
100 200 300 400 500 600 700
1.2 1.2
1 1
Length = 17 Length = 65
0.8 0.8
B(f)
B(f)
0.6 0.6
0.4 0.4
0.2 0.2
0 0
0 2 4 6 0 2 4 6
Frecventa (Hz) Frecventa (Hz)
semnal nefiltrat
1
0.8
0.6
0.4
0.2
100 200 300 400 500 600 700
semnal filtrat
0.8
fereastra dreptunghiulara lungime = 17
0.6
0.4
0.2
0
100 200 300 400 500 600 700
semnal nefiltrat
1
0.8
0.6
0.4
0.2
100 200 300 400 500 600 700
semnal filtrat
1
fereastra dreptunghiulara lungime = 65
0.8
0.6
0.4
0.2
0
100 200 300 400 500 600 700
%lucrare9_exemplul 3-var 2
%lucrare9_exemplul 3-var 2
close all; clear all;
load Resp;
N = length(resp);
Fs = 12.5;
t = (1:N)/Fs;
L = 65;
Fc = 1;
plot(t,resp+1,'k'); hold on;
wb = blackman(L);
b=fir1(L-1,Fc/(Fs/2),wb)
y = conv(resp,b,'same');
subplot(211)
plot(resp,'r'),axis tight
title('semnal nefiltrat')
subplot(212)
plot(t,y,'k');axis tight
title('semnal filtrat')
xlabel('Timp (sec)','FontSize',14);
semnal nefiltrat
1
0.8
0.6
0.4
0.2
100 200 300 400 500 600 700
semnal filtrat
1
0.8
0.6
0.4
0.2
10 20 30 40 50
Timp (sec)
Exemplul 6
Să se filtreze trece bandă un semnal EEG care se află slavat în
fișierul eeg.mat. Frecvențele benzii de trecere sunt 6 Hz și 12 Hz. Se va
ultiliza o fereastră Blackman de lungime 129. Frecvența de eșantionare
este de 200 Hz.
Se vor afișa semnalul nefiltrat și cel filtrat.
După realizarea codului, se obține reprezentarile din Figura 13 și
Figura 14.
5
x 10
EEG 5
-5
0 1 2 3 4 5
Timp (sec)
5
x 10
semnal EEG filtrat
-2
-4
0 1 2 3 4 5
Timp (sec)
Figura 13. Semnalul EEG nefiltrat și filtrat cu ferestra Blackman de lungime 129
7
x 10
2.5
2
Amplitudine
1.5
0.5
0
0 5 10 15 20 25
Frecventa (Hz)
(a)
(b)
Figura 15 Instrumentul pentru proiectarea și analiza ferestrelor
0.8 0
Magnitude (dB)
Amplitude
-20
0.6
-40
0.4
-60
0.2
-80
0 -100
10 20 30 40 50 60 0 0.2 0.4 0.6 0.8
Samples Normalized Frequency ( ×π rad/sample)
(a)
(b)
Figura 17 Instrumentul pentru proiectarea și analiza filtrelor
3 Desfăşurarea lucrării
1. Exercițiul 1
Să se reprezinte grafic ferestrele dreptunghiulară, triunghiulară,
Hanning, Hamming, Blackman şi Kaiser (pentru diferite valori ale lui β )
utilizând comenzile: rectwin, bartlett, hanning, hamming, blackman şi
kaiser. Să se determine şi să se reprezinte modulul răspunsului în
frecvenţă al acestora. Să se remarce valorile lobilor secundari. Trageţi
concluzii cu privire la efectul acestor ferestre în proiectarea filtrelor FIR.
2. Exercițiul 2
Să se studieze posibilitățile interfeței wintool pentru proiectarea și
analiza spectrală a diferitelor ferestre.
3. Exercițiul 3
Să se conceapă un filtru FIR, de tip FTB, de ordinul 25, prin metoda
ferestrelor (fereastră dreptunghiulară, Bartlett, Blackman, Hamming,
Hanning, Kaiser), având limitele benzii de trecere Fp1=12 kHz şi Fp2=16
kHz. Se consideră o frecvenţă de eşantionare de FS=96 kHz.
Pentru fiecare tip de fereastră să se reprezinte:
- răspunsul în frecvenţă al filtrului;
- răspunsul la impuls;
- distribuţia zerourilor ;
Să se compare răspunsurile în frecvenţă şi să se precizeze ce fereastră
asigură cea mai îngustă bandă de tranziţie.
Comentaţi forma răspunsului la impuls şi distribuţia zerourilor sale.
4. Exercițiul 4
Să se scrie programul afferent exemplului 6 exemplificat în
paragraful anterior.
5. Exercițiul 5
Să se proiecteze un filtru FIR, de tip FTS, de ordinul 48, prin metoda
eşantionării în frecvenţă, având frecvenţa limită a benzii de trecere Fp=10
kHz. Frecvenţa de eşantionare este Fs =30 kHz. Să se reprezinte răspunsul
în frecvenţă al filtrului, precum şi localizarea zerourilor sale.
6. Exercițiul 6
Să se proiecteze un filtru FTJ având ordin minim, cu frecvenţa de
tăiere din banda de trecere de Fp1=500 Hz şi frecvenţa din banda de
oprire de Fo1=600 Hz, având o frecvenţă de eşantionare Fs= 2000 Hz, o
atenuare de cel puţin 40 dB în banda de oprire şi de cel mult 3 dB în
banda de trecere.
7. Exercițiul 7
Să se aplice metoda Remez pentru a se determina ordinul unui filtru
utilizat pentru a separa un semnal sinusoidal de frecvenţă F1=3 kHz de un
altul de frecvenţă F2=3,5 kHz. Eşantionarea se face cu frecvenţa de 15
kHz.
Să se reprezinte amplitudinea şi faza funcţiei de transfer, iar apoi să
se studieze efectul filtrării cu filtrul proiectat asupra semnalului iniţial
(suma celor două semnale sinusoidale).
8. Exercițiul 8
Să se poiecteze un filtru FIR, având aceleaşi cerinţe ca cele
specificate la punctul 1, utilizând interfaţa grafică sptool.
β (s )
M
B (s ) ∑
k
k
H (s ) = = k =0
, M ≤ N , (4)
A(s ) N
∑α s k =0
k
k
N
d k y (t ) M d k x (t )
∑
h=0
αk
dt h
= ∑ βk
h =0 dt h
, (6)
x = [1 2 3 4 5 6 7 8 9] ;
b = [0.3 1.5];
a = [1 -0.6];
y = filter(b, a, x);
h = impz(b,a);
y2 = conv(x,h);
x = [ 1 2 3 4 5 6 7 8 9] ;
b = [0.3 1.5];
a = [1 -0.6];
h = filter(b,a,[ 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);
% sau impz
num_bins = length(x) + length(h);
H = fft(h, num_bins);
X = fft(x, num_bins);
Y = X.*H;
y3 = ifft(Y);
y3 = real(y3);
δS
zh = e Pk T h = 1,2,....N , (11)
Cu această expresie (11) a funcţiei de transfer, un filtru IIR se
realizează uşor ca un _bank" paralel de filtre cu un singur pol. Dacă unii
din poli sunt valori complexe, ei apar în perechi complex conjugate şi se
combină spre a forma un filtru cu doi poli.
În consecinţă filtrul rezultant poate fi realizat ca un _bank" paralel de
filtre cu doi poli.
Relaţia (11) poate fi generalizată şi pentru situaţia în care polii sunt
multipli.
Paşii ce trebuie parcurşi în proiectarea filtrelor cu răspuns finit la
impuls IIR folosind metoda invarianţei la impuls sunt:
a) Se determină funcţia de transfer a filtrului analogic care satisface
specificaţiile filtrului digital dorit.
b) Se dezvoltă H(s) în fracţii simple.
c) Se obţine transformata z pentru fiecare fracţie simplă.
d) Se obţine H(z) ca sumă de funcţii de transfer H(z) cu polii simpli
sau dubli.
Metoda invariantei la impuls este potrivită pentru proiectarea filtrelor
FTJ, FTB şi, datorită fenomenului de aliasing, este inadecvată pentru
proiectarea FTS.
1.3.2 Metoda transformării biliniare
Se descrie o transformare din planul s în planul z, numită
transformată biliniară. Este una din cele mai eficiente metode de
proiectare a filtrelor IIR, obţinându-se un răspuns în frecvenţă care
aproximează cât mai fidel filtrul analogic din care provine şi în acelaşi
timp proiectarea este simplă.
Transformata biliniară transformată axa jΩ în cercul unitate doar o
singură dată, evitându-se astfel fenomenul de aliasing. În plus, toate
punctele din semiplanul stâng trec în interiorul cercului unitate în planul z
şi toate punctele din semiplanul drept al planului s trec în puncte
corespunzătoare din exteriorul cercului unitate din planul z.
Se consideră un filtru liniar analogic pentru care funcţia de transfer
este:
H (s ) =
b
, (12)
s+a
Sistemul este caracterizat şi prin ecuaţia diferenţială:
dy (t )
+ ay (t ) = bx(t ) , (13)
dt
Pornind de la această ecuaţie se obţine funcţia de transfer a filtrului
digital ca fiind:
H (z ) =
b
, (14)
2 1 − z −1
+a
T 1 + z −1
Evident, relaţia care face trecerea de la planul s la planul z este:
2 1 − z −1
s= , (15)
T 1 + z −1
Aceasta este numită transformarea biliniară.
Pentru a studia caracteristicile transformăriii biliniare înlocuim
z = re jω si s = σ + jΩ , (16)
în (16) şi se obţine:
2 r2 −1
σ=
T 1 + r 2 + 2r cos ω , (17)
2 2 r sin ω
Ω=
T 1 + r 2 + 2 r cos ω
Dacă r < 1 atunci σ < 0 şi dacă r > 1 atunci σ > 0. Deci semiplanul
stâng din s trece în interiorul cercului unitate şi semiplanul drept al
planului s în exteriorul cercului unitate în planul z.
Dacă r = 1 atunci σ = 0 şi
2 sin ω 2 ω
Ω= = tg , (18)
T 1 + cosω T 2
sau echivalent:
ΩT
ω = 2 arctg , (19)
2
Se observă că intregul domeniu pentru Ω trece o singură dată în
domeniul -π ≤ ω ≤ π. În schimb această conversie este puternic neliniară.
Universitatea de Medicină şi Farmacie Grigore T. Popa Iaşi
Facultatea de Bioinginerie Medicală
184 Lucrarea 10
De exemplu:
• [z,p,k]=buttap(n) returnează zerourile, polii şi câştigul pentru
un filtru analogic FTJ de tip Butterworth, normalizat, de ordin
n. Filtrul realizat are n poli în afara cercului unitate în
semiplanul stâng şi nici un zerou.
• [z,p,k]=cheb1ap(n,Rp) returnează zerourile, polii şi câştigul
pentru un filtru analogic FTJ, de tip Chebyshev I, normalizat,
de ordin n, cu un riplu de Rp dB în banda de trecere. Filtrele
Chebyshev I au un maxim plat în banda de oprire.
• [z,p,k]=cheb2ap(n,Rs) returnează zerourile, polii şi câştigul
pentru un filtru analogic FTJ, de tip Chebyshev I, normalizat,
de ordin n, cu un riplu de Rs dB în banda de oprire. Filtrele
Chebyshev II au un maxim plat în banda de trecere.
• [z,p,k]=ellipap(n,Rp,Rs) returnează zerourile, polii şi câştigul
pentru un filtru analogic FTJ, eliptic, normalizat, de ordin n,
cu un riplu de Rp dB în banda de trecere şI un riplu de Rs dB
în banda de oprire.
ori mai mare decât cel al filtrului prototip. Pentru lp2lp şi lp2hp ordinul
filtrului de ieşire este ecelaşi ca al celui de intrare.
Exemplul 1. Să se proiecteze un filtru FTB analogic, de tip
Chebyshev I, de ordin 5, având riplul în banda de trecere de 3 dB.
0
10
-1
10
-2
10
-3
10
-4
10
-5
10
-6
10
-7
10
0 0.5 1 1.5 2 2.5 3 3.5
freqz(bz,az)
-50
-100
-150
0 0.2 0.4 0.6 0.8 1
Normalized Frequency (×π rad/sample)
800
600
Phase (degrees)
400
200
0
-200
0 0.2 0.4 0.6 0.8 1
Normalized Frequency (×π rad/sample)
Fiecare din cele trei forme de mai sus pentru bilinear acceptă un
argument de intrare opţional ce reprezintă frecvenţa Fp ce se “potiveşte”.
ΩT
Daca în relaţia ω = 2 arctg care reprezintă transformarea biliniară în
2
Fp
loc de T 2 ( 1 2 Fs ) se introduce 2πFp tgπ atunci transformarea
Fs
Fp
biliniară trece frecvenţa Fp din domeniul analogic în frecvenţa f p =
Fs
din domeniul discret.
0
Magnitude (dB)
-100
-200
-300
0 0.2 0.4 0.6 0.8 1
Normalized Frequency (×π rad/sample)
1000
Phase (degrees)
500
-500
0 0.2 0.4 0.6 0.8 1
Normalized Frequency (×π rad/sample)
Magnitude (dB) 0
-100
-200
-300
0 0.2 0.4 0.6 0.8 1
Normalized Frequency (×π rad/sample)
500
Phase (degrees)
-500
-1000
0 0.2 0.4 0.6 0.8 1
Normalized Frequency (×π rad/sample)
1
Se vor urmări descrierile funcțiilor din help
Universitatea de Medicină şi Farmacie Grigore T. Popa Iaşi
Facultatea de Bioinginerie Medicală
194 Lucrarea 10
0
Magnitude (dB)
-100
-200
-300
0 0.2 0.4 0.6 0.8 1
Normalized Frequency (×π rad/sample)
500
Phase (degrees)
-500
-1000
0 0.2 0.4 0.6 0.8 1
Normalized Frequency (×π rad/sample)
Exemplul 5
2
Mohandas Choudhary, Ravindra Pratap Narwaria, Suppression of Noise in ECG Signal
Using Low pass IIR Filters,
Universitatea de Medicină şi Farmacie Grigore T. Popa Iaşi
Facultatea de Bioinginerie Medicală
Lucrarea 10 197
(a)
(b)
(c)
Figure 6. Răspunsul în amplitudine al filtrelor
Butterworth, Chebyshev Type-I și Chebyshev Type-II (Exemplul 6)
4. Desfăşurarea lucrării
1. Concepeţi un filtru digital FTJ, de tipIIR, cu frecvenţa de
eşantionare de 1 Hz, cu o atenuare maximă de 0.75 dB în banda de trecere
(0,0.12944 Hz) şi de cel putin 20 dB în banda de oprire (frecvenţe mai
mari de 0.201 Hz). Determinaţi polii filtrului analogic echivalent asociat
de tip Butterworth.
2. Concepeţi un filtru digital prin metoda transformării biliniare,
care să în deplinească următoarele condiţii:
• Frecvenţa de eşantionare de Fs=1 Hz;
• Atenuarea de 0 dB pentru frecvenţa nulă;
• Atenuarea maximă de 1 dB pentru frecvenţa de 0,1 Hz;
• O atenuare minimă de 15 dB pentru frecvenţa de 0,15 Hz.
Concepeţi acest filtru, folosind modelele FTJ de tip
Butterworth şi Chebyshev.