Учебное пособие 2060
.pdfмых распространѐнных в то время. Тем не менее модель включает все элементы современного «виртуального» прибора и позволяет проводить учебные занятия по обеспечению соответствующих разделов ряда учебных дисциплин, в которых изучаются теоретические, практические и метрологические аспекты аналогового и цифрового (на базе аппарата БПФ) спектрального анализа. Кроме основных разделов, содержащих эмулятор спектроаанализатора, предусмотрено меню установки параметров входных сигналов, панель установки режимов работы аналогового и панель установки режимов работы «цифрового» спектроанализаторов.
5.1.3. Общая характеристика виртуального спектроанализатора
Внедрение компьютерных технологий обучения по дисциплинам, не связанным с информатикой, достаточно часто встречается либо с бессознательным оптимизмом, либо с неадекватным пессимизмом в отношении их возможностей и эффективности. Наиболее целесообразной является ровная, умеренно скептическая оценка возможностей и перспектив использования компьютера как дидактического средства. Создание качественных систем обучения требует привлечения как высококвалифицированных педагогов-методистов, так и программистов, разработка учебных программ и курсов тpебует больших материальных и временных затрат.
Компьютер выполняет множество полезных функций: помогает осуществлению индивидуализации и дифференциации процесса обучения за счет возможности продвижения по уровням различной степени сложности с индивидуальным темпом работы и обеспечением помощи и подсказки; создает возможность выбора материала, выявления ошибок и коррекции действий с последующей оценкой результатов, осуществления самоконтроля и самокоррекции; обеспечивает возможность тренажа и контроля; повышает наглядность изучаемых процессов и явлений. Программа моделирования "анализатор спектра" реализованная на базе языка Borland Pascal 7.0 относится к классу проблемно-ориентированного программного обеспечения, предназначенного для моделирования радиотехнических устройсв широкого назначения - автоматизированных рабочих мест, В данном документе приводится краткое описание программы, расширенной сервисными средствами интерфейса с операционной системой, использованием возможности аппаратуры персональных компьютеров, совместимых с машинами семейства IBM PC.
Характеристика работы
1. Цель : создание программы моделирования прибора "анализа-
тор спектра" на ЭВМ.
2.Методы : использование графических средств отображения информации в совокупности с оптимальным решением поставленной математической задачи.
3.Основные результаты : возможность ознакомления с прибором
при помощи его модели. Приобретение навыков измерения параметров сигналов на модели прибора.
Требования к системе
Для того, чтобы использовать программу "анализатор спектра", вам необходимо иметь следующее:
1.IBM PC, AT (или близко совместимую машину), либо PS/2, работающую в операционной системе DOS 2.0 или старше.
2.Один дисковод для гибких дисков. Безусловно, желательно иметь и жесткий диск.
Структурная схема программы АНАЛИЗАТОР СПЕКТРА.
Блок инициализации и анализа входных данных
Установка параметров |
|
Анализатор |
исследуемого сигнала |
|
|
Модель БПФ Модель аналогового фильтра
Блок коррекции
Управление
устройством
Рис. 5.2. Структурная схема программы виртуального спектроанализатора
ПРИНЦИПЫ ПОСТРОЕНИЯ СИСТЕМЫ
При создании системы мы руководствовались следующими техническими принципами. Использование графических средств отображения информации позволило создать программу с ярким динамическим изображением, с красивым, крупным, легко читаемым
текстом Использование прямого доступа к клавиатуре генерирует на наш взгляд простые в обращении экранные формы, в которых диалог "ЧЕЛОВЕК - ЭВМ" происходит посредством "ГОРЯЧИХ" клавиш и набора меню с управлением маркера при помощи клавиш перемещения курсора.
Использование алгоритма БПФ
При написании программы мы столкнулись с проблемой, связанной с медленной обработкой сигнала при использовании методов аналоговой фильтрации. Полученные результаты оказались несоответствующими техническим требованиям реального прибора (очень медленная обработка сигнала и низкая точность), что неприемлемо. Вариант применения в программе математического метода ДПФ показал, что при достижении необходимой точности нужен более совершенный математический аппарат. Для решения этой проблемы был применен алгоритм быстрого преобразования Фурье, позволяющий существенно ускорить обработку сигнала при той же технической базе.
Программное обеспечение реализовано для ПЭВМ типа IBM AT286 и выше. Оно может использоваться преподавателями высших учебных заведений радиотехнических специальностей в качестве дополнения к существующему программному обеспечению или в качестве отдельной программы.
Поставляемые файлы
Программа "анализатор спектра" поставляется на одной дискете. Прежде чем пользоваться этой дискетой, рекомендуется сделать запасную копию. Файлы на дискете не защищены от копирования.
На дискете вы найдете следующие файлы:
Диск SPEKTR:
READ.ME
Если вы обнаружите на дискете файл с этим именем, прочтите его, прежде чем продолжить работу. Этот файл содержит самые последние дополнения к документации.
METR.EXE
M.CFG
M.MNU
LOGO.PCX
METR.PCX
EGAVGA.BGI
LITT.CHR
Обеспечивают полную работу программы.
Как приступить к работе Скопируйте содержимое дистрибутивного дискета на жесткий диск. Для
начала работы с программой необходимо запустить файл METR.EXE.
Работа с программой
После успешного запуска программа предлагает пользователю
выбрать род работы посредством системы меню на русском языке.
При затруднении в работе с программой пользуйтесь подсказками на экране.
5.1.4. Программное обеспечение работы спектроанализатора
Ниже будет представлено несколько фрагментов программ, показывающих принцип построения программы «виртуального» спектроанализатора.
|
|
|
Фрагмент 1 |
unit crt85; |
|
|
|
interface |
|
|
|
const |
|
|
|
on |
: boolean = true; |
|
|
off |
: boolean = false; |
|
|
gorizontal : boolean = false; |
|||
wertical : boolean = true; |
|||
norm |
: boolean = true; |
|
|
inv |
: boolean = false; |
|
|
type |
|
|
|
lins = string[80]; |
|
||
sel |
|
= record |
|
menu |
: array |
[1..10] of string [30]; |
|
|
hotkey |
|
: array [1..10] of char; |
|
mess |
: string [20]; |
|
|
posgor,poshot |
: array [1..10] of integer; |
|
|
maxel,x,y,numwind,swind: integer; |
||
|
napr |
: boolean; |
|
|
wind,uprmess |
: boolean; |
|
|
actwind |
: boolean; |
|
|
textout |
: boolean; |
|
end; |
|
|
|
var |
|
|
|
voi,esc |
: boolean; |
||
select |
|
: array [1..8] of sel; |
|
masmem |
: array [1..5,0..159,0..23] of word; |
||
virtmas |
: array [$1..$2,$0..$1000] of byte; |
||
level,res,wx,wy |
: integer; |
||
x1,y1,i,j1,j2 |
|
: integer; |
procedure getwind (xmin,ymin,xmax,ymax,n : integer);
procedure opwind (xmin,ymin,xmax,ymax,n : integer; outfon : boolean); procedure clwind (xmin,ymin,xmax,ymax,n : integer);
procedure fon;
procedure getscreen(n : integer); procedure putscreen(n : integer); procedure outmenu (positions : integer); procedure clwin (positions : integer);
………………………………………………………………………………..
x1:=x+j1+3;
y1:=y+maxel+1; end
else { goriz } begin posgor[1]:=x+2;
for i:=2 to maxel do posgor[i]:=posgor[i-1]+length(menu[i-1])+1; x1:=posgor[maxel]+length(menu[maxel])+1;
y1:=y+2;
end;
if (not actwind) then { если окна нет, создать } begin
if wind then begin actwind:=on;
getwind(x,y,x1,y1,numwind);
opwind(x,y,x1,y1,numwind,textout);
end;
if uprmess then begin
j1:=x+round((x1-x)/2)-round(length(mess)/2)+1; gotoxy (j1,y);
textcolor(1);
textbackground(15); write (mess);
end;
if napr then { верт. меню } begin
normcolor;
for i:=1 to maxel do begin
gotoxy (x+2,y+i); write (menu[i]); end;
Фрагмент 2. Программа формирования входных сигналов. unit fun1;
interface
var
numkw,razracp,typefiltr : integer; ampl,amsch,flow,fhi,m,fi,fi2,per : real; bsch,gsch : boolean;
function garm(tim : real) : real; function am(tim : real) : real; function amogib(tim : real) : real; function fm(tim : real) : real; function pila(tim : real) : real; function rect(tim : real) : real; function gs(tim : real) : real; function bs : real;
implementation
function garm; begin
garm:=ampl*cos(2*pi*flow*tim+fi);
end;
function am; begin
am:=ampl*(1+m*cos(2*pi*flow*tim+fi2))*cos(2*pi*fhi*tim+fi);
end;
function amogib; begin
amogib:=ampl*(1+m*cos(2*pi*flow*tim+fi2));
end;
function fm; begin
fm:=ampl*cos(2*pi*fhi*tim+m*sin(2*pi*flow*tim+fi2)+fi);
end;
function pila; begin
if tim<per*m then pila:=tim*ampl/(per*m)
else pila:=ampl-ampl*(tim-per*m)/(per*(1-m));
end;
function rect; begin
if tim<per*m then rect:=0
else rect:=ampl;
end;
function bs; begin
if amsch>0.1 then bs:=amsch*random else bs:=0; end;
function gs; begin
if amsch>0.1 then gs:=random*exp(-tim*tim/(2*amsch*amsch)) else gs:=0; end;
end.
Фрагмент 3.
begin |
|
grcol:=0; |
|
grmenu[1,1]:='параметры сигнала |
'; |
grmenu[1,2]:='параметры ацп |
'; |
grmenu[1,3]:='параметры анализатора'; grmenu[1,4]:='вывод формы сигнала'; grmenu[1,5]:='тип спектра'; grmenu[1,6]:='выход'; uprgrmenu[1]:=6;
for i:=1 to 6 do grmenu[2,i]:=select[4].menu[i]; uprgrmenu[2]:=6; grmenu[6,1]:='абсолютн.'; grmenu[6,2]:='нормирован.'; uprgrmenu[6]:=2; grmenu[3,1]:='сетка по вертикали'; uprgrmenu[3]:=1; grmenu[4,1]:='число полос'; grmenu[4,2]:='качество БПФ'; uprgrmenu[4]:=2;
grmenu[5,1]:='быстрое преобр. Фурье '; grmenu[5,2]:='аналог. фильтр сигнала'; uprgrmenu[5]:=2; grmenu[7,1]:='усиление : '; grmenu[7,2]:='полоса : 20-20000 Гц'; grmenu[7,3]:='сетка : '; grmenu[7,4]:='шум : '; grmenu[7,5]:='несущая : '; grmenu[7,6]:='вывод : '; grmenu[7,7]:='разбиений Б П Ф : '; grmenu[7,8]:='отображ.амплитуда : '; uprgrmenu[7]:=8;
end;
…………………………………………………………………………………..
if (bsch)and(bs>0) then matf:=(matf+bs/2)/(1+amsch/2);
if (gsch)and(gs(pp)>0) then matf:=(matf+gs(pp)/2)/(1+amsch/2); yp:=round(ynorm*matf);
if yp>ynorm then yp:=round(ynorm); if (fhi/flow>40)and (wbf=4) then
line(round(xp)+p1,round(yp1)+p2,round(xp)+p1,b-18-round(yp)) else line(round(xp1)+p1,round(yp1)+p2,round(xp)+p1,round(yp)+p2); if voi then
begin sound(round(yp)); delay(1);
end;
xp:=xp+1; until xp>xnorm; nosound; setcolor(15);
xpos:=round(a/2)+10; rectangle(xpos-1,round((b-1)/2+b/12-1),a-15,b-15); setcolor(0); rectangle(xpos,round((b-1)/2+b/12),a-16,b-16); ypos:=round((b-16+(b-1)/2+b/12)/2); line(xpos,ypos,a-16,ypos); p1:=round((a-16-xpos)/20);
p2:=round(ynorm/20);
for i:=1 to 19 do line(xpos+i*p1-3,ypos-5,xpos+i*p1-3,ypos+5); xpos:=round((xpos+a-16)/2);
for i:=1 to 19 do line(xpos-5,b-18-i*p2,xpos+5,b-18-i*p2); line(xpos,round((b-1)/2+b/12),xpos,b-16);
end;
Фрагмент 4
procedure SETMODE(mode: byte);
begin |
|
regs.ah:= 0; |
{ BIOS set mode function } |
regs.al:= mode; |
{ Display mode } |
intr($10, regs); |
{ Call BIOS } |
end; |
|
procedure SETREGISTERS(var palrec);
begin |
|
regs.ah:= $10; |
{ BIOS color register function } |
regs.al:= $12; |
{ Subfunction } |
regs.es:= seg(palrec); |
{ Address of palette info. } |
regs.dx:= ofs(palrec); |
|
regs.bx:= 0; |
{ First register to change } |
regs.cx:= $100; |
{ Number of registers to change } |
intr($10, regs); |
{ Call BIOS } |
end; |
|
……………………………………………………………………………….
Фрагмент 5
Procedure SetUpVirtual; BEGIN
GetMem (VirScr,64000); vaddr := seg (virscr^);
END;
procedure unpack;
var gofs,j : word; i,k,v,loop : byte; begin
seek(pcxfile,128); gofs := 0;
for i := 0 to header.ymax-header.ymin+1 do begin j := 0;
while j < header.bytes_per_line do begin blockread(pcxfile,v,1);
if (v and 192) = 192 then begin loop := v and 63; inc(j,loop); blockread(pcxfile,v,1);
for k := 1 to loop do begin Mem[Vaddr:gofs] := v;
inc(gofs);
end; end
else begin Mem[Vaddr:gofs] := v; inc(gofs);
inc(j);
end;
end;
end;
end;
Procedure WaitRetrace; assembler; label
l1, l2; asm
mov dx,3DAh l1:
in al,dx and al,08h jnz l1
l2:
in al,dx and al,08h jz l2
end;
procedure read_256; begin
SetUpVirtual; (*initilizes the pointers*) assign(pcxfile,sss);
reset(pcxfile,1);
if not validpcx then error('Not a 256 color PCX file.'); if not validpal then error('Palette corrupt.');
Unpack; Setvideo($13); Setpal;
Move(Virscr^,MEM[VGA:0],64000); (*Stick the virtual page to the vga mem*) close(pcxfile);
FreeMem (VirScr,64000); (*Free up virtual memory*) end;
end.