|
Реферат: Динамическое представление данных (Программирование)
Р Е Ф Е Р А Т
на тему :
“ Динамическое представление сигналов “
Выполнил: Зазимко С.А.
Принял : Котоусов А.С.
МОСКВА
Динамическое представление сигналов.
Многие задачи радиотехники требуют специфической формы представления сигналов. Для решения этих задач необходимо располагать не только мгновенным значением сигнала, но и знать как он ведет себя во времени, знать его поведение в “прошлом” и “будущем”.
ПРИНЦИП ДИНАМИЧЕСКОГО ПРЕДСТАВЛЕНИЯ.
Данный способ получения моделей сигналов заключается в следующем:
Реальный сигнал представляется суммой некоторых элементарных сигналов, возникающих в последовательные моменты времени. Теперь, если мы устремим к нулю длительность отдельных элементарных сигналов, то в пределе получим точное представление исходного сигнала. Такой способ описания сигналов называется динамическим представлением , подчеркивая тем самым развивающийся во времени характер процесса.
На практике широкое применение нашли два способа динамического представления.
Первый способ в качестве элементарных сигналов использует ступенчатые функции, которые возникают через равные промежутки времени ( . Высота каждой ступеньки равна приращению сигнала на интервале времени (. В результате сигнал может быть представлен как на рисунке 1.
[pic]
рис. 1
При втором способе элементарными сигналами служат прямоугольные импульсы. Эти импульсы непосредственно примыкают друг к другу и образуют последовательность, вписанную в кривую или описанную вокруг нее . В этом случае исходный сигнал имеет вид как на рисунке 2.
[pic] рис. 2
Теперь рассмотрим свойства элементарных сигналов. Для начала : используемого для динамического представления по первому способу.
ФУНКЦИЯ ВКЛЮЧЕНИЯ.
Допустим имеется сигнал, математическая модель которого выражается системой :
( 0, t < -(, u(t) ( ( 0.5(t/(+1), -( ( t ( (, (1) ( 1, t > (.
Такая функция описывает процесс перехода некоторого физического объекта из “нулевого” в “единичное” состояние.
[pic]
Переход совершается по линейному закону за время 2(. Теперь если параметр ( устремить к нулю, то в пределе переход из одного состояния в другое будет происходить мгновенно. Такая математическая модель предельного сигнала получила название функции включения или функции Хевисайда :
((((( ((((((((( t < ((
((t((((((((((((((( t ( (( (2)
((((((((( t ( ((
В общем случае функция включения может быть смещена относительно начала отсчета времени на величину t0. Запись смещенной функции такова :
((((( ((((((((( t < t0(
((t - t0(((( ((((((((( t ( t0( (3)
((((((((( t ( t0(
ДИНАМИЧЕСКОЕ ПРЕДСТАВЛЕНИЕ ПРОИЗВОЛЬНОГО СИГНАЛА ПОСРЕДСТВОМ ФУНКЦИЙ ВКЛЮЧЕНИЯ.
Рассмотрим некоторый сигнал S(t), причем для определенности скажем, что S(t)=0 при tm)*(matr->n)))) return 0; return 1; } int DinMatr2 (Matr2 *matr) { if (!(matr->ptr=(int **)malloc(sizeof(int *)*(matr->m)))) return 0; for (int i=0;im;i++) { if (!(matr->ptr[i]=(int *)malloc(sizeof(int)*(matr->n)))) return 0; } return 1; } void FreeMatr1(Matr1 *matr) { if (matr->ptr) free (matr->ptr); } void FreeMatr2(Matr2 *matr) { for (int i=0;im;i++) { if (matr->ptr[i]) free(matr->ptr[i]); } if (matr->ptr) free(matr->ptr); }
Задание №10
#include #include #include #include main() { clrscr(); char **mas; int c,m=0,n=0; mas=(char **)malloc(sizeof(char *)); //Выделение памяти под первое число mas[0]=(char *)malloc(sizeof(char)); //Выделение памяти под первую позицию //цифры в числе printf ("Intputn"); while ((c=getch())-'0') //Пока не ввели 0
{ if (c==13) //При нажатии Enter выделение памяти { //под новое число mas[m][n]=0; m++; if (!(mas=(char **)realloc(mas,sizeof(char *)*(m+1)))) { printf ("Не хватает памятиn"); exit(1); } n=0; putch(10); //Перевод карретки и перевод строки putch(13); //при выводе на экран } if ((c'9')) continue; //Проверка на ввод только цифр if ((!n)&&(m)) //Выделение памяти под первую позицию { //в следующем числе if(!(mas[m]=(char *)malloc(sizeof(char)) )) { printf ("Не хватает памятиn"); exit(1); } } mas[m][n]=c; //Занесение цифры на нужную позицию n++; //в число if (n) //Выделение памяти под следующую { //позицию в числе if (!(mas[m]=(char *)realloc(mas[m],sizeof(char)*(n+1)))) { printf ("Не хватает памятиn"); exit(1); } } putch (c); //Вывод цифры на экран }
printf ("Outputn"); for (int i=0;im)))) return 0; for (int i=0;im;i++) { if (!(matr->ptr[i]=(double *)malloc(sizeof(double)*(matr->n)))) return 0; } return 1; } void FreeMatr(Matr *matr) { for (int i=0;im;i++) { if (matr->ptr[i]) free(matr->ptr[i]); } if (matr->ptr) free(matr->ptr); } void Setelem(Matr *matr,double M[3][3]) { for (int i=0;im;i++) { for (int j=0;jn;j++) (matr->ptr[i][j])=M[i][j]; } } double OctNorm(Matr *matr) { double max=0; double a=0; for (int i=0;im;i++) { max+=matr->ptr[i][0]; } for (int j=0;jn;j++) { for (i=0;im;i++) { a+=matr->ptr[i][j]; } if (a>max) max=a; a=0; } return max; }
Задание №14
#include #include #include #include
void main(void) { long N=1; char *A; A=(char *)calloc(N,1024); //Выделение в куче места
do { free(A); //Освобождение массива A=(char *)calloc(N,1024); //Выделение памяти под больший массив N++; //Увеличение счетчика } while(A!=NULL); //Продолжать пока память выделяется printf("nMaximum size of heap N=%iKb",N);//Вывод результатов }
Задание №16
#include #include #include #include #include struct MATR { int n,m; double **ptr; int read_(char name[80]) { FILE *pf; int i=0,j=0; char c; char num[10]; int pos=0,flag=1; m=0; n=0; if (!(pf=fopen(name,"rt"))) return 0; ptr=(double **)malloc(sizeof(double *)); ptr[0]=(double *)malloc(sizeof(double)); while ((c=fgetc(pf))!=EOF) { if (((c>='0')&&(cn) n=i; if (j>m) m=j; } n--; fclose (pf); return 1; } void free_() { for(int i=0;i | |