POK perturbations


Generacja przebiegu prostokątnego (znakomity jako zakłócenie
procesowe, ale też ciekawy dydaktycznie)
A
t
limit
?
t
-limit
Funkcja standardowa sin zwraca jedną wartość dla swojego argumentu;
aby mieć przebieg w funkcji czasu trzeba ją wywoływać wielokrotnie
dla różnych argumentów t;
Aby uzyskać prostokąt (ściślej trapez) trzeba dla dużej amplitudy
np. A = (100* limit)  obciąć sinusoidę instrukcją  if .
program z trójargumantową funkcją trap  pozwala na manipulacje
amplitudą (czyli nachyleniem zbocza) ; program: przeb_trap_fun
double trap (double A, double omegat, double limit)
{ double tr;
tr = A*sin(omegat); // duza sinusoida
tr = (tr>=limit) ? limit: tr; // gorne obciecie
tr = (tr<=-limit)? -limit: tr; //dolne obciecie
#include
return (tr);
#include
}
int i,m,mmax; double t, x, y, z; FILE *wy;
double trap(double,double,double);
main()
{
wy = fopen("c:\\mmmat4\\plotfile\\OUT2m", "wt");
t=0.0; mmax=1000;
for(m=1;m<=mmax;m++)
{
x = trap (100, 2*t, 1.0);
y = trap (4, t, 2.0);
z = trap (100, t, 0.1*m);
fprintf(wy,"%20.12f %20.12f %20.12f %20.12f\n",t,x,y,z);
t += 0.1;
}
fclose(wy);
}
Można też nie manipulować amplitudą i zrobić funkcję trap
dla dwu argumentów : limit i omegat; program: przeb_trap_fun_2arg
double trap (double omegat, double limit)
{double tr, A;
A = 100*limit;
tr = A*sin(omegat); // duza sinusoida
#include
tr = (tr>=limit) ? limit: tr; // gorne obciecie
#include
tr = (tr<=-limit)? -limit: tr; //dolne obciecie
int i,m,mmax; double t, x, y, z; FILE *wy;
return(tr);
double trap(double,double);
}
main()
{
wy = fopen("c:\\mmmat4\\plotfile\\OUT2m", "wt");
t=0.0; mmax=1000;
for(m=1;m<=mmax;m++)
{
x = trap (2*t, 1.0);
y = trap (t, 2.0);
z = trap (t, 0.1*m);
fprintf(wy,"%20.12f %20.12f %20.12f %20.12f\n",t,x,y,z);
t += 0.1;
}
fclose(wy);
}
Generacja zakłóceń i nakładanie ich na przebiegi procesowe
Jako przebiegi zakłócające bardzo przydatne są:
przebieg sinusoidalny,
prostokątny oraz
pseudolosowy.
Prostokątny (już omówiono).
Sinusoidalny jest gotowy: (funkcja sinus(x));
Psedolosowy (już omówiono),
Aby nałożyć na jakiś przebieg czasowy zakłócenie
powinno ono mieć wartość średnia równą zeru.
Powinno więc zmieniać się o tę samą wartość
w górę i w dół. Omówione już funkcje mają
wartości z przedzału [-1, 1].
Program: przeb_rand_stdio.c (przebieg liczb pseudolosowych z przedziału [ 1, +1]
#include
#include
#include
int m,mmax; float t,x; FILE *wy;
int main() {
wy = fopen("c:\\mmmat4\\plotfile\\OUT2m", "wt");
t=0.0; mmax=100;
for(m=1;m<=mmax;m++)
{
x = 2.0*(float)rand()/RAND_MAX - 1.0;
fprintf(wy,"%20.12f %20.12f\n", t,x);
t+=0.1;
}
fclose(wy); system("PAUSE"); return 0;
}
Program PRZEB_rozne_stdio.c naklada na przebieg bazowy ( tu odpowiedz inercyjna
na skok jednostkowy) zakłocenia pseudolosowe, sinusoidalne oraz prostokątne.
Program bez funkcji jest mało czytelny i trudny do dla zmian.
for(m=1;m<=mmax;m++)
#include
{
#include
x = 1.0 - exp(-t/20); // przebieg bazowy
#include
y = 2.0*(float)rand()/RAND_MAX - 1.0; //szum
int i,m,mmax; float t,x,y,z,p,sn,trap,pt;
z = x + 0.1*y; // szum nalozony na przebieg_b
FILE *wy;
sn = sin(3*t);
int main() {
p = x + 0.1*sn; // sin nalozony na przeb.
wy =
trap = 100*sin(2*t); // duza sinusoida
fopen("c:\\mmmat4\\plotfile\\OUT2m", "wt");
trap = (trap>=1.0)? 1.0: trap; // gorne obciecie
t=0.0; mmax=1000;
trap = (trap<=-1.0)? -1.0: trap; //dolne obciecie
pt = x + 0.1*trap;
fprintf(wy,"%lf %lf %lf %lf ", t,x,y,z);
fprintf(wy,"%lf %lf ",sn,p);
fprintf(wy,"%lf %lf\n", trap,pt);
t+=0.1;
}
fclose(wy); system("PAUSE"); return 0; }
Przydatna będzie też własna funkcja randor :
double randor(void)
{return (2*(double) rand()/RAND_MAX  1.0);}
Funkcje:
sin(double),
trap(double omegat, double limit),
randor()
zwracają liczby z przedziału [-1, +1]
 można je nałożyć na na jakiś przebieg
#include int main() {
#include wy =
#include fopen("c:\\mmmat4\\plotfile\\OUT2m", "wt");
int i,m,mmax; t=0.0; mmax=1000;
double t,x,y,z,sn,p,tr,pt; FILE *wy; for(m=1;m<=mmax;m++)
double randor(void) {
{return (2.0*(double)rand()/RAND_MAX - 1.0);} x = 1.0 - exp(-t/20); // przebieg bazowy
double trap (double omegat, double limit) y = randor(); z = x + 0.1*y;
{double tr, A; sn = sin(2*t); p = x + 0.1*sn;
A = 100*limit; tr = trap (2*t, 1.0); pt = x + 0.1*tr;
tr = A*sin(omegat); fprintf(wy,"%lf %lf %lf %lf ", t,x,y,z);
tr = (tr>=limit) ? limit: tr; fprintf(wy,"%lf %lf ",sn,p);
tr = (tr<=-limit)? -limit: tr; fprintf(wy,"%lf %lf\n", tr,pt);
return(tr); t+=0.1;
} }
fclose(wy); system("PAUSE"); return 0; }
Program: przeb_rozne_fun


Wyszukiwarka

Podobne podstrony:
fizjo pok mocz
Effective Short Term Opponent Exploitation In Simplified Pok
diety komercyjne w lecz nadwrazliwosci skornej pok u psow
Inne leki ukł pok
prˇbka temp pok
alergia pok psow i kotow
pok
p pok II
POK Rozciąganie mięśni nadmiernie napiętych i przykurczonych
Wyk5 efekty perturbacyjne

więcej podobnych podstron