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. Исследовать свойства и возможности данного компонента при построении диаграмм.
Требования к отчету:
Отчет должен содержать:
титульный лист;
задание;
листинги основных процедур;
структуру приложения;
решения контрольных заданий.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.