Nestandartinių signalų generavimas Matlab terpėje (0)
Atliekant įvairių sistemų modeliavimus kartais prisireikia gauti nestandartinius formų signalus. Tokiu būdų galima perkelti įvairius sumodeliuotus signalus į mikroprocesorines sistemas. Tipiniai trigonometriniai signalai generuojami standartinių funkcijų pagalba. Visi kiti (meandrai, trikampiai, pjūklai ir t.t.) signalai generuojami aprašant juos matematiškai ir programiškai. Šiame dokumente pateiktas periodinio ir neperiodinio trikampio signalo generavimo su Matlab paketu pavyzdys.
Prisijunk prie technologijos.lt komandos!
Laisvas grafikas, uždarbis, daug įdomių veiklų. Patirtis nebūtina, reikia tik entuziazmo.
Sudomino? Užpildyk šią anketą!
Pagrindiniai matematiniai signalai (sinusas, kosinusas, tangentas ir kt..) gali būti sugeneruojami pasinaudojant tipinėmis Matlab funkcijomis. Tačiau nestandartiniai signalai neturi specializuotų funkcijų ir jas reikia parašyti pačiam programuotojui.
Pavyzdžiui generuojant trikampio formos signalą (1 pav.) jį pirmiausiai reikia aprašyti matematinėmis išraiškomis ir tik tada pagal jas rašyti pačią programą.
1 pav. Trikampio formos signalas
Norint tokį signalą aprašyti matematiškai, tenka jį skaidyti į atskiras tieses ir surast kiekvienos tiesės lygtį. Jei signalas turi išgaubtas kraštines, tenka parinkti artimiausią matematinę funkciją - apskritimo arba elipsės lygtį, eksponentinę išraišką. Tačiau dažniausiai naudojama tiesės lygtis. Viena iš galimų tiesės užrašymo lygčių pateikta (2) išraiškoje.
y = a·x + b (1)
kur a ir b - tiesės koeficientai
x, y - tiesėje esančio taško koordinatės
Aprašant laikinius signalus x koorditatė laikoma laiko tėkme (t), y koordinatė - signalo amplitudė (A). Norint pagal (1) išraišką nustatyti tiesės lygtį, tenka surasti nežinomus a ir b koeficientus. Pradžioje signalas išskaidomas į jį sudarančias tieses. Trikampio signalo atveju bus dvi tiesės:
-
laiko momentu 0 - T/2 (amplitudė kinta atitinkamai nuo 0 iki A)
-
laiko momentu T/2 - T (amplitudė kinta atitinkamai nuo A iki 0)
Žinant dviejų tiesių pradinius ir galinius taškus galima sudaryti kiekvienai atskirą lygčių sistemą:
1. Pirmoji tiesė
0 = a·0 + b
A = a·T/2 + b
2. Antroji tiesė
A = a·T/2 + b
0 = a·T + b
Išsprendus kiekvieną lygčių sistemą gaunami a ir b koeficientai, kurie įstatomi į (1) išraišką. Po to dviejų tiesių lygtys apjungiamos bendra išraiška ir gaunama signalo matematinė formulė. Tokiu metodu išprendus trikampio signalo lygtis gauta pilnoji jo išraiška pateikta (2) formulėje.
(2)
Signalai gali būti periodiniai ir neperiodiniai. Paprasčiau programuoti neperiodinius signalus. Signalą pagal (1) išraišką sukuria tokia programa:
%neperiodinio (1 periodo) trikampio generavimas
clear all %kinetamuju isvalymas
A=10; %signalo amplitude
N=100; %atskaitu kiekis signalui
for i=1:N %ciklo formavimas
if i<=N/2 %salygos formavimas
y(i)=2*A*i/N; %kylancio slaito formavimas
else
y(i)=2*A-2*A*i/N; %leidziancio slaito formavimas
end
end
j=1:N; %x asies formavimas grafiko brezimui
stem(j,y); %grafiko formavimas
title('1 periodo trikampis signalas'); %grafiko pavadinimas
xlabel('n'); %grafiko x asies pavadinimas
ylabel('x(n)'); %grafiko y asies pavadinimas
grid on; %grafike tinklelio ijungimas
Gautas grafikas pateiktas 2 pav.
2 pav. Vieno periodo trikampis signalas
Periodinis trikampio signalas gaunamas su sekančia programa:
%periodinio trikampio signalo generavimas
clear all
A=10; %signalo amplitude
Fs=1*10^3; %signalo daznis
Ts=1/Fs; %signalo periodas
Tn=100; %atskaitu skaicius periodui
Fd=Tn*Fs; %diskretizavimo periodas
N=Tn*3; %pilnas atskaitu skaicius
j=1; %ciklo skaitliukas
k=1; %ciklo skaitliukas
i=1; %ciklo skaitliukas
while i<=N %visu periodu generavimas
while (i<=j+Tn-1)&(i<=N)
%vieno periodo generavimo ciklas
if i<j+Tn/2
%kuriame trikampio slaite signalas
y(i)=2*A*k/Tn;
%kylancio slaito formavimas
else
y(i)=2*A-2*A*k/Tn;
%leidziancio slaito formavimas
end
k=k+1; %atskaitu kiekis periode
i=i+1; %suminis atskaitu skaitliukas
end
j=j+Tn; %perkelimas i nauja perioda
k=1; %naujo periodo pradzia
end
jj=1:N; %x asies formavimas grafiko
% brezimui
stem(jj,y); %grafiko formavimas
title(Periodinis trikampis signalas');
%grafiko pavadinimas
xlabel('n'); %grafiko x asies pavadinimas
ylabel('x(n)'); %grafiko y asies pavadinimas
grid on; %grafike tinklelio ijungimas
2 pav. Periodinis trikampio signalas