41383 (661608)

Файл №661608 41383 (Модуль rg.exe /Укр./)41383 (661608)2016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

Модуль "rg.exe"

1. Вступ

Дана курсова робота присвячена розробці програмного модуля "rg.exe",який повинен виконувати обробку безперервного періодичного сигналу. Найбільше розповсюдження ця задача отримала в області медицини, де необхідно швидко і детально обробляти сигнал енцефалограма. Широке розповсюдження персональних комп'ютерів типу IBM PС XT/AT дало додатковий імпульс до розвитку апаратних і програмних засобів для рішення даних задач.

Розробка програмного продукту ведеться на основі завдання виданого кафедрою ВТіП Харківського державного політехнічного університету від 15.02.2000 р.

2. Призначення та область застосування

Програма вирішує задачу виведення на екран обробленої інформації від четирьохканального обробника сигналів в реальному масштабі часу. Прийом вищезгаданих сигналів проводиться через буферні масиви даних, які організовані у вигляді файлів на магнітному носії.

Програма призначена для адекватного відображення на екрані монітора вхідної, проміжної і вихідної інформації в системі обробки сигналів.

Областю застосування даної програми можна назвати будь-яку область людської діяльності, в якій може зажадатися визначити період квазіпереодичного сигналу і вивести результати на екран для їх подальшої обробки і використання.

3. Технічні характеристики

3.1. Постановка задачі

Для спеціалізованих автоматизованих систем (САС) ана-

ліза багатоканальної сигнальної інформації в реальному масштабі часу (РМЧ) характерні, поряд з іншими, такі основні функції, як введення і попередня (первинна) обробка сигналів.

Прогрмний модуль повинен працювати як об'єкт обробки САС,що являє собою квазіпереодичні низькочастотні аналогові сигнали,які синхронно знімаються по декількох каналах та обробка яких проводиться у тимчасовій області.

Основними вимогами, що пред'являються до такий САС, є відсутність втрат багатоканальної сигнальної інформації, що вводиться і попериодична оперативна обробка сигналів в кожному каналі.

Виходячи з особливостей об'єкта і характеру його обробки процес, що реалізовує багатоканальне введення і попередню обробку сигналів,визначення параметрів періодів і сигналів та формування файла параметрів,повинен виконувати наступні функціональні дії:

  • рахунок і контроль тривалості сеансу;

  • завдання інтервалу дискретизації сигналів;

  • комутація каналів введення;

  • перемикання каналів для попередньої обробки;

  • отримання відфільтровувати відліку сигналу;

  • обчислення першою похідною (різниці) сигналу;

  • обчислення другою похідною (різниці) сигналу;

  • перевірка на екстремум сигналу;

  • перевірка на перегин (екстремум першої різниці) сигналу;

  • накопичення інформації об екстремумах сигналу;

  • накопичення інформації про перегини;

  • аналіз структури виявленого періоду сигналу;

  • прийняття рішення про передачу інформації о знайденом періоді сигналу для подальшої обробки;

  • гарафічна візаулізація результатів;

Для глобального процесу, що розглядається виділені локальные процеси, з яких до основних віднесені наступні:

  • рахунок часу сеансу;

  • квазисинхронный багатоканальне введення відліку сигналів;

  • цифрова фільтрація сигналів;

  • цифрове диферинцирование (перше і друге) сигналу;

  • отримання особливих відліків (точок экстремумов і перегинів) сигналу;

  • виділення періодів сигналу для подальшої обробки.

Програмна реалізація на машинно-орієнтованій мові у вигляді спеціалізованого модуля повинна функціонувати в середовищі ДОС і забезпечувати роботу з таймером.

3.2. Опис функціонування програми

Програмний модуль являє собою цикл, вихід з якого проводиться закінченням роботи блока , який модолює роботу АЦП. При старті програми всі дані з файлів за допомогою яких модулюється АЦП завантажуються в масиви даних. Вся подальша робота проводиться вже над ними. Далі програма отримує наступний відлик сигналу, який прходить 2-х етапну фільтрацію ( медіанна та сглажування ). Потім програма отримує відфільтрова-ний відлік сигналу, бчислює першу похідну (різницю) сигналу,другу похідну (різницю) сигналу, виконує перевірку на екстремум та перегин,накопичує інформацію об екстремумах та перегини,аналізує структуру виявленого періоду сигналу,та якщо знайден період виконує обчислення параметрів сигналу.

Графічне відображення на екран проводиться шляхом використання стандартної бібліотеки для роботи з гпафікою. Графіки виводяться для 4-х каналів одночасно, та для кожного каналу – вхідний та відфільтрований сигнал.

Обчислені параметри сигналу зберігаются на диску з вказанням періода.

3.3. Вхідні та вихідні дані

Вхідні дані являють собою файл в якому в цілочисельному форматі знаходяться немасштабовані графіки вхідних сигналів (файли “kanal.dat").

Вихідні дані є графічні представлення масивів даних на екрані монітора, та файл з параметрами періоду (“masp.res”).

3.4. Склад технічних і програмних засобів

Модуль попередньої обробки РЕГ сигналу розробляється для автоматизованої системи медичного контролю і діагностики, яка функціонує на базі ПЕОМ типу IBM PC/AT.

Для нормальної роботи модуля в режимі реального часу необхідна ПЕОМ на базі мікропроцесора i80386 і вище, операційна система MS DOS версії не нижче за 3.30.

Програма відкомпілювати в середовищі Windows'95 (MS DOS 4.00.950 ) під управлінням “Borland С++ 3.1 ”.

5. Додаток

Лістинг програмного модуля

#include

#include

#include

#include

#include

#include

#define Size 1600

#define Meanings 500

#define KO4

#defineKMO7

#defineKSO7

#define INTR 8 /* The clock tick interrupt */

#ifdef __cplusplus

#define __CPPARGS ...

#else

#define __CPPARGS

#endif

static int kf;

int stop=1;

FILE *outst;

/*--------------- входные данные (4 канала) ------------------*/

int

azp[4][Meanings],

out[4][Meanings];

int

outmed[28]={ 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

},

outsr[28]={ 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

},

mean[4]={0,0,0,0},

kpmo[4]={0,0,0,0},

krs[4]={0,0,0,0},

amvoi[4]={0,0,0,0},

ofsmed[4]={0,0,0,0},

sum[4]={0,0,0,0},

tmpmed[7]={0,0,0,0,0,0,0},

flags[4]={0,0,0,0},

flags1[4]={0,0,0,0},

fla[4]={0,0,0,0},

iper[4]={0,0,0,0},

iex[4]={0,0,0,0},

io[4]={0,0,0,0},

fex[4]={0,0,0,0},

imean[4]={-1,-1,-1,-1},

st[4]={2,2,2,2},

ipd[4]={0,0,0,0},

ips[4]={0,0,0,0},

per[4][10],

percnt[4]={-1,-1,-1,-1};

/*переменные программы*/

int

t,f1=0,flag,iex1=0,j,kk=0,

ps=0,z,pd=1,

dko=0,

k=1,i,m,fl=1,

dx=3,dx1=-4;

char str[5];

/*выходные данные*/

static int me[4][Meanings],/*экстремумы*/

mp[4][Meanings],/*перегибы*/

mo[4][Meanings],/*особые точки*/

mr[4][Meanings],/*первые разности*/

ms[4][Meanings],/*секунды*/

md[4][Meanings];/*дискретные отсчеты*/

/* Переменные для процедуры обработки */

int ot1,ot2,ot3,ot4,ot5,ot6;

int tf,tf1,ne,vk,

int masp[4][11];

int kaz;

long sq,s;

void init_azp(int[][Meanings],char[] );

void interrupt ( *oldhandler)(__CPPARGS);

void interrupt handler(__CPPARGS)

{

if(--kf<0)

{

oldhandler();

kf=5;

}

else

outportb(0x20,0x20);

if(mean[dko]

{

amvoi[dko]=azp[dko][mean[dko]];

putpixel(dx,(dko*100+350)-amvoi[dko]/2,12);

putpixel(dx,dko*100+75,10);

mean[dko]++;

outmed[dko*7+ofsmed[dko]]=amvoi[dko];

if(mean[dko]>KMO-1)

{

for(i=0;i<7;i++)

tmpmed[i]=outmed[dko*7+i];

k=1;

while(k==1)

{

k=0;

for(i=0;i<6;i++)

if(tmpmed[i]

{

m=tmpmed[i];

tmpmed[i]=tmpmed[i+1];

tmpmed[i+1]=m;

k=1;

}

}

outsr[dko*7+krs[dko]]=outmed[dko*7+3];

for(i=dko*7;i

outmed[i]=outmed[i+1];

if(krs[dko]>=KSO-1)

{ // сглаживание

sum[dko]=0;

for(i=dko*7;i

sum[dko]+=outsr[i];

for(i=dko*7;i

outsr[i]=outsr[i+1];

++imean[dko];

out[dko][imean[dko]]=sum[dko]/7;

putpixel(dx1,(dko*100+350)-out[dko][imean[dko]]/2,14);

if(imean[dko]>=1)

{ // вычисление 1-ой разности

mr[dko][imean[dko]-1]=out[dko][imean[dko]] out[dko][imean[dko]-1];

if (imean[dko]>=3)

{ // вычисление второй разности

if(mr[dko][imean[dko]-2]

{

if(flags[dko]==1)

{

mp[dko][iper[dko]]=imean[dko]-2;

mo[dko][io[dko]++]=out[dko][imean[dko]-2];

md[dko][ipd[dko]++]=pd;

ms[dko][ips[dko]++]=ps;

iper[dko]++;

}

flags[dko]=-1;

}

else

if(mr[dko][imean[dko]-2]>mr[dko][imean[dko]-3])

{

if (flags[dko]==-1)

{

mp[dko][iper[dko]]=imean[dko]-2;

mo[dko][io[dko]++]=out[dko][imean[dko]-2];

md[dko][ipd[dko]++]=pd;

ms[dko][ips[dko]++]=ps;

iper[dko]++;

}

flags[dko]=1;

}

}

if((out[dko][1]-out[dko][0])>0)

flags1[dko]=1;

else

flags1[dko]=-1;

if((imean[dko]>14)&&(imean[dko]%6==0))

{

for(i=st[dko];i

{

if((out[dko][i]>out[dko][i-1])&&(flags1[dko]==-1))

{

st[dko]=i;

for(j=i+1,t=0;(t<13)&&(j

if(out[dko][j]

{fla[dko]=0;break;}

else fla[dko]=1;

if( (fla[dko]==1))

{

if(me[dko][iex[dko]-1]!=i-1 ){

me[dko][iex[dko]++]=i-1;

mo[dko][io[dko]++]=out[dko][me[dko][iex[dko]-1]];

fex[dko]=0;

md[dko][ipd[dko]++]=pd;

ms[dko][ips[dko]++]=ps;

circle(me[dko][iex[dko]-1]+10,(dko*100+350)-out[dko][ me[dko][iex[dko]-1]]/2,2);

floodfill(me[dko][iex[dko]-1]+10,(dko*100+350)-out[dko][ me[dko][iex[dko]-1]]/2,15);

}

flags1[dko]=1;

}

else

i=j;

}

else

if((out[dko][i]

{

st[dko]=i;

for(j=i+1,t=0;(t<13)&&(j

if(out[dko][j]>out[dko][i-1])

{fla[dko]=0;break; }

else fla[dko]=1;

if((fla[dko]==1))

{

if(me[dko][iex[dko]-1]!=i-1 ){

me[dko][iex[dko]++]=i-1;

md[dko][ipd[dko]++]=pd;

ms[dko][ips[dko]++]=ps;

mo[dko][io[dko]++]=out[dko][me[dko][iex[dko]-1]];

fex[dko]=1;

circle(me[dko][iex[dko]-1]+10,(dko*100+350)-out[dko][ me[dko][iex[dko]-1]]/2,2);

floodfill(me[dko][iex[dko]-1]+10,(dko*100+350)-out[dko][ me[dko][iex[dko]-1]]/2,15);

}

flags1[dko]=-1;

}

else

i=j;

}

}

}

if((iex[dko]>1)&&(fex[dko]))

{

tf=me[0][1]-me[0][0]+1;

tf1=mo[0][14]-mo[0][12];

if(percnt[dko]==0)

line(me[dko][0]+10,dko*100+70,me[dko][0]+10,dko*100+80);

if(out[dko] [ me[dko] [iex[dko]-2]]

{

fex[dko]=0;

++percnt[dko];

per[dko][percnt[dko]]=me[dko][iex[dko]-2];

if(percnt[dko]>0)

{

ne=iex[dko]-1+percnt[dko]-1;

if(ne%5)

goto End;

masp[dko][1] = dko + 1;

ot1=me[dko][(percnt[dko]-1)*4+0];

ot2=me[dko][(percnt[dko]-1)*4+1];

masp[dko][2]=out[dko][ot2];

ot3=me[dko][(percnt[dko]-1)*4+3];

masp[dko][5]=out[dko][ot3];

ot4=me[dko][(percnt[dko]-1)*4+2];

masp[dko][4]=out[dko][ot4];

masp[dko][3]=out[dko][ot4-4];

masp[dko][7]=per[dko][percnt[dko]]-per[dko][percnt[dko]-1];

if(!((masp[dko][7]>98)&&(masp[dko][7]<104) ))

goto End;

masp[dko][6]=me[dko][iex[dko]-1]-me[dko][iex[dko]-2]+1;

if(!( (masp[dko][6]>tf-3)&&(masp[dko][6]

goto End;

for(int w =0;out[dko][ot2]!=mo[dko][w];w++);

if(! ( mo[dko][w]-mo[dko][w-2]+2) )

goto End;

line(me[dko][iex[dko]-2]+10,dko*100+70,me[dko][iex[dko]-2]+10,dko*100+80);

sprintf(str,"%d",masp[dko][7]);

setcolor(11);

outtextxy(me[dko][iex[dko]-2]-50,dko*100+85,str);

setcolor(15);

ot6=me[dko][(percnt[dko]-1)*4+4];

masp[dko][9]=me[dko][(percnt[dko]-1)*4+4]/100;

masp[dko][10]=me[dko][(percnt[dko]-1)*4+4]%100;

kaz=(out[dko][ot1]+out[dko][ot6])/2;

for(vk=2;vk<6;vk++)

masp[dko][vk]=masp[dko][vk]-kaz;

s=0;

for(vk=0;vk

s=s+(out[dko][vk]+out[dko][vk+1])/2;

sq=(s/ot4-kaz)*masp[dko][7];

masp[dko][8]=sq;

fprintf(outst,"\t%d",percnt[dko]);

fprintf(outst,"\t");

for(z=1;z<11;z++)

fprintf(outst,"%5d ",masp[dko][z]);

fprintf(outst,"\n");

}

}

}

}

}

else

++krs[dko];

}

else

++ofsmed[dko];

End:if(dko==3)

{

++pd;

if(pd==100)

{

++ps;

pd=0;

}

dko=0;

++dx;

++dx1;

}

else

++dko;

}

else

stop=-1;

}

void main(void)

{

int gdriver = DETECT, gmode, errorcode;

unsigned int newtic=10947,oldtic=65535L;// new tic for 100,1 in second

init_azp(azp,"kanal1.dat");

initgraph(&gdriver, &gmode, "");

errorcode = graphresult();

if (errorcode != grOk)

{

printf("Graphics error: %s\n", grapherrormsg(errorcode));

printf("Press any key to halt:");

getch();

exit(1);

}

outst=fopen("masp.res","w");

if(outst==NULL){

puts("Anable open file\n");

exit(1);

}

fprintf(outst,"\t\t\t\tРезультаты обработки \n");

fprintf(outst,"\n");

fprintf(outst," Период\t\t\t\tПараметры сигнала \n");

setbkcolor(0);

setcolor(1);

cleardevice();

line(1,100,640,100);

line(1,200,640,200);

line(1,300,640,300);

line(1,400,640,400);

line(1,1,1,400);

setcolor(15);

outportb(0x43,0x36);

outportb(0x40,newtic&0x00ff);

outportb(0x40,newtic>>8);

oldhandler = getvect(INTR);

setvect(INTR, handler);

while (stop==1)

{

}

setvect(INTR, oldhandler);

outportb(0x43,0x36);

outportb(0x40,oldtic&0x00ff);

outportb(0x40,oldtic>>8);

fclose(outst);

getch();

closegraph();

}

void init_azp(int mas[][Meanings],char filename[])

{

int i=0,j;

unsigned int *tmp;

FILE *f;

char mode[]="rt";

f=fopen(filename,mode);

if(f==NULL){

puts("Anable open file\n");

exit(1);

}

for(i=0;i<4;i++)

{

for(j=0;j<500;j++)

{

fscanf(f,"%d",tmp);

mas[i][j]=*tmp;

}

rewind(f);

}

fclose(f);

}

Результати роботи програми

Характеристики

Тип файла
Документ
Размер
126,38 Kb
Тип материала
Учебное заведение
Неизвестно

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.

Список файлов реферата

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6529
Авторов
на СтудИзбе
301
Средний доход
с одного платного файла
Обучение Подробнее