RNP-135 t14.cpp Интеграл, свертки, корреляция, ИХ, ПХ, функции Дельта, Хевисайда. ПРАКТИКА
Sergej Romanets, Сергей Романец
0:00 / 0:00
RNP-135 t14.cpp Интеграл, свертки, корреляция, ИХ, ПХ, функции Дельта, Хевисайда. ПРАКТИКА
134 просмотра · 1 день назад
Sergej Romanets, Сергей Романец
1,76 тыс. подписчиков
134 просмотра · 1 день назад
СОДЕРЖАНИЕ:
00:00 - демо от t0.exe до t14.exe
- -
02:43 - модель реальной системы
Импульсная характеристика = ИХ-тест-1
Вход функция Хевисайда
Выход: ПХ переходная характеристика
- -
03:31 - модель идеальной системы
Импульсная характеристика ИХ = Дельта функция
Вход: функция Хевисайда
Выход: функция Хевисайда
- -
05:16 - отладка вывода на экран параметра времени для ПХ
13:33 - начало разработки модели. Черновики
13:54 - исходный код от t0.cpp до t14.cpp. Редактор FAR
17:50 - смещение графика импульсной характеристики ИХ
int shift( int s);
s - это глобальная переменная. Аргумент (время) функции интеграла y(s).
При изменении s, стрелками LEFT, RIGHT, происходит копирование
ИХ из массива h1[17], в определенную переменной s позицию в пределах
массива h[17*3].
17:59 - реализация вычисления ИНТЕГРАЛа СВЕРТКИ
void correlation( );
18:40 - исходный код от t0.cpp до t14.cpp. Редактор Visual Studio
19:40 - примеры входных цифровых сигналов x[ ]
20:14 - примеры цифровой функции ИХ h[ ]
20:42 - шаблон для выходного цифрового сигнала y[ ]
20:54 - смещение графика импульсной характеристики ИХ
int shift( int s);
21:09 - реализация вычисления ИНТЕГРАЛа СВЕРТКИ
void correlation( );
21:46 - void main( );
27:22 - ссылки на другие видео
Литература:
Сиберт У.М. Цепи, сигналы, системы. Djv.
https://publ.lib.ru/ARCHIVES/S/SIBERT...
Видео лекции по радиотехнике:
МАИ
Институт «Радиоэлектроника, инфо коммуникации и информационная безопасность».
Лектор: Т.Я. Шевгунов.
http://romanets.com/R1.htm
• Радиотехника
//
// t14.cpp
//
char far * p = (char far *) 0xA0000000L;
void plot( int x, int y, int c) { p[y*320 + x] = c; }
void graph();
void clear();
void text();
//int _x[] = { 0,0,0,0,0, 4,4,4, 4, 4,4,4, 0,0,0,0,0,};
int x[] = {
0,0,0,0,0, 0,0,0, 0, 0,0,0, 0,0,0,0,0,
1,1,1,1,1, 1,1,1, 1, 1,1,1, 1,1,1,1,1, // Heaviside
//1,2,3,4,5, 6,7,8, 9, 10,11,12, 13,14,15,16,17, // x(t) = t
//1,2,3,4,5, 6,7,8, 8, 7,6,5, 4,3,2,2,3, // x(t) =
// 1,0,-1,0,1,0,-1,0, 1, 0,-1,0, 1,0,-1,0,1, // sin
// 1,0,1,0,1,0,1,0, 1, 0,1,0, 1,0,1,0,1, // sin
1,1,0,0,0, 0,0,0, 0, 0,0,0, 0,0,0,0,0,
//1,1,1,1,1, 1,1,1, 1, 1,1,0, 0,0,0,0,0,
};
int x_size = sizeof(x)/sizeof(int);
int fx(int i)
{
if ( i less 0 || i greater x_size-1 )
return 0;
else
return x[i];
}
//int _h0[] = { 0,0,0,0,0, 1,2,3,4,3,2,1, 0,0,0,0,0,};
int h0[] = { 0,1,2,3,4, 5,6,7, 8, 7,6,5, 4,3,2,1,0,};
//int h1[] = { 0,0,0,0,0, 2,4,6, 8, 7,6,5, 4,3,2,1,0,};
//int h1[] = { 0,2,4,6,8, 9,10,9, 8, 7,6,5, 4,3,2,1,0 };
//
// delta function
//int h1[] = { 16,0,0,0,0, 0,0,0, 0, 0,0,0, 0,0,0,0,0 };
// !
int h1[] = { 0, 1, 0,-1,0,1,0,-1,-2,0,1,4,8,16,8,4,1, };
//
int h1_size = sizeof(h0)/sizeof(int);
int h[] = {
0,0,0,0,0, 0,0,0, 0, 0,0,0, 0,0,0,0,0,
// 0,1,2,3,4, 5,6,7, 8, 7,6,5, 4,3,2,1,0,
16,0,0,0,0, 0,0,0, 0, 0,0,0, 0,0,0,0,0, // delta function
0,0,0,0,0, 0,0,0, 0, 0,0,0, 0,0,0,0,0,
};
int h_size = sizeof(h)/sizeof(int);
//
int y[] = {
0,0,0,0,0, 0,0,0, 0, 0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0, 0, 0,0,0, 0,0,0,0,0,
0,0,0,0,0, 0,0,0, 0, 0,0,0, 0,0,0,0,0,
};
int y_size = sizeof(y)/sizeof(int);
int s = 15;
void draw( int M[],int size, int xo, int yo, int color)
{
for (int i=0; i less size; i++)
plot( xo+i, yo - M[i], color);
}
//
void shift( int s)
{
for (int i=0; i less h_size; i++)
h[i] = 0;
for (i=0; i less h1_size; i++)
if ( s less h1_size-1 )
h[i + h1_size-1 - s] = h1[i];
}
//
void correlation() // y = x*h
{
for ( int i=16-s; i less y_size; i++) // for cool animation
{
y[i] = 0;
}
gotoxy( 2, 8);
printf( "sum="); // RNN: cool debug
for ( i=0; i less y_size; i++)
{
int sum = 0;
for ( int j=0; j less= i; j++)
sum += x[j]*h[j];
y[16 - s] = sum/1;
printf( "%i ", sum);
}
gotoxy( 12, 2); printf( " ");
gotoxy( 12, 2); printf( "t=%i ", -(s-15)); // time or shift
}
//
void main()
{
graph();
while( 1 )
{
gotoxy( 12, 15); printf( "Press LEFT or RIGHT arrow");
gotoxy( 12, 16); printf( "Exit ESC");
gotoxy( 12, 17); printf( " ");
gotoxy( 12, 17); printf( "sift=%i %i %i", s, 0, 0);
correlation(); // y = x*h
// (fn, size, x, y, color)
draw( x, x_size, 10, 20, 14); gotoxy( 12, 3); printf( "x[]");
draw( h, h_size, 10, 40, 14); gotoxy( 12, 5); printf( "h[]");
draw( y, y_size, 10, 194,13); gotoxy( 12, 25); printf( "y[]=x[]*h[]");
int ch = getch();
clear();
delay(60);
if ( ch==0 )
{
ch = getch();
if ( s less -16 )
s = -17;
else
if ( s greater 13 )
s = 14;
if ( ch == 75 ) // LEFT
shift( ++s);
else
if ( ch == 77 ) // RIGHT
shift( --s);
}
if ( ch == 27 ) // ESC
break;
}
text();
}
http://romanets.com/