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

7.  Выполнить запуск основного приложения Borland C++ Builder. Открыть новый проект для разработки, используя команду File|New Application. Сохранить новый проект в папке D:/VMSS/U41(U42)/<user>, используя команду File| Save Project As. Имена папки <user>, проекта и файла присваиваются самостоятельно.

8.  С использованием Палитры компонентов и Инспектора объектов создать первоначальный образ окна разрабатываемого приложения. Примерный вид окна приложения приведен на Рисунке 8.1. Дизайн окна определяется самостоятельно. В процессе работы окно может дополняться другими компонентами.

Рисунок 8.1 - Вид окна приложения

9.  Разработать процедуру инициализации компонентов ChartFX. Инициализация выполняется на стадии создания формы приложения. Пример инициализации приведен ниже:

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

Chartfx1->PointType=0;

Chartfx2->PointType=0;

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

  Chartfx1->ThisSerie = 0;

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

    Chartfx1->Value[i]=0.00;

  Chartfx1->CloseData(COD_VALUES);

  Chartfx1->Adm[CSA_MAX]=1;

  Chartfx1->Adm[CSA_MIN]=-1;

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

  Chartfx2->ThisSerie = 0;

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

         Chartfx2->Value[i]=10;

  Chartfx2->CloseData(COD_VALUES);

Chartfx2->Adm[CSA_MAX]=12;

10. В проект ввести глобальные переменные:

chardata[64000]; // данные файла

unsignedlongbyteRead;// количество точек сигнала (длина файла)

intSm;// текущее смещение от начала

float data_adc[512]; // данные АЦП

    floatdata_sp[256];   // данные спектра

floatdata_sp2;           // max значение спектра

11. Разработать процедуру открытия файла сигнала. Данная процедура должна вызываться по нажатию кнопки «Открыть…». Для реализации процедуры необходимо использовать стандартный диалоговый компонент «OpenDialog». Установить свойства Filter и FilterIndex для выбора файла сигнала в списке файлов. По желанию можно установить первоначальный директорий для выбора файла. Метод Execute активизирует окно диалога во время выполнения программы. После нажатия кнопки «ОК» содержимое файла записывается во внутренний буфер data . Фрагмент процедуры приведен ниже:

// вызов открытия файла

 if(OpenDialog1->Execute()==true)

{ // запись сигнала в буфер

// создание файла для Win32

HANDLE in=CreateFile( OpenDialog1->FileName.c_str(), GENERIC_READ,     FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL );

if(in == INVALID_HANDLE_VALUE)     return ;

memset(data, 0, 64000 - 1);

// чтение

if( !ReadFile( in, (void*)&data, 64000l, &byteRead,NULL )) 

{ // при неудаче закроем:

CloseHandle(in);   return;

}

CloseHandle(in);

}

12. Отладить процедуру открытия файла.

13. В проект внести процедуру БПФ для расчета спектра. Листинг процедуры приведен ниже.

//*********************************************

// БПФ

//*********************************************

void __fastcall TForm1::fourea(float *data_r,float *data_i,int n,int is)

{

int i,i1,j,j1,istep;

int m,mmax;

float r,r1,theta,w_r,w_i,temp_r,temp_i;

r=M_PI*is;

j=1;

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

{

i1=i-1;

if(i<j)

          {

j1=j-1;

          temp_r=*(data_r+j1);

          temp_i=*(data_i+j1);

          *(data_r+j1)=*(data_r+i1);

          *(data_i+j1)=*(data_i+i1);

          *(data_r+i1)=temp_r;

          *(data_i+i1)=temp_i;

          }

     m=n>>1;

     while(j>m)

          {

          j-=m;

          m=(m+1)>>1;

          }

     j+=m;

}

mmax=1;

while(mmax<n)

     {

     istep=mmax<<1;

     r1=r/(float)mmax;

     for(m=1;m<=mmax;m++)

          {

          theta=r1*(m-1);

          w_r=(float)cos((double)theta);

          w_i=(float)sin((double)theta);

          for(i=m-1;i<n;i+=istep)

              {

              j=i+mmax;