Hleda se algoritmus

Marek Peca marek@tynska.cuni.cz
Pondělí Leden 17 20:07:42 CET 2005


Mily pane profesore,

mozna uz to mate vyreseno, vzpomnel jsem si na Vas az dneska rano.

Myslim, ze by to melo jit resit tou krasnou a casove nijak nenarocnou
metodou, kterou se "rucne" prepisuji stavova schemata systemu do
matic. A ziskat z tech matic diferenc(ial)ni rovnice nebo prenos uz
je brnkacka pro pocitac i cloveka.

Takze algoritmus... pracujete s DSP, takze predpokladam diskretni
verzi. Schema se sklada z prvku
- nasobeni konstantou
- scitacek
- zpozdovacu 1/z (predpovidace (z) radsi nevedu, jinak se do toho
zamotam :-))

Mate nejak definovane body, ktere tvori vstup (zrejme i vystup, ale
to neni pro tento ucel povinne).

* vstupy systemu bereme jako vektor buzeni (u)

* vystup _kazde_ zpozdovacky budeme chapat jako jednu stavovou
promennou (zpozdovacka je vlastne pamet na 1 cislo) -- ve spojite
verzi by to byl integrator; vektor stavovych velicin si oznacime x

* od vstupu kazde zpozdovacky jdeme tak dlouho, dokud nenajdeme a
nezaznamename si vsechny "konce" -- tj. bud vystupy jinych
zpozdovacek (x[k]) nebo vstupy systemu (u[k]); vysledek si zapiseme
pro vstup v pomoci vektoru m a c jako vstup[v] = m.x + c.u;
vektor m pak nacpeme do matice M na radek v, vektor c do matice C na
radek v

* po projiti vsech zpozdovacek mame ctvercovou matici M (velikost je
rovna poctu zpozdovacek, tj. radu systemu) a matici C, vysokou jako M
a sirokou jako vektor u; tim mame popsano chovani vnitrnich stavu
systemu:

x(t+1) = Mx(t) + Cu

-- mame-li definovany nejake vystupy (vektor y), vysledujeme
obdobnym zpusobem dalsi dve matice, D a E, pro vztah

y = Dx + Eu

* timto mame vlatsne uz napsanou diferencni rovnici (to jste chtel,
myslim); pokud chcete prenos (=> frekvencni charakteristiku), da se
do toho cosi dosadit, ale abych to nezvrzal, radsi se podivam do
skript.


Zatim se mejte hezky a at Vam to funguje.
Zdravi Marek P.


P.s> Projistotu rozepisu druhou hvezdicku:
pro k pres vsechny stavy:
  - volat funkci prolejzacka(vstup zpozdovacky[k])
  - tahle funkce vrati vektor m (velikost=pocet stavu), ten se soupne
na radek k do matice M, dale vektor c (velikost=pocet vstupu
systemu), ten se soupne na radek k do matice C

funkce prolejzacka(misto v obrazku), vraci m, c
  misto v obrazku je
    - vstupem systemu cislo n
        -- vrat m[*]=0, c[n]=1, c[ostatni]=0
    - vystupem zpozdovacky cislo n
        -- vrat m[n]=1, m[ost]=0, c=0
    - vystupem nasobicky konstantou g
        -- vrat g*prolejzacka(vstup tehle nasobicky)
    - vstupem scitacky
      /* BUNO beru jen scitacky s dvema + vstupy */
        -- vrat prolejzacka(prvni vstup) + prolejzacka(druhy vstup)
/* to je cely ;-) */


On Wed, 5 Jan 2005 Serych@panska.cz wrote:

> Dobry den,
> letos jsem si vzal dva maturanty na dlouhodobou praci, kteri maji vytvorit
> graficky editor pro kresleni DSP algoritmu. Na zaklade obrazku by pak mel
> vygenerovat rovnice onoho filtru tak, aby se tim mohly prohanet cisla treba z
> excela a tak demonstrovat DSP algoritmy. Ovsem asi jsem to trochu prepisk s
> predstavou o svych algoritmizacnich schopnostech a nevim si moc rady s
> algoritmem, ktery z obrazku sestavi rovnice. Mohl by me nekdo prosim
> nakopnout spravnym smerem, pod jakymi klicovymi slovy takove algoritmy
> hledat? 
> 
> Prikladam ukazku obrazku filtru, trojuhelnicek je nasobeni koeficientem,
> obdelnicek je zpozdeni o k kroku (v pripade toho obrazku rekneme ze k=1) a
> plusko je souctovy clen.
> X[n] a Y[n] jsou posloupnosti vzorku. V pripade tohoto obrazku by tedy melo z
> programu vypadnout:
> 
> Y[0]=a * X[0]
> Y[n]=c * Y[n-1] + a * X[n] + b * X[n-1]
> 
> 
> Diky moc za pomoc
> 
> Jakub Serych





Další informace o konferenci Hw-list