У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент


Міністерство освіти та науки України

Лабораторна робота№

«Обробка цифрових сигналів»

Мета роботи: здійснити демодуляцію амплітудно_модульованого сигналу заданого послідовністю цифрових відліків.

Теоретичні відомості

Обробка модульованих сигналів займає важливе значення в сучасній техніці. Суть модуляції – перенесення низькочастотної інформаційної складової в більш високочастотну (ВЧ) область спектру. В радіотехніці перенос в ВЧ –область дозволяє здійснити випромінювання сигналу в навколішній простір, в приладобудуванні – здійснити підсилення наднизькочастотних коливань за схемою “модулятор/демодулятор” (МДМ), в телефонії – по двопровідній лінії звґязку передати на різних модуляційних несучих частотах декілька різних розмов.

Для побудови дешевих інформаційно-вимірювальних систем спостереження на базі ЕОМ зручно використовувати поширені плати АЦП призначені для запису та відтворення аудіосигналів (т.зв. “звукові карти”). Особливістю їх функціонування є обмежений частотний діапазон, як правило 15 Гц…22 кГц, де верхня частота обмежена частотою дискретизації АЦП (може задаватись з ряду 8, 22, 32, 44.1, 48, та 96 кГц в залежності від можливостей конкретної звукової плати). Розрядність плат – 16, 20, 24. Останні дві – зустрічаються рідко в дорогих екземплярах плат. При необхідності вимірювання наднизькочастотних сигналів за допомогою ЕОМ (тиск в трубопроводах, темпаратура, навантаження) з частотним діапазоном 0…1 Гц., можна скористатися звуковою платою. Максимальна похибка таких вимірювальних систем –менша 1% на всьому проміжку часу, а похибка зміни сигналу протягом інтервалу часу 5 хв. не перевищує 0.05%. Вхідний діапазон сигналу по напрузі для звукових плат складає від 0 до 1…4 В по амплітуді в залежності від конкретної моделі звукової плати. Власний шум АЦП, як заслідчують експериментальні дослідження складає 2..3 двійкові розряди. Тому при наявності фактично 13 – 15 розрядного АЦП (8192…32768 градацій вхідного сигналу) можна забезпечити точні відносні вимірювання без підстроювання вхідного діапазону для кожного типу вимірювального обґєкта.

Завдання

За допомогою довільно вибраного програмного середовища (MathCAD, MathLab, Borland++ Builder, Delphi, Basic, Pascal, C, Fortran) написати програму_демодулятор файлів “AM_testХ.txt”. (де Х-№ файлу) Програма повинна формувати вихідний файл, в якому записана огинаюча зміни амплітуди вхідного сигналу. Програма повинна ігнорувати перехідні процеси (паразитні коливання амплітуди одного імпульсу ) Програма повинна графічно відтворювати результат демодуляції на екрані.

Виконання роботи

Програма мовою С.

#include <string.h>

#include <ctype.h>

#include <stdio.h>

#include <stdlib.h>

#include <graphics.h>

#include <bios.h>

#include <math.h>

#define true 1

#define false 0

float x4[640];

void grafik()

{

int j,i,r=0,gmode,gdriver=DETECT;

double k;

char qwe[20];

initgraph (&gdriver,&gmode,"\BGI");

setcolor (BLUE);

for(i=0;i<6;i++,r+=80)

{

line(0,r,640,r);

}

for(i=0,r=0;i<8;i++,r+=80)

{

line(r,0,r,480);

}

setcolor (RED);

line (0,0,0,479);

line (1,0,1,479);

line (0,479,639,479);

line (0,478,639,478);

setcolor (WHITE);

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

{

line (i,400-x4[i]*240/10000,i+1,400-x4[i+1]*240/10000);

}

setcolor (WHITE);

outtextxy (7,15,"y(t)");

outtextxy (620,470,"t");

bioskey(0);

closegraph();

return;

}

void main(int argc, char *argv[])

{

register int a,i;

char buff[20]="AM_test.txt";

float b[3],c;

int max;

FILE *f1,*f2;

if(argc>1)for(i=0;(buff[i]=*(argv[1]+i))!=0;i++);

if(!(f1=fopen(buff,"r+")))return;

for(i=0;buff[i]!='.';i++);

strcpy(&buff[i],"1.txt");

f2=fopen(buff,"w+");

a=0;i=1;

do

{

fgets(buff,20,f1);

if(feof(f1)) break;

b[0]=atof(buff);

do

{

max=false;

do

{

fgets(buff,20,f1);

if(feof(f1)) break;

b[1]=atof(buff);

if( ( c=fabs(b[0])-fabs(b[1]) )>0 )

{

max=true;

c*=0.1;

}

else b[0]=b[1];

}

while(!max);

if(feof(f1)) break;

do

{

fgets(buff,20,f1);

if(feof(f1)) break;

b[2]=atof(buff);

if( fabs(b[1]-b[2]) < c )

{

b[2]=fabs(b[2]);

x4[a++]=b[2];

fprintf(f2,"%.0f\n",b[2]);

break;

}

}

while(max);

do

{

fgets(buff,20,f1);

if(feof(f1)) break;

b[1]=atof(buff);

if( (b[0]>0)&&(b[1]<0) )max=false;

if( (b[0]<0)&&(b[1]>0) )max=false;

}

while(max);

}

while( !feof(f1)&&( a<640 ) );

if(feof(f1)){for(;a<641;a++)x4[a]=0;grafik();break;}

else

{

a=0;

grafik();

}

}

while(i);

}

Програма мовою ASSEMBLER для визначення максимума.

DOSSEG

.model small

.stack 100h

.data

message db "Програма визначення максимуму.",0dh,0ah,'$'

message_1 db "Будь-ласка натиснiть <enter> для запуску чи <esc> для виходу",0dh,0ah,'$'

message_2 db "Зачекайте будь-ласка. Програма обробляє данi!.....",0dh,0ah,'$'

message_3 db "Максимальне число по модулю = ",'$'

open_file db 'AM_test.txt',0

reg_si dw 0

buffer_3 db 8 dup(0)

buffer_2 db 8 dup(0)

buffer_1 label byte

.code

start:

mov ax,@data

mov ds,ax

mov ah,09h

mov dx,offset message

int 21h

mov dx,offset message_1

int 21h

dec ah

no_enter:

int 21h

cmp al,1bh

jnz cmp_enter

jmp exit_program

cmp_enter:

cmp al,0dh

jnz no_enter

mov ah,09h

mov dx,offset message_2

int 21h

mov ax,3d80h

xor cl,cl

mov dx,offset open_file

int 21h

mov bx,ax

xor si,si

next_letter:

mov ah,3fh

mov cx,0001h

mov dx,offset buffer_1

int 21h

dec ax

js end_file

mov al,buffer_1

cmp al,'-'

jz next_letter

cmp al,0dh

jz next_word

cmp al,0ah

jz next_word

mov byte ptr[buffer_2+si],al

inc si

jmp next_letter

next_word:

cmp si,reg_si

jz cmp_max_number

jnc change_max_1

max_no_change:

xor si,si

jmp next_letter

cmp_max_number:

mov reg_si,si

xor si,si

mov cx,reg_si

next_charter:

mov al,byte ptr[buffer_2+si]

cmp byte ptr[buffer_3+si],al

jc change_max

jnc max_no_change

inc si

loop next_charter

jmp change_max

change_max_1:

mov reg_si,si

change_max:

xor si,si

mov cx,reg_si

next_charter_1:

mov al,byte ptr[buffer_2+si]

mov byte ptr[buffer_3+si],al

inc si

loop next_charter_1

xor si,si

jmp next_letter

end_file:

mov ah,09h

mov dx,offset message_3

int 21h

xor si,si

mov cx,reg_si

mov ah,02h

next_charter_2:

mov dl,byte ptr[buffer_3+si]

int 21h

inc si

loop next_charter_2

mov ah,08h

int 21h

exit_program:

mov ah,4ch

int 21h

end start

Висновок: розроблено прогаму мовою С для побудови графіку з даних, записаних у файлі та програму мовю assembler для знаходження максимуму.