Реализация функций контроля и управления на базе Win32 API: Методические указания по выполнению лабораторного практикума, страница 25

              temp_r=w_r* *(data_r+j) - w_i* *(data_i+j);

              temp_i=w_r* *(data_i+j) + *(data_r+j)*w_i;

              *(data_r+j)=*(data_r+i) - temp_r;

              *(data_i+j)=*(data_i+i) - temp_i;

              *(data_r+i) += temp_r;

              *(data_i+i) += temp_i;

              }

          }

     mmax=istep;

     }

     if(is>0)

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

               {

               *(data_r+i) /= (float)n;;

               *(data_i+i) /= (float)n;;

}

}

//--------------------------------------------------------------

14. Разработать процедуру расчета спектра, вывода сигнала и спектра на форму. Данные для расчета и отображения выбираются из массива данных data с учетом текущего смещения SM . Пример процедуры приведен ниже.

//--------------------------------------------------------------

void __fastcall TForm1::OutData(int start)

// процедура вывода start – смещение от начала буфера

{

 int i,j;

 float d_r[512],d_i[512];

// взять данные

 //перезапись данных в массив для отображения осциллограммы

for(i=start,j=0;j<512;i++,j++)

    {

     data_adc[j]=(float)data[i]*(float)(2.5/256);

    d_r[j]=data_adc[j]; // действительная часть=входному сигналу

d_i[j]=0.0;            // мнимая часть = 0

}

  // БПФ

  fourea(d_r,d_i,512,-1);

// вычисление спектра

data_sp2=0.;

data_sp[0]=0;

  for(i=1;i<256;i++)

     { // накопление результата

     data_sp[i]=d_r[i]*d_r[i]+d_i[i]*d_i[i];

    if(data_sp2<data_sp[i])

      data_sp2=data_sp[i]; //поиск max для нормированного вывода

}

  // вывод осцилограмм

  Chartfx1->OpenDataEx(COD_VALUES,1,512);

  Chartfx1->ThisSerie = 0;

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

    Chartfx1->Value[i]=data_adc[i];

  Chartfx1->CloseData(COD_VALUES);

  // спектр

  Chartfx2->OpenDataEx(COD_VALUES,1,256);

  Chartfx2->ThisSerie = 0;

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

      Chartfx2->Value[i]=(int)data_sp[i];

  Chartfx2->CloseData(COD_VALUES);

// ограничим размер вывода спектра

Chartfx2->Adm[CSA_MAX]=(int)data_sp2+10;

  Chartfx2->LeftGap=0;

}

15. Отладить процедуры при нулевом смещении. После открытия файла выполнить вызов данной процедуры с нулевым смещением.

16. Разработать процедуру смещения вправо. Данная процедура должна вызываться при нажатии кнопки “>>”.

17. Разработать процедуру смещения влево. Данная процедура должна вызываться при нажатии кнопки “<<”.

18. При изменении смещения, значение смещения должно выводится на форме.

19. Разработать механизм блокировок кнопок смещения при выходе значения смещения из зоны сигнала.

20. Отладить и проверить правильность работы всего приложения. На Рисунке 8.2 приведен пример окна после выполнения процедуры поиска.

Рисунок 8.2 - Вид окна приложения после выполнения процедуры поиска

Контрольные задания:

1.  Изменить цвета осциллограммы сигнала и его спектра.

2.  Отобразить координатную сетку осциллограммы.

3.  Отобразить центр спектра (точка 128).

4.  Вывести оцифровку частоты спектра при условии, что одна единица по оси Х равна 20 Гц.

5.  Вывести заголовки и легенды диаграмм.

6.  Разработать процедуру увеличения масштаба осциллограммы.

7.  Разработать процедуру вызова стандартных инструментов компоненты ChartFX.

8.  Разработать процедуру “анимации” отображения сигнала (непрерывный вывод от начала до конца сигнала с задержкой).

9.  Предусмотреть блокировки кнопок управления программой от неправильных действий оператора.

10. Заменить компонент ChartFX на компонент Graph вкладки ActiveX. Исследовать свойства и возможности данного компонента при построении диаграмм.

Требования к отчету:

Отчет должен содержать:

титульный лист;

задание;

листинги основных процедур;

структуру приложения;

решения контрольных заданий.