ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Модуль "rg.exe" / Укр ./
         

     

    Іноземна мова
    Модуль "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").

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

    Модуль попередньої обробки РЕГ сигналу розробляється для автоматизованої системи медичного контролю і діагностики, яка функціонує на базі ПЕОМ типу 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:% sn", grapherrormsg (errorcode));

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

    getch ();

    exit (1);

    )

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

    if (outst == NULL) (

    puts ( "Anable open filen");

    exit (1);

    )

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

    fprintf (outst, "n");

    fprintf (outst, "ПеріодttttПараметри сигналу 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 filen");

    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);

    )

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

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status