Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3385

.pdf
Скачиваний:
2
Добавлен:
15.11.2022
Размер:
4.73 Mб
Скачать

мых распространѐнных в то время. Тем не менее модель включает все элементы современного «виртуального» прибора и позволяет проводить учебные занятия по обеспечению соответствующих разделов ряда учебных дисциплин, в которых изучаются теоретические, практические и метрологические аспекты аналогового и цифрового (на базе аппарата БПФ) спектрального анализа. Кроме основных разделов, содержащих эмулятор спектроаанализатора, предусмотрено меню установки параметров входных сигналов, панель установки режимов работы аналогового и панель установки режимов работы «цифрового» спектроанализаторов.

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]