You are on page 1of 38

_____________________________________________________________________________________

Upatstvo za laboratoriski ve`bi po predmetot


Digitalno rocesirawe na ignali
Voved vo MATLAB
Celta na ova upatstvo e studentite da se zapoznaat so nekoi osnovni naredbi i
funkcii vo MATLAB (MATrix LABoratory), kako bi mo`ele da gi izveduvaat
laboratoriskite ve`bi po predmetot Osnovi na Digitalno Procesirawe na
Signali.

Matrici
Osnoven element so koj raboti MATLAB e pravoagolna numeri~ka matrica ~ii
{to elementi mo`at da bidat i kompleksni broevi. 1x1 matricite se
interpretiraat kako skalari dodeka matricite so samo edna kolona ili redica se
interpretiraat kako vektori.
Matricite vo MATLAB mo`at da se vnesat na nekolku na~ini:
-

Direktno vnesuvawe na elementite

Generirawe so pomo{ na vgradeni funkcii i izrazi vo MATLAB

Kreirawe na m-datoteki

V~ituvawe od nadvore{ni datoteki (.mat datoteki)

Na primer, so slednite izrazi:


>> A=[1 2 3; 4 5 6; 7 8 9]
i
>> A=[1 2 3
4 5 6
7 8 9]
se vnesuva 3x3 matrica koja se dodeluva na promenlivata A. Elementite na edna
redica se odvoeni so prazno mesto ili so zapirka. Krajot na sekoja redica se
ozna~uva so ; (to~ka-zapirka). Po pritiskawe na ENTER na ekranot se pojavuva
A =
1 2 3
4 5 6
7 8 9
Elementot na matricata mo`e da bide definiran na pove}e na~ini. Na primer
>> B=[1.5*sqrt(2) 2.5^2; 2/3 7]
Poedine~ni elementi na matricata mo`at da se povikaat so pomo{ na nivnite
indeksi. Na primer, A(2,3) go ozna~uva elementot vo vtorata redica, treta kolona
na matricata A. Indeksite na elementite na matricite vo MATLAB se pozitivni
celi broevi. Negativni indeksi i 0 ne se dozvoleni vo MATLAB.


_____________________________________________________________________________________

Nekoi vgradeni funkcii so koi mo`at da se generiraat specijalni matrici se:


zeros, ones, eye, diag, rand, magic.
Taka na primer so zeros(m,n) se dobiva mxn matrica ~ii elementi se nuli, a so
zeros(n) se dobiva nxn matrica so nuli. So ones(m,n) se dobiva mxn matrica
~ii elementi se edinici.
So pomo{ na naredbata help (na primer help zeros) proverete {to davaat
pogore spomenatite funkcii.
Matrici mo`at da se generiraat i od pove}e blokovi. Na primer, ako A e 3x3
matrica izrazot
>> [A, zeros(3,2); zeros(2,3), ones(2)]
}e generira 5x5 matrica. Probajte.

Operatori vo MATLAB
Elementite vo MATLAB osven kako matrici mo`at da se tretiraat i kako poliwa
od broevi. Spored toa MATLAB koristi dva vida aritmeti~ki operatori:
matri~ni operatori i operatori primeneti na poliwa od broevi. Koga
operatorite se primenuvaat na matrici va`at pravilata na linearna algebra.
Koga operatorite se primenuvaat na poliwa od broevi tie deluvaat spored
principot element so element. Ovie operatori se razlikuvaat od matri~nite
operatori po decimalnata to~ka pred operatorot. Na primer, izrazot
[1,2,3,4].*[1,2,3,4] ili izrazot [1,2,3,4].^2 kako rezultat davaat [1,4,9,16]. Proverete.
Operatori vo MATLAB
+

sobirawe na matrici

odzemawe na matrici

mno`ewe na matrici

.*

mno`ewe element so element

stepenuvawe

.^

stepenuvawe element so element

delewe na matrici od levo

delewe na matrici od desno

./

delewe element so element

Relaciski operatori vo MATLAB


<

pomalo od

>

pogolemo od pomalo od ili ednakvo

<=

pomalo od ili ednakvo

>=

pogolemo od ili ednakvo

==

ednakvo

~=

neednakvo


_____________________________________________________________________________________

Logi~ki operatori vo MATLAB


&

ili

ne

MATLAB izrazi i promenlivi


MATLAB izrazite naj~esto se javuvaat vo slednata forma:
promenliva = izraz, ili ednostavno
izraz
Izrazite obi~no se formiraat od operatori, funkcii i imiwa na promenlivi.
Rezultatot na izrazite se matrici koi se pojavuvaat na ekranot i se dodeluvaat na
promenlivata za ponatamo{no koristewe. Dokolku se ispu{tat imeto na
promenlivata i znakot =, avtomatski se kreira promenliva ans na koja i se
dodeluva vrednosta na izrazot.
Dokolku na krajot na izrazot ima znak ; (to~ka-zapirka) rezultatot ne se ispi{uva
na ekran. Ova e od posebno zna~ewe koga ne e potrebno ispi{uvawe na
me|urezultatite. Ispu{taweto na znakot ; ne e problem ako se raboti za naredba
od oblik
>> A=[1 2 3]
me|utoa e golem problem ako naredbata e na primer,
>> A=[1:10000]
Dokolku se zaboravi znakot ; mo`e da se pritisne ctrl-C so cel da se izbegne
ispi{uvaweto na ekranot. Komandata ctrl-C ne go prekinuva presmetuvaweto tuku
samo go stopira prika`uvaweto na ekran.
MATLAB e case-sensitive (razlikuva mali i golemi bukvi) vo imiwata na naredbite,
funkciite i promenlivite. Taka na primer, randint ne e isto so randINT.
So pomo{ na komandata who mo`at da se vidat site promenlivi koi {to se
koristeni vo momentnata MATLAB sesija. Del od ovie promenlivi mo`at da se
izbri{at so komandata clear ime_na_promenliva. Samo clear }e gi izbri{e
site promenlivi.
So pomo{ na komandata save, site ili del od promenlivite mo`at da se
memoriraat vo .mat datoteki. Nivno povikuvawe mo`e da se izvr{i so komandata
load. So pomo{ na komandata help videte kako funkcioniraat load i save.

Operator : (dve to~ki)


Se koristi za generirawe vektori ili matrici so konstanten ~ekor i za
indeksirawe na matrici. Na primer, vektor koj gi sodr`i broevite od 1 do 5 (so
edine~en ~ekor) se generira na sledniot na~in:
>> x=1:5
x =
1 2 3 4 5
Dokolku ~ekorot e razli~en od edinica, negovata vrednost se vmetnuva pome|u
vrednostite na najmaliot i najgolemiot element na vektorot. Na primer, vektor


_____________________________________________________________________________________

koj gi sodr`i broevite od 1 do 3 so konstanten ~ekor 0.5 se dobiva so slednata


naredba
>> y=1:0.5:3
y =
1.0000 1.5000 2.0000 2.5000 3.0000
Operatorot : mo`e da se iskoristi i za izdvojuvawe na vektor redica, ili vektor
kolona, ili elementi od dadena matrica. Na primer:
A(1:4,3)
e vektor kolona koj se sostoi od prvite ~etiri elementi na tretata kolona na
matricata A, dodeka
A(2,1:3)
e vektor redica koj se sostoi od prvite tri elementi na vtorata redica.
A(1:4,:) e matrica sostavena od prvite ~etiri redici na matricata A.
So izrazot
A(:,[2 4 5]) = B(:,1:3)
kolonite 2, 4 i 5 na matricata A se zameneti so prvite tri koloni na matricata B.
Vo mnogu situacii operatorot : ovozmo`uva izbegnuvawe na ciklusi, {to e
objasneto na krajot na narednoto poglavje.

Ciklusi
Sli~no kako i vo drugite programski jazici (FORTRAN, C, ...) MATLAB naredbite
se izvr{uvaat po onoj redosled po koj {to se napi{ani. Dokolku e potrebno,
redosledot na izvr{uvawe na naredbite mo`e da se promeni so pomo{ na
funkciite za kontrola na tekot na programata:
For: Go povtoruva izvr{uvaweto na odreden blok naredbi odreden broj pati.
Op{t oblik na ciklusot:
for promenliva = izraz
naredbi
end
pri {to izraz naj~esto e od oblik skalar1:skalar2. Videte go primerot na krajot
od ova poglavje.
If: Uslovno izvr{uvawe na naredbi. Op{t oblik na ciklusot:
if promenliva
naredbi
end
Promenliva e obi~no rezultat od sporedba na dva izraza
izraz relaciski operator izraz
Dokolku rezultatot od sporedbata e vistinito promenlivata dobiva vrednost 1
i naredbite se izvr{uvaat. Od druga strana, koga rezultatot na sporedbata e
4


_____________________________________________________________________________________

nevistinito promenlivata dobiva vrednost 0 i naredbite ne se izvr{uvaat. So


kombinirawe na if so else i elseif mo`no e pove}ekratno razgranuvawe.
Proverete {to raboti slednata programa:
>>for i=1:n
for j=1:n
if i==j
a(i,j)=2
elseif i==1
a(i,j)=1
else
a(i,j)=0
end
end
end
>> a

While: Povtoruva izvr{uvawe na blok naredbi neodreden broj pati se dodeka


dadeniot uslov e zadovolen.
Op{t oblik na naredbata
While promenliva
naredbi
end
Naredbite se izvr{uvaat se dodeka promenlivata e vistinito. Na primer, za
daden broj a slednata programa go presmetuva i ispi{uva najmaliot nenegativen
cel broj n taka {to 2^n >= a.
>> n=0;
>> while 2^n <a
n=n+1;
end
>> n
Izbegnuvajte ciklusi sekade kade {to toa e mo`no. Istite vo golema mera go
usporuvaat izvr{uvaweto na programata. Na primer, generirawe na funkcijata
sinus mo`e da se izvr{i na sledniot na~in
>> for i=0:999 x(i+1)=sin(2*pi*i/1000);
>> end;
Me|utoa ova e mnogu pobavno otkolku
>> x=sin(2*pi*(0:999)/1000);
Vo op{t slu~aj, podobro e celi vektori da se procesiraat vo isto vreme otkolku
da se koristat ciklusi, bidej}i najgolem broj MATLAB funkcii operiraat so
vektori isto kako i so skalari.


_____________________________________________________________________________________

Polinomi
MATLAB koristi ednostavna reprezentacija na polinomite koja e mnogu korisna
za digitalno procesirawe na signali (DSP). Vo DSP ~esto pati se javuva potreba
za pretstavuvawe na drobnoracionalna funkcija, odnos na dva polinoma B(z) i A(z):
1
p
B( z ) b0 b1 z L b p z

A( z ) 1 a1 z 1 L a q z q

Vo MATLAB polinomite B(z) i A(z) se pretstaveni so vektori b i a koi gi sodr`at


nivnite koeficienti. Taka a = [1 1.5 0.99] go pretstavuva polinomot
A(z) = 1 1.5 z 1 + 0.99 z 2.
Del od funkciite za rabota so polinomi koi {to se koristat vo DSP se dadeni vo
slednata tabela:

conv

mno`ewe na polinomi

deconv

delewe na polinomi

poly

odreduvawe na koeficienti na polinom

residuez

razvoj vo prosti dropki

roots

odreduvawe na nuli na polinom

So pomo{ na naredbata help proverete kako funkcioniraat ovie funkcii.


Pogolemo vnimanie na ovie funkcii e posveteno vo ve`ba 1.

M - datoteki
Pokraj naredbi od komandna linija, MATLAB mo`e da izvr{uva niza od izrazi
memorirani vo dadeni datoteki. Vakvi datoteki se nare~eni m-datoteki
(datoteki so ekstenzija .m). Toa se tekstualni datoteki kaj koi se definirani
vleznite argumenti, niza na naredbi (procesirawe) i izleznite agrumenti.
Sodr`inata na datotekite mo`e da se vidi so pomo{ na naredbata type
ime_na_datoteka, vnesena od komandnata linija. Prou~uvaweto na m-datotekite
koi {to implementiraat vgradeni MATLAB funkcii e dobar na~in da se dobijat
nekoi idei za efikasno programirawe vo MATLAB.
Postojat dva tipa na m-datoteki: skripti i funkcii.
Skripti: Se sostojat od niza na MATLAB izrazi. Ispi{uvaweto na imeto na
datotekata na komandnata linija }e predizvika izvr{uvawe na site izrazi vo
datotekata. Promenlivite vo skriptata se globalni i mo`at da gi promenat
vrednostite na promenlivite so isto ime vo otvorenata MATLAB sesija.
Funkciski datoteki: Za razlika od skriptite, funkciskite datoteki vo prvata
linija sodr`at izraz od oblik
function [y1, y2, ... ] = ime_na_funkcija(x1,x2, . . . )
po {to sledi niza od MATLAB komandi i izrazi. y1, y2, ... se izlezni argumenti na
funkcijata koga istata }e se povika so nejzinoto ime, ime_na_funkcija, a x1,x2, ...
se vlezni argumenti. Po definicija, promenlivite vo funkciskite datoteki se
lokalni.


_____________________________________________________________________________________

Ovie funkciski datoteki mu ovozmo`uvaat na korisnikot da kreira novi


funkcii koi imaat ist status kako i drugite funkcii vo MATLAB. Primer za
ednostavna funkcija:
function y =
% MEAN

mean(x)

Avarage or mean value

% For vectors, MEAN(X) returns the mean value


% For matrices, MEAN(X) is a row vector containing
% the mean value of each column
[m,n]=size(x);
if m==1
m=n;
end
y=sum(x)/m;

Ovaa funkcija e smestena vo datotekata mean.m. Nejzinata upotreba e ista kako i


upotrebata na sekoja druga MATLAB funkcija. Na primer, neka generirame vektor
koj gi sodr`i celite broevi od 1 do 99
>> z=1:99;
Srednata vrednost se presmetuva so naredbata
>> mean(z)
{to kako rezultat dava
ans =
50
Nekolku zabele{ki vo odnos na dadenata funkcija:
-

Prvata linija gi deklarira imeto na funkcijata, vleznite argumenti i


izleznite argumenti. Bez ovaa linija datotekata bi pretstavuvala skripta.

Simbolot % ozna~uva deka se raboti za komentar i ostatokot od linijata se


ignorira pri izvr{uvawe na funkcijata.

Liniite koi po~nuvaat so % ja dokumentiraat m-datotekata i se prika`uvaat


na ekranot pri izvr{uvawe na naredbata help mean.

Prvata linija so % e vklu~ena vo datotekata Contents.m vo soodvetniot


direktorium. Komandata lookfor se referencira na ovaa linija pri
izvr{uvaweto.

Promenlivite m, n i y se lokalni za funkcijata mean i ne se pojavuvaat vo


MATLAB sesijata po izvr{uvaweto na funkcijata (ili, ako postoele
prethodno, ostanuvaat nepromeneti).

Pri izvr{uvaweto na naredbata ne be{e neophodno da se smestat celite


broevi od 1 do 99 vo promenliva so ime x. Fakti~ki, mean go koristevme so
promenlivata z. Vektorot z koj gi sodr`i celite broevi od 1 do 99 be{e
prosleden vo mean i postana lokalna promenliva so ime x.


_____________________________________________________________________________________

2-D grafici
MATLAB raspolaga so mo`nost za efikasno grafi~ko prika`uvawe na
podatocite. Nekoi od funkciite za grafi~ko prika`uvawe na podatoci se
pogodni za DSP.
Funkcijata plot prika`uva grafik so linearna podelba na oskite; dokolku x i y
se vektori so ednakva dol`ina, naredbata plot(x,y) crta x-y grafik na
elementite na y vo funkcija od x.
Funkcijata stem ovozmo`uva prika`uvawe na diskretni nizi.
Funkcijata subplot e pogodna za sporedba na pove}e grafici. So istata funkcija
ekranot mo`e da se podeli taka {to pove}e grafici se gledaat istovremeno.
So pomo{ na naredbata help doznajte pove}e za plot,stem i subplot.
Pogolemo vnimanie na ovie funkcii e posveteno vo ve`ba 1.


_____________________________________________________________________________________

VE@BA 1
Vektori kako polinomi
Vo MATLAB polinom se pretstavuva kako vektor ~ii {to elementi se
koeficientite na polinomot (so opa|a~ki stepen na promenlivata). Taka na
primer, polinomot s 3-6s 2-72s-27 mo`e da se pretstavi so vektorot
>> p=[1 -6 -72 -27]
p =
1 6 72 -27
Nulite na polinomot mo`at da se odredat so pomo{ na funkcijata roots.
So naredbata
>> r=roots(p)
r =
12.1229
-5.7345
-0.3884
se dobiva vektor koj gi sodr`i nulite na polinomot.
Obratno, koeficientite na polinomot, ako se poznati negovite nuli, mo`at da se
odredat so funkcijata poly. Na primer,
>> p2=poly(r)
p2 =
1 6 72 27
Ako se dadeni polinomite a(s) = s 2 +2s+3 i b(s) = 4s 2 +5s+6, nivniot proizvod se
dobiva so funkcijata conv
>> a=[1,2,3]; b=[4,5,6];
>> c=conv(a,b)
c =
4 13 28 27 18
Delewe na polinomi se vr{i so funkcijata deconv
>> [g,r]=deconv(c,a)
g =
4 5 6
r =
0 0 0 0
So funkcijata residue (ili funkcijata residuez) se vr{i razlo`uvawe na
drobnoracionalna funkcija na prosti drobnoracionalni funkcii (od prv red).
Oblici na funkcijata
[R,p,C]=residue(b,a)
[b,a]=residue(R,p,C)


_____________________________________________________________________________________

So opcijata [R,p,C]=residue(b,a) se dobivaat koeficientite na razvojot,


polovite i slobodnite ~lenovi (R, p, C) pri razlo`uvaweto na drobnoracionalnata funkcija na prosti faktori.
So opcijata [b,a]=residue(R,p,C) so tri vlezni i dva izlezni argumenti se
vr{i inverzna operacija na prethodnata.
Primenata na ovaa funkcija e ilustrirana so sledniot primer. Funkcijata

z 1
H ( z)
3 4 z 1 z 2
mo`e da se pretstavi kako suma od prosti drobnoracionalni funkcii so pomo{ na
koeficientite dobieni kako rezultat na slednite naredbi:
>> b=[0,1];

a=[3,-4,1];

>> [R,p,C]=residuez(b,a)

% Koga polinomite se dadeni


% so negativni stepeni se
% koristi funkcijata residuez

R =
0.5000
-0.5000
p =
1.0000
0.3333
C =
[]
odnosno

H ( z)

1/ 2
1/ 2

0
1
1 z
1 (1 / 3) z 1

Vektori kako signali


Vo MATLAB diskretni signali (nizi) mo`at da se pretstavat so vektor ~ii {to
elementi se soodvetnite vrednosti na signalot (nizata). Pri toa mora da se
vnimava na interpretacijata na indeksite. Vo MATLAB, indeksite na site
vektori po~nuvaat so 1.
Generirawe na nekolku elementarni nizi:
1. Edini~en impuls [n] mo`e da se generira so pomo{ na funkcijata
zeros(1,N). Na primer so
>> delta=[1 zeros(1,30)]
se implementira [n] na kone~en interval n = 0, 1, ... , 30.
2. Edini~en skok
u[n]. Funkcijata ones(1,N) mo`e da se iskoristi za
generirawe na u[n] na kone~en interval. Na primer
>> u=[ones(1,30)]
generira edini~en skok so dol`ina 30.

10


_____________________________________________________________________________________

3. Ekponencijalen signal f [n] = an, n 0 .


Na primer, f1 [n] = 0.9n za n = 0, 1, ... 50 se generira na sledniot na~in:
>> n=[0:50];
>> f1=(0.9).^n
4. Prostoperiodien signal f [n] = A cos (n+) , n Z , mo`e da se generira so
pomo{ na cos (sin) funkcijata od MATLAB. Taka na primer, signalite
x1 [n] = 3 cos (2n/20 + ) i x2 [n] = sin (2n/20) za n = 0, 1, ... 20, se dobivaat so
>> n=[0:20];
>> x1=3*cos(2*pi*n/20+pi/3)
>> x2=sin(2*pi*n/20)
Grafi~ko pretstavuvawe na signali
Vo ovoj del od ve`bata pogore definiranite signali treba grafi~ki da se
prika`at. So komandata who mo`e da se potsetite na site signali (vektori) koi
dosega bea definirani, dodeka so komandata whos mo`at da se vidat i nivnite
dimenzii.
Za prika`uvawe na signalite }e gi koristime funkciite plot i stem. So pomo{
na komandata help doznajte pove}e za ovie dve funkcii.
Najnapred prika`ete go signalot x1 vo funkcija od indeksot n, so pomo{ na
slednata komanda
>> plot(n,x1)
Vra}awe na komandnata linija (vo MATLAB Command Window) mo`e da se izvede
so pritiskawe na bilo koe kop~e od tastaturata. Grafikot mo`e da se povika
povtorno so pomo{ na funkcijata shg ili so pritiskawe na gluv~eto na samiot
grafik.
Ponekoga{ e potrebno vo evidencija da se stavi periodot na diskretizacija T, t.e.
od indeksot n da se pomine na vremenskiot interval nT. Taka na primer, ako se
saka signalot x1[nT], so T = 10 msec, da se prika`e vo intervalot 0 t 0.2 , mo`e da
se generira vremenska niza so t = 0; 0.01; ... ; 0.2 so komandata
>> t=[0:0.01:0.2];
i potoa da se nacrta x1 vo funkcija od t so
>> plot(t,x1)
Mre`a na crte`ot mo`e da se dodade so komandata grid. Mre`ata mo`e da bide
korisna pri procenka na oddelni parametri na signalot.
Na grafikot mo`at da se dodadat naslov, oznaka na x i y oskite, i tekst na koe
bilo mesto na grafikot so pomo{ na slednite funkcii:
title

naslov na grafikot

xlabel

oznaka na x oskata

ylabel

oznaka na y oskata

gtext

interaktivno-vmetnuvawe na tekst

text

vmetnuvawe na tekst so
specificirani koordinati

Site ovie funkcii koristat stringovi kako argumenti.

11

to~no


_____________________________________________________________________________________

Taka so komandata
>> title(Prostoperiodicna funkcija)
se vmetnuva naslov na grafikot, a so komandite
>> xlabel(n)
>> ylabel(x1[n])
se dodeluvaat oznaki na x i y oskite.
Prika`uvawe na signalot x2 na istiot grafik mo`e da se izvede na dva na~ina.
Prviot na~in e so pomo{ na komandata
>> plot(n,x1,n,x2)
Vtoriot na~in e so pomo{ na naredbata hold. So komandata hold on se
zamrznuva momentniot crte` i novi grafici mo`at da se iscrtaat na nego. Za
vra}awe vo normalen mod na crtawe se koristi komandata hold off.

Najnapred so komandata figure otvorete nov grafi~ki prozorec, a potoa so


pomo{ na naredbata hold nacrtajte gi x1 i x2 na ist grafik.

I pokraj toa {to x1 i x2 se diskretni signali nivnite grafici prika`ani so


funkcijata plot ostavaat vpe~atok deka se raboti za kontinuirani signali.
Vsu{nost so funkcijata plot se prika`uva anvelopata na diskretniot signal.
Probajte {to }e se dobie so slednata niza naredbi:
>> t=[0:7];
>> x=sin(2*pi*t/8);
>> plot(t,x)
Zna~i, od dobieniot grafik ne e jasno deka se raboti za sinusna funkcija. Za
prika`uvawe diskretni nizi se koristi funkcijata stem. Funkcijata stem ima
isti argumenti kako i funkcijata plot.

So pomo{ na funkcijata stem da se nacrtaat signalite u i f1.

I pokraj faktot {to signalite vo MATLAB sekoga{ se diskretni signali, vo


oddelni slu~ai podobro e istite da se prika`at kako kontinuirani signali. Toa
ne e problem ako ne se zaboravi deka se raboti za diskretni signali. Proverete
{to }e se dobie so slednata niza naredbi:
>> n=[0:0.01:100];
>> x=sin(2*pi*n/100);
>> stem(n,x)
So pomo{ na naredbata subplot ekranot se deli taka da pove}e grafici se
gledaat istovremeno. So help subplot videte kako funkcionira ovaa naredba.

>>
>>
>>
>>
>>
>>
>>
>>

Proverete {to }e se dobie so slednata niza od naredbi:


subplot(2,2,1); stem(0:length(x1)-1,x1);
title(Prostoperodicen signal);
subplot(2,2,2); stem(0:length(f1)-1,f1);
title(Eksponencijalen signal);
subplot(2,2,3); stem(0:length(delta)-1,delta);
title(Edinicen impuls);
subplot(2,2,4); stem(0:length(u)-1,u);
title(Edinicen skok);

12


_____________________________________________________________________________________


MATLAB :
>> sound(y,Fs)
y , Fs .
(
4.)

. , sound
.
>> load gong.mat;

% Se vcituvaat y i Fs

>> n = 0: length(y)-1;
>> t = n/Fs;
>> figure, plot(t,y)
>> sound(y, Fs);

.
f = 1KHz .
>> f = 1000;
>> Fs = 44100;
>> t = 0:1/Fs:1;
>> y = cos(2*pi*f*t);
>> figure, plot(t,y);
>> sound(y, Fs);

f = 500 Hz.
sound.


. .
chirp help chirp
.
>> Fs = 44100;
>> t = 0:1/Fs:2;
>> y = chirp(t,0,1.5,7500);
>> sound(y, Fs);

13


_____________________________________________________________________________________

:
1. :

1 3 2
) A 2 3 3

2 2 3
1 2 3 4
C 2 4 6 8
5 10 15 20

A
2

) B
2

0 0 0 1
0 0 0 1
5 6 7
10 12 14
25 30 35

2
2
2

1
1

2.

x1[n], n 0, 1, 2, ..., 8 = [3, 5, 8, 1, 2, 3, 7, 8, 1]


x2 [n], n 0, 1, 2, ..., 8 = [2, 1, 0, 4, 0, 5, 4, 3, 3]
3. :
) x[n] 2 n 2 3, n 2, 5, 8, 11, 14, ..., 35
) x[n] e 0.01n n 2 , n 3, 4, 5, 6, ... 13
) x(t ) e t cos( 4t 3), t 0 : 0.001 : 4
) x(t ) cos(3t 2) sin( 2t ) , t 0 : 0.01 : 15
2

4. :
) x1 (t ) cos(t ) x2 (t ) cos(4t ) , t 0 : 0.01 : 10
) x1 (t ) e t x2 (t ) sin( 2t ) , t 0 : 0.01 : 10
5.
f. 4
200Hz, 400Hz, 600Hz 1000Hz sound.
>> Fs = 44100;
>> t = 0:1/Fs:1;
>> y = cos(2*pi*f*t);

14


_____________________________________________________________________________________

VE@BA 2
Linearna konvolucija
Daden e impulsniot odziv na eden LTI sistem {h [n] = 0.5n , n = 0, 1, ... 9}. Na negoviot
vlez e primenet signalot x [n] = u [n]-u [n-10]. Da se odredi odzivot na sistemot y[n].
Linearnata konvolucija na nizite x [n] i h [n] }e go dade izlezniot signal y [n].
Implementacija na linearnata konvolucija vo MATLAB mo`e da se izvr{i so
funkcijata conv.
>> n=[0:9]; h=(0.5).^n;
>> x=[ones(1,10)];
>> y=conv(x,h)

So pomo{ na funkcijata size proverete kolkava e dol`inata na izlezniot


signal y. Potoa, so pomo{ na funkciite subplot i stem prika`ete gi
signalite x,h i y na ist grafik.

Grafi~ka interpretacija na linearnata konvolucija mo`e da se dobie so


ispi{uvawe na naredbata dconvdemo na komandnata linija. Kako rezultat na
izvr{uvawe na naredbata na ekranot }e se pojavi sledniot prozorec.

So pritiskawe na kop~eto Get x[n], se otvora nov prozorec so prika`an


pravoagolen impuls. Po `elba, drug signal mo`e da se izbere od listata vo
gorniot del od prozorecot, a parametrite na signalot mo`at da se promenat so

15


_____________________________________________________________________________________

kontrolnite kop~iwa od desnata strana. Potoa se pritiska na OK i izbraniot


signal e prika`an vo Input prozorecot vo gorniot desen agol.
Na sli~en na~in se izbira i impulsniot odziv h[n] so pritiskawe na kop~eto Get
h[n], po {to h[n] se pojavuva vo prozorecot Impulse Response.
Vo gorniot lev prozorec vlezniot signal x[n] e prika`an so plava boja i
presvrtenata verzija na impulsniot odziv e prika`ana so crvena boja.
Vo sredniot prozorec e prika`an rezultatot od mno`eweto primerok po
primerok na dvata signala prika`ani vo gorniot prozorec. Ovoj prozorec mo`e
da bide i prazen.
Vo dolniot prozorec e prika`an izlezniot signal, koj pretstavuva linearna
konvolucija na x[n] i h[n].
Linearna konvolucija vo realno vreme: Postavete go gluv~eto nad oznakata n , i
}e se pojavi eden simbol vo oblik na raka. So dvi`ewe na rakata levo ili desno,
so pomo{ na gluv~eto, mo`e da se menuva vrednosta na indeksot n. Pri toa
presvrteniot impulsen odziv vo gorniot prozorec se pomestuva zaedno so n, a
sodr`inata na sredniot prozorec se menuva vo zavisnost od relativnoto
poklopuvawe na vlezniot signal i presvrteniot impulsen odziv. Za odredeno n vo
dolniot prozorec e istaknat eden primerok od izlezniot signal. Ovoj primerok se
dobiva so sobirawe na site primeroci za toa n od sredniot prozorec.

Sledej}i ja gore navedenata postapka grafi~ki prika`ete ja linearnata


konvolucija na dva pravoagolni impulsa so ednakva i so razli~ni dol`ini.

Prenosna funkcija
Dadena e prenosnata funkcija na eden kauzalen diskreten sistem

H ( z)

1 0.4 2 z 1
1 0.8 2 z 1 0.64 z 2

Treba da se odredi negoviot impulsen odziv.


Bidej}i

H ( z ) {h[n]}

h[n] z n

n 0

problemot se sveduva na odreduvawe inverzna z-transformacija na H(z). Za taa cel


mo`e da se iskoristi funkcijata residuez. So residuez, H(z) mo`e da se
razlo`i na prosti drobnoracionalni funkcii po {to ostanuva da se primeni
tablicata na z-transformacii za da se dobie h[n].
>> b=[1,0.4*sqrt(2)]; a=[1, -0.8*sqrt(2),0.64];
>> [R,p,C]=residuez(b,a)
R =
0.5000-1.0000i
0.5000+1.0000i
p =
0.5657+0.5657i
0.5657-0.5657i

16


_____________________________________________________________________________________

C =
[]
Modulot i argumentot na elementite na vektorite R i p mo`at da se odredat so
pomo{ na funkciite abs i angle.
>> MR=abs(R)

% modulot na R

MR =
1.1180
1.1180
>> AR=angle(R)/pi

% agolot na R vo pi edinici

AR =
-0.3524
0.3524
>> Mp=abs(p)

% modulot na polot

Mp =
0.8000
0.8000
>> Ap=angle(p)/pi

% agolot na polot vo pi edinici

Ap =
0.2500
-0.2500

[to zna~i, H(z) mo`e da se razlo`i na sledniot na~in

1.118 e 0.3524

H ( z)

1 0.8 e

z 1

1.118 e 0.3524
1 0.8 e

z 1

Koristej}i ja tablicata za z-transformacija za h[n] se dobiva:

h[ n] 2 1.118 (0.8) n cos( n

0.3524 )

Funkcijata filter mo`e da se iskoristi za verifikacija na dobieniot rezultat.


So istata, ako se dadeni vlezniot signal i prenosnata funkcija na diskretniot
sistem, mo`e da se odredi izlezniot signal. Op{t oblik na funkcijata
y=filter(b,a,x)
kade {to b = [b0, b1,...bp] i a = [a0, a1,...aq] se vektori ~ii elementi se
koeficientite na polinomite vo broitelot i imenitelot na H(z), a x e vlezna
niza. Dol`inata na izleznata niza y e ista so dol`inata na vleznata niza x.
Ako x[n]= [n], izleznata niza go pretstavuva implusniot odziv na sistemot.
Prvite osum primeroci na impulsniot odziv, dobieni numeri~ki (so pomo{ na
funkcijata filter) se:
>> delta=[1 zeros(1,7)];

17


_____________________________________________________________________________________

>> y=filter(b,a,delta)
Columns 1 through 4
1.0000

1.6971

1.2800

0.3620

-0.5242

-0.1483

Columns 5 through 8
-0.4096

-0.6951

Dobienite vrednosti sporedete gi so prvite osum primeroci na impulsniot


odziv, dobieni analiti~ki:

>> n=[0:7];
>> h =(2*1.118*(0.8).^n).*(cos(pi*n/4-0.3524*pi))

Diferencna ravenka
Pokraj pretstavite so impulsniot odziv h[n] ili so prenosnata funkcija H(z), LTI
diskreten sistem mo`e da bide pretstaven i so negovata diferencna ravenka.
Da se odredat prvite 100 primeroci na impulsniot odziv na diskretniot sistem
pretstaven so slednata diferencna ravenka.

y[n] y[n 1] 0.9 y[n 2] x[n]


So z-transformacija na gornata ravenka, koristej}i ja osobinata na translacija,
se dobiva

H ( z)

Y ( z)
1

1
X ( z ) 1 z 0.9 z 2

Prvite 100 primeroci na impulsniot odziv i grafi~ki prikaz na istiot se


dobivaaat so slednata niza naredbi:
>> b=[1]; a=[1 1 0.9]; n=[0:99];
>> delta=[1 zeros(1,99)];
>> h=filter(b,a,delta);
>> subplot (2,1,1); stem(n,h)
>> title(Impulsen odziv); xlabel(n); ylabel(h(n))
Indicioniot odziv na sistemot mo`e da se odredi so pomo{ na funkcijata za
kumulativna suma cumsum.
>> ai=cumsum(h);
>> subplot(2,1,2); stem(n,ai)
>> title(Indicionen odziv); xlabel(n); ylabel(a(n))

Od graficite procenete dali dadeniot sistem e stabilen.

18


_____________________________________________________________________________________

:
1. :
n

5
) x[n], n 1,2,..50 h[n] 1, n 1,2,..40
6
) a[n] [1, 3, 5, 7, 9, 10, 13, 16, 19]
b[n] [2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5]

2. - z :
z 2 4z 3
z 2 2.5 z 1
z2 z 2
) H ( z ) 2
z 3z 2

) H ( z )

3. 50
:
z 2 4z 3
H ( z)
5
1
z2 z
6
6
4. :
H ( z)

z2 z 2
z 2 3z 2

)
n 1,2,..20
1,

n 21,22,...40
x[n] 2,
0, n 1 n 40

filter conv;
) ,
.

19


_____________________________________________________________________________________

VE@BA 3
Frekvenciska karakteristika
Mo`e da se odredi so pomo{ na funkcijata freqz. Op{t oblik na funkcijata e
[H,w]=freqz(b,a,N)
kade {to b i a se vektori ~ii elementi se koeficientite na polinomite vo
broitelot i imenitelot na H(z), respektivno, a N go ozna~uva brojot na to~ki vo
koi se presmetuva frekvenciskata karakteristika.
H e vektor so dol`ina N {to gi sodr`i vrednostite na frekvenciskata
karakteristika za kru`ni frekvencii koi se dadeni vo vektorot w.
Frekvenciskata karakteristika se presmetuva vo N to~ki ednakvo raspredeleni
vo z-ramninata okolu gornata polovina na edini~niot krug, odnosno na -oskata
vo intervalot od = 0 do = .
Drug oblik na funkcijata e sledniot:
H=freqz(b,a,w)
so {to se dobiva frekvenciskata karakteristika za frekvencii specificirani
vo w (pome|u 0 i ).
So naredbite
[H,w]=freqz(b,a,N,whole)
H=freqz(b,a,w,whole)
se dobiva frekvenciska karakteristika za frekvencii od do dadeni vo
vektorot w.
Diskreten sistem e daden so negovata prenosna funkcija

H ( z)

z 2 z 1
(1 0.8 z 1 )(1 0.8 z 1 )

Amplitudnata i faznata karakteristika na sistemot mo`at da se dobijat na


sledniot na~in:
>> b=[0,1,1]; a=poly([0.8,-0.8]);
>> w=[0:1:500]*pi/500;

% (0-pi) oskata se deli na 501


% tocka vo koi se presmetuva H

>> H=freqz(b,a,w);
>> A=abs(H);

% Amplitudna k-ka

>> phi=angle(H);

% Fazna k-ka

>> subplot(2,1,1); plot(w/pi, A); grid


>> xlabel(Frekvencija vo pi edinici); ylabel(Amplituda)
>> title(Amplitudna karakteristika)
>> subplot(2,1,2); plot(w/pi, phi/pi); grid
>> xlabel(Frekvencija vo pi edinici);
>> ylabel(Faza vo pi edinici)
>> title(Fazna karakteristika vo pi edinici)

20


_____________________________________________________________________________________

Polovi i nuli
Za odreduvawe na nulite i polovite na H(z) mo`e da se iskoristi MATLAB
funkcijata roots.
>> z=roots(b)
>> p=roots(a)
So pomo{ na funkcijata zplane, mo`e da se prika`e pol/nula dijagramot.
>> zplane(z,p)
Simbolot o gi pretstavuva nulite, a simbolot x gi pretstavuva polovite. Na
crte`ot kako referenca e prika`an i edini~niot krug.

Od pol/nula dijagramot procenite dali diskretniot sistem pretstaven so


gornata prenosna funkcija e stabilen.

Vlijanie na polovite i nulite na frekvenciskata karakteristika


Vlijanieto na polovite i nulite na frekvenciskata karakteristika mo`e da se
ispita so pomo{ na Pole-Zero Editor-ot. Istiot se startuva so naredbata pezdemo.
Pole-Zero Demo: Od levata strana se nao|a Z-ramninata vo koja se vnesuvaat
polovite i nulite. So objektite vo Z-ramninata mo`e da se manipulira na
ednostaven na~in: nulite i polovite mo`at da se selektiraat i da se premestat od
edna na druga lokacija.
Vo gorniot del ima pove}e komandni kop~iwa so koi mo`at da se vnesuvaat polovi
i nuli vo Z-ramninata. Se kliknuva na PP ili ZZ kop~eto, a potoa so pomo{ na
gluv~eto se selektira lokacijata vo Z-ramninata za noviot pol (nula).
Osnovna help informacija za sekoja operacija se pojavuva vo desniot dolen agol na
prozorecot.

21


_____________________________________________________________________________________

Vo ostanatite prozorci se prika`ani impulsniot odziv, amplitudnata i faznata


karakteristika na diskretniot sistem pretstaven so izbranite polovi i nuli.
Taka na primer, so sledniot raspored na polovite i nulite
1
0.8
0.6

Imaginary part

0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-1

-0.5

0
Real part

0.5

se dobiva slednata amplitudna karakteristika


Amplitudna karakteristika
1
0.9
0.8
0.7

Amplituda

0.6
0.5
0.4
0.3
0.2
0.1
0
-1

-0.6

-0.4

-0.2
0
0.2
0.4
Frekvencija vo pi edinici

0.6

0.8

So pomo{ na ~etiri nuli i ~etiri polovi obidete se da ja dobiete slednata


amplitudna karakteristika.
Amplitudna karakteristika
1
0.9
0.8
0.7
0.6
Amplituda

-0.8

0.5
0.4
0.3
0.2
0.1
0
-1

-0.8

-0.6

-0.4

-0.2
0
0.2
0.4
Frekvencija vo pi edinici

22

0.6

0.8


_____________________________________________________________________________________

So pomo{ na tri nuli i dva pola obidete se da ja dobiete slednata


amplitudna karakteristika.
Amplitudna karakteristika
1
0.9
0.8
0.7

Amplituda

0.6
0.5
0.4
0.3
0.2
0.1
0
-1

-0.8

-0.6

-0.4

-0.2
0
0.2
0.4
Frekvencija vo pi edinici

0.6

0.8

:
1. :
H ( z)

z 2 2z 1
z 2 0.2

[ , ]

.
100
.
2. -
:
a) H ( z )

z 2 2z 3
z 2 1.55 z 0.3

) H ( z )

z2 z 2
z 2 2.66 z 2.77

) H ( z )

z 2 0.5 z 3
z 2 1.5 z 0.8

3. LTI :
y[n] x[n] 2 x[n 1] x[n 2]

2
1
y[n 1] y[n 2]
2
4

) ;
) ( stem)

:
3

0,
,
,
,
, .
8 4
8
2

) ,
:
10
x[n]
3 cos( 0.25n) , n=0,1,..100
3

23


_____________________________________________________________________________________

VE@BA 4
Diskretizacija na analogni siganali
Za prou~uvawe na procesot na diskretizacija, rekonstrukcija i propratnite
efekti }e go koristime signalot x a (t ) e 1000 |t| . Negovata Furieova
transformacija e

X a ( j)

a (t ) e

jt

dt

0.002

1

1000

Striktno gledano so MATLAB ne mo`at da se analiziraat analogni signali.


Me|utoa, dokolku se zemat primeroci od analogniot signal vo mnogu mali
vremenski intervali t (t ne treba se me{a so periodot na diskretizacija Ts), so
nizata x G [ m] x a (mt ) mo`e da se simulira analogniot signal.
Za numeri~ko presmetuvawe na Xa (j) najprvo mora da se aproksimira xa(t) so
kone~na niza xG [m]. Koristej}i ja aproksimacijata e 5 0 , mo`e da se zabele`i
deka xa(t) mo`e da se aproksmira so signal so kone~no traewe so interval
0.005 t 0.005 ,
(ili
vo
intervalot
[-5,5]
msec.).
Sli~no,
X a ( j) 0 za 2 (2000 ) . Spored toa so izbor na
t 5 10 5

1
25 10 5
2(2000 )

mo`e da se dobie xG [m] i da se presmeta negoviot spektar. Sega relacijata za


Furieovata transformacija mo`e da se aproksimira na sledniot na~in:
X a ( j)

G [ m] e

j m t

t t

G [ m] e

j m t

i mo`e da se presmeta so slednata niza na naredbi:


% Analogen Signal
>> Dt = 0.00005; t = -0.005:Dt:0.005; xa = exp(-1000*abs(t));
>> Wmax = 2*pi*2000; K = 500; k = 0:1:K; W = k* Wmax/K;
>> Xa = xa * exp(-j*t'*W) * Dt; Xa=real(Xa);
>> W = [-fliplr(W), W(2:501)];
>> Xa = [fliplr(Xa), Xa(2:501)];
>> subplot(2,1,1)
>> plot(t*1000,xa)
>> xlabel('t vo msec.'); ylabel('xa(t)')
>> title('Analogen signal')
>> subplot(2,1,2)
>> plot(W/(2*pi*1000), Xa*1000);
>> xlabel('Frekvencija vo KHz'); ylabel('Xa(jW)*1000')
>> title('Furieova transformacija')

24


_____________________________________________________________________________________

Analogen signal
1
0.8

xa(t)

0.6
0.4
0.2
0
-5

-4

-3

-2

-1

0
t vo msec.

Furieova transformacija
2

Xa(jW)*1000

1.5

0.5

0
-2

-1.5

-1

-0.5

0
0.5
Frekvencija vo KHz

1.5

Da go vidime efektot na diskretizacija vrz frekvenciskite karakteristiki na


signalot }e izvr{ime diskretizacija na xa(t) so frekvencija na diskretizacija fs =
5000 prim/sec. Bidej}i najvisokata fekvencija vo spektarot na xa(t) e 2000 Hz,
Nyquist-ovata frekvencija e 4000 sam/sec, {to e pomalku od dadenata frekvencija
na diskretizacija. Vo ovoj slu~aj preklopuvawe nema da postoi.
% Analogen signal
>> Dt = 0.00005; t = -0.005:Dt:0.005; xa = exp(-1000*abs(t));
% Diskretiziran signal
>> Ts = 0.0002; n = -25:1:25; x1 = exp(-1000*abs(n*Ts));
% Spektar na diskretniot signal
>> K = 500; k = 0:1:K; w = pi*k/K;
>> X1 = freqz(x1,1,w); X1 = abs(X1);
>> w = [-fliplr(w) w(2:K+1)];
>> X1 = [fliplr(X1) X1(2:K+1)];
% prikaz
>> subplot(2,1,1); plot(t*1000,xa);
>> xlabel('t in msec.'); ylabel('x1(n)')
>> title('Diskreten signal (Ts = 0.2 msec)'); hold on
>> stem(n*Ts*1000,x1); hold off
>> subplot(2,1,2); plot(w/pi,X1);
>> xlabel('Frekvencija vo pi edinici'); ylabel('X1(w)')
>> title('Spektar na diskretniot signal')

25


_____________________________________________________________________________________

So cel da se prika`e postapkata na diskretizacija na slikata se prika`ani


diskretniot signal x1[n] i analogniot sihnal xa(t). Spekarot na diskretniot
signal X1(ej) e skalirana verzija (skaliran so fs = 5000) na spektarot na
analogniot signal X (j). O~igledno e deka nema preklopuvawe.
Diskreten signal (Ts = 0.2 msec)
1

x1(n)

0.8
0.6
0.4
0.2
0
-5

-4

-3

-2

-1

0
t in msec.

0.4

0.6

0.8

Spektar na diskretniot signal


10

X1(w)

8
6
4
2
0
-1

-0.8

-0.6

-0.4

-0.2
0
0.2
Frekvencija vo pi edinici

Da se izvr{i diskretizacija na analogniot signal xa(t) so frekvencija na


diskretizacija fs = 1000 prim/sec. Da se odredi i nacrta spektarot na
diskretiziraniot signal x2[n]. Da se diskutira dobieniot rezultat.

So startuvawe na demoto con2dis mo`e da se dobie jasna slika za


diskretizacijata i preklopuvaweto {to pritoa mo`e da se javi.
Rekonstrukcija
Matemati~ki rekonstrukcijata na analogniot signal xa(t) od negovata disktretna
verzija x[n] mo`e da se opi{e so slednata relacija za ekstrapolacija:
x a (t )

x[n] sinc[ f

s (t

nTs )]

Kade {to sinc ( x) (sin x) / x e ekstrapolaciska funkcija. Vakvata idealna


ekstrapolacija ne e prakti~no ostvarliva, bidej}i celiot sistem e nekauzalen, a
so toa i fizi~ki neostvarliv. Vo praksa se koristat ekstrapolatori od kone~en
red. Zaradi ednostavno nie }e gi razgledame ekstrapolatorite od red nula i eden.
Vo MATLAB ekstrapolacija pome|u primerocite mo`e da se ostvari na nekolku
na~ini. Funkcijata sinc(x), so koja se generira funkcijata (sin x) / x mo`e da se
iskoristi za rekonstrukcija na signal so kone~na dol`ina. Ako e daden x[n] i ako
sakame da izvr{ime ekstrapolacija na mnogu fina rezolucija, so interval t,
toga{ gornata relacija postanuva:

26


_____________________________________________________________________________________

x a (mt )

n2

x[n] sinc[ f

s ( mt

nTs )],

t1 mt t 2

n n2

Od primerocite x1[n] }e izvr{ime rekonstrukcija na signalot xa(t), so slednata


niza na naredbi:
% Diskreten signal x1(n)
>> Ts = 0.0002; Fs = 1/Ts; n = -25:1:25; nTs = n*Ts;
>> x1 = exp(-1000*abs(nTs));
% Rekonstrukcija na analogniot signal
>> Dt = 0.00005; t = -0.005:Dt:0.005;
>> xa = x1*sinc(Fs*(ones(length(nTs),1)*t-nTs'*ones(1,length(t))));

% proverka
>> error = max(abs(xa - exp(-1000*abs(t))))
% Prikaz
>> plot(t*1000,xa); hold on
>> xlabel('t in msec.'); ylabel('xa(t)')
>> title('Reconstruiran signal od x1(n) so pomos na sinc funkcijata');

>> stem(n*Ts*1000,x1); hold off

Maksimalnata gre{ka pome|u rekonstruiraniot i originalniot analogen signal e


relativno mala i e rezultat na faktot {to xa(t) ne e so ograni~en spektar (kako i
poradi kone~niot broj na primeroci).

Da se izvr{i rekonstrukcija na analogniot signal xa(t) od primerocite na


signalot x2[n]. Da se diskutira dobieniot rezultat.

Drug na~in kako mo`e da se izvr{i rekonstrukcija vo MATLAB e so pomo{ na


funkciite stairs i plot, koi{to simuliraat esktrapolacija od nula i prv red.
Zna~i so ovie funkcii ne se presmetuva xa(t), tuku samo se prika`uva negoviot
oblik dobien od primerocite na x[n].
%Rekonstrukcija so koristenje na stairs i plot funkciite
% Diskreten signal x1(n) : Ts = 0.0002
>> Ts = 0.0002; n = -25:1:25; nTs = n*Ts;
>> x1 = exp(-1000*abs(nTs));
% Reconstrukcija so koristenje na stairs funkcijata
>> subplot(2,1,1); stairs(nTs*1000,x1); hold on
>> xlabel('t in msec.'); ylabel('xa(t)')
>> title('Rekonstruiran signal od x1(n) so ekstrapolator od red
nula');
>> stem(n*Ts*1000,x1); hold off
27


_____________________________________________________________________________________

% Reconstrukcija so koristenje na plot funkcijata


>> subplot(2,1,2); plot(nTs*1000,x1);
>> xlabel('t in msec.'); ylabel('xa(t)')
>> title('Rekonstruiran signal od x1(n) so ekstrapolator od red
eden'); hold on
>> stem(n*Ts*1000,x1); hold off

Od dobienite grafici mo`e da se vidi deka rekonstrukcijata so ekstrapolacijata


od red nula e gruba i deka e neophodna dopolnitelno procesirawe na analogniot
signal. Ektrapolacijata od red eden poka`uva mnogu podobri rezultati.
Generalno, dokolku frekvencijata na diskretizacija e mnogu pogolema od Nyquistovata frekvancija, so ekstrapolatorot od prv red se ostvaruvaat zadovolitelni
rekonstrukcii na analogniot signal.

:
1. xa (t ) cos( 2t ) 2 sin( 15t ) , t (0, 10) ,
: f s 10
/, x1[n] ,
f s 20 /,
x2 [n] .
) xa (t ) x1[n] ;
) xa (t ) x2 [n] ;
) x1[n] x2 [n]
T [ , ] ,
;
) x1 (t ) x2 (t )
x1[n] x2 [n] ;

28


_____________________________________________________________________________________

VE@BA 5

Diskretna Furieova transformacija (DFT)


DFT na niza od N elementi {x[n], n = 0, 1, , N-1}, e definirana so kone~na suma
X [k ]

N 1

x[ n ] W

nk

k 0, 1, ... , N 1

(4.1)

n 0

kade W = e-j2 pretstavuva jadro na transformacijata.


Od dobienata niza {X[k], k = 0, 1, , } originalot {x[n]} se rekonstruira so
x[ n ]

1
N

N 1

X [ k ]W

nk

n 0, 1, ... , N 1

(4.2)

k 0

Implementacija na DFT (4.1) e mo`na na nekolku na~ini. Pri direktna


implementacija na relacijata 4.1, za presmetuvawe na sekoj primerok od X[k]
potrebno e sumirawe vo eden for . . . end ciklus. Za presmetuvawe na site DFT
koeficienti potreben e u{te eden for . . . end ciklus. Vo MATLAB, vakvata
implementacija so dva for . . . end ciklusa ne e efikasna. Za efikasna
implementacija vo MATLAB potrebno e relaciite 4.1 i 4.2 da se pretstavat vo
matri~en oblik. Ako x i X se vektori koloni koi gi sodr`at koeficientite na
x[n] i X[k], respektivno, toga{ relaciite 4.1 i 4.2 mo`at da se napi{at vo
matri~en oblik:
X=Tx
(4.3)
i
x = T-1 X
(4.4)
kade T = [W i j]; i, j = 0,1, . . . , N-1 e matrica na transformacijata, a T 1 = (1/ N) T*.
So slednite MATLAB funkcii se imlementiraat relaciite 4.3 i 4.4.
____________________________________________________________
function [X] = dft(xn,N)
%
%
n
k

Presmetuva diskretna Furieova transformacija


na konecna niza xn so dolzina N
= [0:N-1];
% vektor za indeksite n
= [0:N-1];
% vektor za indeksite k

W = exp(-j*2*pi/N);

% jadro na transformacijata

nk = n'*k;
T = W.^ nk;

% NxN matrica so elementi nk


% matrica na transformacija

Xk = xn *T;

% DFT koeficienti

function [xn] = idft(Xk,N)


%
n
k
W

Presmetuva inverzna diskretna Furieova transformacija


= [0:1:N-1];
% vektor za indeksite n
= [0:1:N-1];
% vektor za indeksite k
= exp(-j*2*pi/N);
% jadro na transformacijata

nk = n'*k;

% NxN matrica so elementi nk

T = W .^ (-nk);

% inverzna matrica na transformacija

xn = (Xk * T)/N;

% IDFT koeficienti

29


_____________________________________________________________________________________

Ako e dadena nizata {x [n], n = 0, 1, 2, 3} = {1, 1, -1, -1} nejzinata DFT mo`e da se
presmeta so slednata niza naredbi:
>> x=[1,1,-1,-1]; N=4;
>> X=dft(x,N)
X =
0

2.0000 - 2.0000i

2.0000 + 2.0000i

Amplitudite i aglite na X[k] se


>> A=abs(X), phi=angle(X)*180/pi
A =
0

2.8284

2.8284

-45.0000

45.0000

phi =

Dadena e diskretna niza so dol`ina N =12


{x[n], n = 0, 1, , 11} = {1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1}
So pomo{ na funkcijata freqz odredete g i nacrtajte g amplitudniot
spektar na nizata {x[n]}.
So pomo{ na funkcijata dft odredete g i nacrtajte (koristete ja
funkcijata stem) amplitudata na DFT koeficientite X[k].
Obidete se da gi nacrtate gornite grafici (koristete ja funkcijata hold) na
eden grafik. Poka`ete deka DFT koeficientite pretstavuvaat primeroci od
spektarot na signalot za to~no opredeleni frekvencii. Odredete gi tie
frekvencii.

Da se presmeta DFT na slednite nizi.


x1=[1,zeros(1,7)];

% x[n]=delta[n],

x2=ones(1,8);

% x[n]=u[n]

x3=[1,-1,1,-1,1,-1,1,-1];

% x[n]=(-1)^n;

x4=[0,0,0,0,1,0,0,0];

% x[n]=delta[n-4]

x5=exp(2i*pi/8*3*(0:7));

% Kompleksna eksponencijalna
% funkcija so omega=3*pi/4;

Da se prika`at amplitudite na DFT koeficientite.

Generirajte ja nizata {x[n] = cos(0.48 n)+cos(0.52 n), 0 n 15 }, so dol`ina 16.


Presmetajte ja nejzinata DFT i prika`ete gi amplitudite na DFT
koeficientite. Prodol`ete ja nizita so nuli do dol`ina 64 i povtorno
prika`ete gi amplitudite na DFT koeficientite.
Povtorno generirajte ja nizata {x [n]} no sega so dol`ina 64 i nacrtajte gi
amplitudite na DFT koeficientite. Sporedete gi dobienite grafici i
objasnete gi razlikite.

30


_____________________________________________________________________________________

Brza Furieova transformacija (FFT)


Brzata Furieova transformacija e algoritam za brzo presmetuvawe na DFT. Vo
MATLAB, eden brz algoritam za presmetuvawe na DFT na kone~na niza e
implementiran so funkcijata fft. Op{t oblik na funkcijata
X=fft(x,N)
so {to se dobiva DFT na nizata x presmetana vo N to~ki. Ako dol`inata na nizata
x e pomala od N, nizata x se dopolnuva so nuli do dol`ina N. Ako argumentot N se
ispu{ti, toga{ dol`inata na DFT e ista so dol`inata na nizata x.
Funkcijata fft e vgradena funkcija (ne e dostapna kako m-datoteka) i spored toa
se izvr{uva mnogu brzo. Ako N e stepen so osnova 2, pri izvr{uvaweto na
funkcijata se primenuva brz FFT algoritam. Ako N ne e stepen so osnova 2, N se
razlo`uva na prosti faktori, i se primenuva ne{to pobaven FFT algoritam.
Kone~no ako N e prost broj, FFT se sveduva na presmetuvawe na DFT po definicija.
Inverznata DFT se presmetuva so funkcijata ifft, koja ima isti karakteristiki
kako i fft.

Generirajte ja nizata {x[n]=cos ( n/99), 0 n 99 }. So pomo{ na parot naredbi


tic i toc, presmetajte go vremeto potrebno za presmetuvawe na DFT (so
pomo{ na funkciite dft i fft) na nizata vo N =512 i N = 514 to~ki.
Komentirajte go dobieniot rezultat.
Upotreba na tic/toc naredbata:

>> tic; naredbi (funkcii); toc

:
1.
x[n] [1, 1, 1, 1, 1, 1, 1, 1, 0, 0] T [0, ] .
DFT 20 x[n ] , DFT
.
2. DFT, 40
x[n ] (
), T [0, ] .

31


_____________________________________________________________________________________

VE@BA 6

Linearna i cikli~na konvolucija


Linearna konvolucija na dve kone~ni kauzalni nizi {x[n]} i {g[n]} so dol`ini N i
L, respektivno, e kauzalna niza so dol`ina N+L-1
s[n ]

k 0

k 0

f [k ] g[n k ] f [n k ] g[k ],

n 0,1,..., N L 2

Implementacija na linearnata konvolucija vo MATLAB mo`e da se izvr{i so


funkcijata conv.
Za dve kone~ni nizi {x[n]} i {g[n]} so ista dol`ina N, cikli~nata konvolucija e
kone~na niza {c[n]} so dol`ina N definirana so
c[n ]

N 1

N 1

m 0

m 0

f [m] g[(n m)] f [(n m)] g[m],

n 0,1,..., N 1

kade {to so (n-m) e ozna~eno n-m mod N.


Funkcijata cikconvt (ne e standardna MATLAB funkcija) mo`e da se iskoristi
za presmetuvawe na cikli~nata konvolucija.

Dadeni se dve nizi {x1[n]}={1,2,2,1,2,2,1,2,2,1} i {x2[n]}={1,2,3,4,5,6,7,8,9,10} so


ista dol`ina N = 10.
Da se presmeta nivnata linearna konvolucija {s[n]}.
Da se presmeta nivnata cikli~na konvolucija {c[n]}.
Da se presmeta cikli~nata konvolucija taka da bide ednakva so linearnata
konvolucija.

Grafi~ka interpretacija na linearnata i cikli~nata konvolucija mo`e da se


dobie so ispi{uvawe na naredbata dconvdemo na komandnata linija. Po
izvr{uvawe na naredbata }e se otvori prozorecot Discrete Convolution Demo. Vo
Plot Options menito odberete ja opcijata Show Circular Convolution i od levata
strana }e se pojavi u{te eden prozorec vo koj se prika`uva cikli~nata
konvolucija na dvate izbrani nizi.

Da se presmeta DFT na nizite {x1[n]} i {x2[n]} definirani pogore. Da se


presmeta IDFT na proizvodot {X1[k] X2[k]}. Dobieniot rezultat da se sporedi so
nivnata cikli~na konvolucija {c[n]}.

So pomo{ na DFT da se presmeta linearna konvolucija na nizite {x1[n]} i


{x2[n]}.

32


_____________________________________________________________________________________

Konvolucija na dolga niza


Postojat dva metoda na koi, koristej}i cikli~na konvolucija dobiena so pomo{
na DFT mo`e da se presmeta linearna konvolucija na dolga niza. Vo sledniot
primer e ilustriran metodot na prekolopeni vlezovi. Treba da se presmeta
linearna konvolucija na nizite {x[n] = (n+1), 0 n 9 }i {h[n]} = {1, 0, -1}, so pomo{
na cikli~na konvolucija vo N = 6 to~ki.
Najprvin nizata {x[n]} se deli na podnizi so dol`ina Nx = N Nh +1 = 4, so {to se
dobivaat 3 podnizi. Bidej}i dol`inata na pokratkata niza e Nh = 3, sekoja podniza
}e se preklopuva so prethodnata so Nh 1= 3 1 = 2 primeroci i Nh 1= 2 nuli se
dodavat na po~etokot na prvata podniza. Taka podnizite }e bidat:
>> x1=[0,0,1,2,3,4];
>> x2=[3,4,5,6,7,8];
>> x3=[7,8,9,10,0,0];
Bidej}i se presmetuva cikli~na konvolucija vo 6 to~ki poslednata podniza e
prodol`ena so dve nuli.
Potoa se presmetuva cikli~na konvolucija na sekoja podniza so {h[n]}:
>> h=[1 0 1 0 0 0];
>> y1=cikconvf(x1,h,6);

% cikconvf presmetuva ciklicna

>> y2=cikconvf(x2,h,6);

% konvolucija so pomos na DFT

>> y3=cikconvf(x3,h,6);
Kone~no, se otfrlaat prvite Nh 1= 2 primeroci od sekoja dobiena podniza yi i se
formira nizata y koja pretstavuva linearna konvolucija na x i h
>> y= [y1(3:6) y2(3:6) y3(3:6)]
y =
1

10

Istiot rezultat se dobiva i ako linearnata konvolucija se presmeta so pomo{ na


funkcijata conv:
>> y=conv(x,h)
y =
1

10

So funkcijata prvlez e implementirana pogore opi{anata postapka za


procesirawe na dolgi nizi po metodot na preklopeni vlezovi.

33


_____________________________________________________________________________________

_____________________________________________________________________________
function [y] = prvlez(x,h,N)
% Linearna konvolucija na dolga niza
% po metodot na preklopeni vlezovi
% ---------------------------------------% [y] = prvlez(x,h,N)
% y = izlezna niza
% x = vlezna niza
% h = impulsen odziv
% N = dolzina na ciklicnata konvolucija
%
Lenx = length(x); M = length(h);
M1 = M-1; L = N-M1;
h = [h zeros(1,N-M)];
x = [zeros(1,M1), x, zeros(1,N-1)];

% se dodavaat (M-1) nuli


% pred prvata niza
% broj na sekcii (podnizi)

K = floor((Lenx+M1-1)/(L));
Y = zeros(K+1,N);
% Konvolucija na sekoja podniza so h
for k=0:K
xk = x(k*L+1:k*L+N);
Y(k+1,:) = cikconvt(xk,h);
end
Y = Y(:,M:N)';
% otfrlanje na prvite (M-1) primeroci
% od sekoja podniza
y = (Y(:))';
% formiranje na izleznata niza

So slednata niza naredbi mo`e da se izvr{i verifikacija na rabotata na


funkcijata prvlez:
>> n=0:9; x=n+1; h=[1,0,-1]; N=6;
>> y=prvlez(x,h,N)
y =
1

10

Pogolema efikasnosta na funkcijata prvlez mo`e da se dobie ako delot vo koj se


presmetuva cikli~nata konvolucija se realizira so FFT. Ova podobruvawe e
izvedeno vo funkcijata prvlezf (help prvlezf). Dol`inata na cikli~nata
konvolucija e sekoga{ stepen so osnova 2.

:
1.
{x[n]} i {h[n]}.

34


_____________________________________________________________________________________

VE@BA 7
Dizajn na FIR filtri so metod na prozorci
Impulsniot odziv na digitalen filter za niski frekvencii so (idealna)
frekvenciska karakteristika

1
H d (e jT )
0

p
p

e so beskone~no traewe i ne e kauzalen:


hd [n] = sin(n pT)/n,

nZ .

Bidej}i negovata prakti~na realizacija ne e mo`na, nu`no e da se ograni~i


traeweto na impulsniot odziv so presekuvawe (mno`ewe so pravoaglen prozorec).
Taka na primer, usvojuvaj}i dol`ina na prozorecot N = 51, grani~na frekvencija
na idealniot filter p= 0.4 , T=1sec, so komandata
>> h=0.4*sinc(0.4*(-25:25));
se dobiva impulsen odziv na nekauzalniot FIR filter so linearna faza.
Prozorecot koj{to ovde e primenet e pravoagolen prozorec (boxcar).
Amplitudnata karakteristika na filterot mo`e da se vidi so:
>> w=[0:1:500]*pi/500;
>> H=freqz(h,1,w);
>> plot(w/pi,abs(H)), grid

Zgolemete ja dol`inata na prozorecot na N = 91 i nacrtajte ja frekvenciskata


karakteristika na dobieniot filter. Komentirajte go vlijanieto na
dol`inata N na frekvenciskata karakteristika.

Efektot na Gibbs mo`e da se namali so izbor na drug vid prozorec. Primenuvaj}i


Hamming-ov prozorec so dol`ina 51 na istiot filter, so komandata
>> h=h.*hamming(51);
>> H=freqz(h,1,w);
>> hold on, plot(w/pi,abs(H)), grid
jasno se gleda namaluvaweto na efektot na Gibbs po cena na zgolemuvawe na
preodniot opseg.
MATLAB sodr`i nekolku prozorci koi se koristat za dizajn na filtri: boxcar,
triang, hanning, hamming, blackman i kaiser.
MATLAB funkciite fir1 i fir2 za proektirawe na filtri so kone~en impulsen
odziv se zasnovani na metodot so prozorci. Funkcijata fir1 se koristi za filtri
so eden propusten opseg, dodeka fir2 ovozmo`uva filterot da ima pove}e
propusni opsezi. Pove}e za funkciite fir1 i fir2 doznajte so naredbata help.
So pomo{ na slednata skripta prika`ana e postapkata za dizajn na FIR filter za
niski frekvencii po metodot so prozorci, so slednite parametri:
-

grani~na frekvencija na propusniot opseg p= 0.2 ;

grani~na frekvencija na nepropusniot opseg q= 0.3

maksimalno slabeewe vo propusniot opseg 0.25 dB;

minimalno slabeewe vo nepropusniot opseg 50 dB.

35


_____________________________________________________________________________________

Najprvin za dadenite parametri se izbira prozorecot i dol`inata na istiot. I so


Hamming-oviot i so Blackman-oviot prozorec mo`e da se obezbedi slabeewe
pogolemo od 50 dB vo nepropusniot opseg. Bidej}i Hamming-oviot prozorec
obezbeduva potesno preodno podra~je, a so toa ima i pomala dol`ina go izbirame
Hamming-oviot prozorec. Iako maksimalnoto slabeewe vo propusniot opseg ne se
koristi vo procesot na dizajnirawe potrebno e da se proveri dali istoto e vo
dozvolenite granici na tolerancija.
>> wp=0.2*pi; wq=0.3*pi;
>> opseg=wqwp;

% sirocina na preodniot opseg

>> N=ceil(6.6*pi/opseg)+1

% procenka na dolzinata N

>> wc = (wq+wp)/2

% granicna frekvencija na idealnoit LP

>> h=fir1(N,wc/pi);

% koeficienti na filterot

>> [H,w]=freqz(h,1,1000,whole);
>> H=(H(1:1:501)); w=(w(1:1:501));
>> A=abs(H);

%amplitudna karakteristika

>> Adb=-20*log10((A+eps)/max(A));

%slabeenje vo odnos na max(A)

>> delta_w = 2*pi/1000;


>> Amax= max(Adb(1:1:wp/delta_w+1))

% max slabeenje vo
% propusniot opseg

>> Amin= min(Adb(wq/delta_w+1:1:501))) % min slabeenje vo


% nepropusniot opseg
>> plot(w/pi,-Adb);title('Amplitudna karakteristika vo dB');grid
>> axis([0 1 -100 10]);
>> xlabel('frekvencija vo pi edinici'); ylabel('dB')
Zna~i, za dol`ina N=67, minimalnoto slabeewe vo nepropusniot opseg e 52.92 dB,
a maksimalnoto slabeewe vo propusniot opseg e 0.0364 dB so {to se zadovoleni
zadadenite specifikacii.

[to }e se promeni vo dizajnot ako dol`inata na prozorecot e N = 61?

Dizajn na ednakvobranovi filtri


Parks-McClellan-oviot algoritam za dizajn na ednakvobranovi filtri vo MATLAB e
implementiran so funkcijata firpm, ~ija najop{ta sintaksa e:
h=firpm(N,f,m,weights,ftype).
Mo`ni se slednite verzii na sintaksata:

h=firpm(N,f,m) dizajnira FIR digitalen filter h od red N (dol`inata na


filterot e N+1), ~ija frekvenciska karakteristika e specificirana so
vektorite f i m. Vektorot f gi sodr`i grani~nite frekvencii na opsezite
izrazeni vo pi edinici, po~nuvaj}i od 0.0 i zavr{uvaj}i so 1.0. Vektorot m ja
sodr`i posakuvanata amplitudna karakteristika za frekvenciite
specificirani vo f. Dol`inata na vektorite f i m mora da bide ista i mora da
bide paren broj. Te`inskata funkcija vo sekoj opseg e 1, {to zna~i deka
toleranciite vo sekoj opseg se isti.

36


_____________________________________________________________________________________

h=firpm(N,f,m,weights) sli~na na gornata sintaksa, so toa {to vektorot


weights gi sodr`i te`inskite faktori za sekoj opseg.

So pomo{ na slednata skripta prika`ana e postapkata za dizajn na ednakvobranov


FIR filter za niski frekvencii so slednite parametri:
-

grani~na frekvencija na propusniot opseg p= 0.2

grani~na frekvencija na nepropusniot opseg q= 0.3

maksimalno slabeewe vo propusniot opseg 0.25 dB;

minimalno slabeewe vo nepropusniot opseg 50 dB.

>> wp = 0.2*pi;

wq = 0.3*pi;

Amax = 0.25;

Amin = 50;

>> delta1 = (10^(Amax/20)-1)/(10^(Amax/20)+1)


>> delta2 = (1+delta1)*(10^(-Amin/20))
>> weights = [delta2/delta1 1]

% tezinska f-cija

% za dadenite parametri se procenuva pocetnata


% vrednost za dolzinata N
>> deltaf = (wq-wp)/(2*pi)
>> N = ceil((-20*log10(sqrt(delta1*delta2))-13)/(14.6*deltaf)+1)
>> f = [0 wp/pi wq/pi 1]
>> m = [1 1 0 0];
>> h = firpm(N-1,f,m,weights);

% koeficienti na filterot

% Odreduvanje na amplitudnata k-ka na filterot


>> [H,w]=freqz(h,1,1000,whole);
>> H=(H(1:1:501)); w=(w(1:1:501));
>> A=abs(H);
>> Adb=-20*log10((A+eps)/max(A)); % slabeenje vo odnos na max(A)
% Odreduvanje na minimalnoto slabeenje vo nepropusniot opseg
>> delta_w = 2*pi/1000;

wqi=wq/delta_w+1; wpi = wp/delta_w;

>> Asd = min(Adb(wqi:1:501))


% Bidejki slabeenjeto e pomalo od baranoto, se zgolemuva N i
% postapkata se povtoruva dodeka ne se dobie baranoto slabeenje
>> N = N+1;
>> h = firpm(N-1,f,m,weights);
>> [H,w]=freqz(h,1,1000,whole);

37


_____________________________________________________________________________________

>> H=(H(1:1:501)); w=(w(1:1:501));


>> A=abs(H);
>> Adb=-20*log10((A+eps)/max(A));
>> Asd=min(Adb(wqi:1:501))

Za N = 47 baranite specifikacii se zadovoleni i postapkata se prekinuva.


Dobienata dol`ina na dizajniraniot filter N = 47 e zna~itelno pomala vo
sporedba so N = 67 {to, za istite specifikacii, be{e dobiena so metodot na
prozorci.

:
1. Parks-McClellan-
:
0 H (e j ) 0.01

0 0.2

0.95 H (e j ) 1.05

0.35 0.65

0 H (e j ) 0.03

0.75

38

You might also like