|
[ exekutoradun @ 18.03.2006. 12:17 ] @
| zdravo svima ima sledeci problem, poceo sam prije 3 dana da radim u matlabu i dobio sam sledeci zad. ali nit znam da radim nesto u matlabu ili razumjem dobro engleski. Pa htio sam vas zamoli ako mi neko od prilike moze rec sta ja u ovom zad. trebam da uradim.
Puno hvala unaprijed
Consider an LTI system specified by the following constant-coeffcient difference equation
y[n] = a0x[n] + a1x[n − 1] + . . . aM−1x[n −M + 1], (1)
where x[n] is the input, and y[n] is the output sequence, respectively. Let us further assume
that N samples of x[n] and y[n] are available, i.e, for n = 0..N − 1. We will also assume that
x[n] = 0 for n < 0 and n > N.
(a) It is possible to rewrite eq. 1 in the matrix/vector form as
y = Xa, (2)
where y = [y[0] y[1] . . . y[L−1]]T , L = N +M −1, and a = [a[0] a[1] . . . a[M −1]]T . Construct
the matrix X so as to ensure the equivalence to eq. 1. What are the dimensions of the resulting
matrix X?
(b) Write a Matlab function lti equ(x,a) that implements eq. 2 using the results obtained in
the task (a). The function lti equ(x,a) should have two input arguments: an N-dimensional
input sequence {x[n]}, and an M-dimensional vector of system coeffcients a. The function
should return the resulting output vector y.
Note that it is allowed to use only a single for-loop in your code to construct the matrix
X! The function must work with input sequences and system coeffcients of arbitrary length
(of course within the memory restriction of your computer).
(c) Check the correctness of your code by comparing the outputs of the lti equ(x,a) function
with the result of the Matlab function conv(x,a) that computes the convolution of the two
input arguments x and a. The outputs of both lti equ(x,a) and conv(x,a) should be
identical1 for the same input sequences and system coeffcients. Support your prove by the
corresponding plots.
1Note also, that the dierences of the order 10−14 between signals can be neglected since they are mostly
caused by Matlab rounding-offerrors. |
[ uranium @ 18.03.2006. 23:45 ] @
a)
Cilj je napraviti matricu
Očigledno je da je matrica formata  .
Zbog uslova o korišćenju najviše jedne for petlje, kôd bi mogao da izgleda nekako ovako:
Ne znam da li je moguće naterati Matlab da indeksiranje nizova ne kreće od 1 nego od 0. Zato su formule malo "translirane".
Code:
%pretpostavka je da sve neophodne promenljive već imaju dodeljene vrednosti
X=zeros(L,M);
m=length(x);
for i=1:L
v=max(1+i-m,1):min(i,M);
w=min(i,m):-1:max(i+1-M,1);
X(i,v)=x(w);
end
Mislim da je sada ostatak zadatka jednostavan.
[ exekutoradun @ 19.03.2006. 10:52 ] @
Hvala ti puno mislim da sam sad skontao pousacu tako nesto da uradim.
[ Katja_Zap @ 27.03.2006. 00:39 ] @
Da ne otvaram novi topik, prisljamcicu se na " exekutoradun-ov " topic, pa bih molio za odgovor na slijedece pitanje.
Ucim da napravim .m zapis, pa sam dosao do slijedeceg problema.
Izracunao sam velicinu npr. " L ", koju zelim da ispisem nakon prateceg teksta. Npr. u slijedecem formatu:
Velicina " L " je: xxx ( tu bi bio ispisan prethodno dobiveni rezultat xxx )
Koristio sam " eval ", ali ne mogu da dobijem ispis iza dvotacke, nego dobijem " L " u slijedecem redu, a rezultat u redu iza njega, a sve to praceno sa " ans = xxx " u slijedecim redovima.
I jos jedno pitanje: Kako se u ispisu preskace jedan red ?
Hvala unaprijed
[ uranium @ 27.03.2006. 12:19 ] @
Da bi sprečili pojavljivanje:
Code:
ans=
dovoljno je da iza odgovarajućih izraza napišemo znak ;
Ako je promenljiva L već dobila vrednost, onda bi sledeći deo koda mogao da reši problem prikazivanja rezultata:
Code:
disp([10,'L je: ',num2str(L),10]);
Ovde je broj 10 kôd za skok u novu liniju (namerno je napravljen preskok na početku i na kraju), a funkcija num2str, kao što joj ime sugeriše, pretvara numeričku vrednost u znakovnu (tj. u string).
[Ovu poruku je menjao uranium dana 27.03.2006. u 13:20 GMT+1]
[ Katja_Zap @ 27.03.2006. 14:00 ] @
Odlicno " Uranium ", odlicno !! Stvar sljaka.
Jos samo da ponistim naknadno pojavljivanje " ans = .... " na samom kraju, poslije ispisa koji si mi pokazao. Znam da se simbol " ; " stavlja tokom rada u " MatLab-u " u direktnom racunanju, ali ovo sa programiranjem me zeza.
[ uranium @ 27.03.2006. 14:10 ] @
Možda bih mogao da pomognem ako mi pokažeš sadržaj tog .m fajla.
[ Katja_Zap @ 27.03.2006. 14:15 ] @
Dakle, ne moze biti trivijalnije.
function L = ind ( Frez, c )
%Program za racunanje induktiviteta " L " iz izraza za f-ju
Frez = input ('Rezonantna frekvencija ( Frez ): ') ; % Unosi se ' Frez ' sa tastature
C = input ('Kapacitet ( C ): ') ; % Unosi se ' C ' sa tastature
om = 2*pi*Frez ; % Provjera
L = 1/(C*om*om) ; % om*om - ne nalazim na tast. poznati simbol za potenciranje
eval om ;
disp ([ 10, 'L je: ', num2str (L), 10 ]) ;
end
[ uranium @ 27.03.2006. 14:41 ] @
Najlakše ćeš to rešiti ovako:
Code:
Frez=input ('Rezonantna frekvencija ( Frez ): ');
C=input ('Kapacitet ( C ): ') ;
om=2*pi*Frez;
L=1/(C*om^2);
disp ([10,'L je: ',num2str(L),10]) ;
Dakle, izbačena je linija:
Code:
function L = ind(Frez,c)
tako da se više ne radi o funkcijskom, nego o komandnom fajlu. Takođe, nije baš uobičajeno (a ni dobro) definisati f-ju sa parametrima (koji se prosleđuju prilikom poziva f-je), a onda u samom telu f-je, ignorisati prosleđene parametre, pa ih nanovo unositi (obrati pažnju da malo c i veliko C nisu isto u Matlabu).
[ Katja_Zap @ 27.03.2006. 16:42 ] @
Radi ! Bez greske.
Hvala na rjesenju i na napomeni o fumkcijskim i komandnim zapisima. Nisam znao. Moram negdje pogledati i obratiti paznju.
Pozdraf
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|