Sie sind auf Seite 1von 9

ADC and DAC using MATLAB

Here we add some Gaussian noise to the input sine wave and then will will convert that to
digital signal. This digital signal sampled data will be used in Modelsim. In the modelsim we
develop moving average filter using VHDL, this will filters the sampled data and writes into
another file. Using the new updated sampled data we will regenerate the Analog signal.

%ADC & DAC


clear all;
close all;
clc;
fs=500000; % taking sampling frequency as 500kHz
fm=10000; % input signal frequency 10kHz
t=1:200; % displaying 200 samples
x=5*cos(2*pi*(fm/fs)*t); %input sinusoidal signal
z=awgn(x,1);% adding white Gaussian noise to the input signal with S/N=1
h=1:1000;
plot(t,x,'g','LineWidth',2); % plotting input signal
hold on;
plot(t,z,'r','linewidth',1.5); % plotting noisy signal
hold on;
stem(t,z);
hold on;
Vd=-5:0.0390625:5; % step size =0.0390625, when n=8 bits
for i=1:256
Vdelta(i)=(Vd(i)+Vd(i+1))/2; % Quantization levels
end

i=0:255;
binary= dec2bin(i); % decimal to binary conversion
% Quantization of input signal
for i=1:200
for j=1:256
if(z(i)< Vd(1))
z(i) = Vdelta(1);
end
if (z(i) > Vd(257))
z(i) = Vdelta(256);
end
if(z(i) <= Vd(j+1) && z(i) >= Vd(j))
z(i) = Vdelta(j);
end
end
end
% Encoding the Quantized data
for i=1:200
for j=1:256
if (z(i)==Vdelta(j))
B_data(i,1:8) = binary(j,1:8);
end
end
end% representing binary data in decimal
figure
for i=1:200
B(i)=bin2dec(B_data(i,1:8));
end

% First solution; writing Encoded data into ADC.txt file. The we will
perfom
% Moving average filter operation in VHDL
f = fopen('ADC.txt', 'w');
for n = 1:200
fprintf(f, '%s\n', B_data(n,1:8));
end
fclose(f);
subplot(221);
plot(x);
title('original sinwave','fontsize',12);
xlabel('--->time in 2us');
ylabel('--->amplitude in volts');
subplot(222);
plot(z);
title('noise signal','fontsize',12);
xlabel('--->time in 2us');
ylabel('--->amplitude in volts');
% After the moving avg filter the filtered data has been written to
vhdl_out.txt file
f=fopen('vhdl_out.txt','r');
A = fscanf(f,'%g',[1 inf]);
fclose(f);

subplot(224)
plot(B)
title('signal with white gaussian noise','fontsize',12);
xlabel('--->time in 2us');
ylabel('--->amplitude in decimal');%Digital to Analog conversion
for i=1:192
for j=1:256
if(A(i)== j )
outpt(i)=Vdelta(j);
end
end
end
subplot(223);
plot(outpt);
title('filtered sine wave sinewave output','fontsize',12);
xlabel('--->time in 2us');
ylabel('--->amplitude in decimal');
Za signale prikazane na slici odrediti i predstaviti:
a) Šum za digitalni signal (AWGN), digitalni signal sa šumom
b) Šum za analogni signal (AWGN), analogni signal sa šumom

Rješenje:

% Imunitet na sum u digitalnim komunikacijama

clc; % komanda koja brise sadrzaj komandnog prozora


clear all; % brise vrijednosti promjenljivih i funkcija iz memorije
close all; % zatvara sve otvorene prozore sa graficima

% definisanje vremenskog intervala


t=0:.01:5;

% Digitalni signal koji je definisan kao vektor sa prvih 100 elemenata koji
% imaju vrijednost 1 komandom ones(1,100), zatim 100 elemenata koji imaju
% vrijednost 0 komandom zeros(1,100) itd.

a=[ones(1,100) zeros(1,100) ones(1,100) ones(1,100) zeros(1,101)];

% Komanda koja crta prvi grafik od 6 koji su raspoređeni u tri reda i dvije
% kolone, a na kome je prikazan digitalni signal

subplot(3,2,1);
plot(t,a,'r','LineWidth',3);
xlabel('t-->');
ylabel('d(t)-->');
title('Digital data: 10110');

% Generisanje suma n na osnovu funkcije rand(1,501) koja kreira vektor sa 501


% elementom cije su vrijednosti uniformno rasporedjeni slucajni brojevi.

n=rand(1,501);

% Komanda koja crta treci grafik od 6 koji su rasporedjeni u tri reda i


% dvije kolone, a na kome je prikazan sum za digitalni sisgnal.

subplot(3,2,3);
plot(t,n);
xlabel('t-->');
ylabel('n(t)-->');
title('AWGN Noise');
% Crtanje grafika koji prikazuje digitalni signal sa sumom

subplot(3,2,5);
plot(t,n+a);
xlabel('t-->');
ylabel('n(t)+d(t)-->');
title('Noisy d(t) at Rx');

% Analogni signal

a=3*sin(2*pi*.2*t)-3*cos(2*pi*.7*t)+7*cos(2*pi*t)+7*cos(12*pi*t);
a=a/max(a);

% Iscrtavanje grafika koji prikazuje analogni signal sa sumom

subplot(3,2,2);
plot(t,a);
xlabel('t-->');
ylabel('v(t)-->');
title('Analog signal');

% Generisanje suma n za analogni signal i njegov prikaz na grafikonu

n=rand(1,501);

subplot(3,2,4);
plot(t,n);
xlabel('t-->');
ylabel('n(t)-->');
title('AWGN Noise');

% Iscrtavanje grafika koji prikazuje analogni signal sa sumom

subplot(3,2,6);
plot(t,n+a);
xlabel('t-->');
ylabel('n(t)+v(t)-->');
title('Noisy v(t) at Rx');
Konverzija kontinualnih u diskretne signale

Vrijednost signala može biti kontinualna ili diskretna. Kada je vrijednost signala kontinualna
to znači da pripada skupu sa beskonačno mnogo vrijednosti u određenim granicama. Takvi
signali se zovu kontinualni signali.

- analogni signali su vremenski kontinualni i kontinualni po vrijednosti signala,


- digitalni signali su vremenski kontinualni i diskretni po vrijednosti signala,
- diskretni signali su vremenski diskretni i kontinualni po vrijednosti signala i
- kvantizovani diskretni signali su vremenski diskretni i diskretni po vrijednostima
signala.
Signal x(t) se posmatra u vremenskom intervalu t = [t1 t2], npr. između 10:10 i 10:11 sati. U
ovom slučaju ne postoji skup sa konačnim vrijednostima vremena i amplitude signala. To je
uslovljeno time što postoji beskonačan broj vrijednosti vremena u rasponu od t1 do t2, npr. 10h,
10min, 1s i 1.3ns. Takođe, vrijednosti za amplitudu signala su beskonačne u opsegu od Xmin
do Xmax. Ovaj tip signala je vremenski kontinualan i kontinualan po vrijednosti (continuous
time continuous valued - CTCV) signal.

Analogni signali imaju kontinualne vrijednosti za vremena i amplitude, ali digitalni uređaji ne
mogu da rade sa takvim signalima. Mnogi signali u prirodi su analogni, dok su savremeni
računari digitalne mašine koje mogu da prime i obrađuju informacije samo u obliku broja. Stoga
je potrebno napraviti konverziju (pretvaranje) analognog signala u kvantizovane diskretne
signale kojima se predstavljaju brojevi. Taj posao obavlja analogno-digitalni konvertor.

Da bi se konvertovao prikazani CTCV signal, potrebno je izvšiti diskretizacija po vremenu


(odabiranje). Jednako vrijeme između dva uzorka naziva se interval odabiranja, Ts. Ovakav
signal je vremenski diskretan i kontinualan po vrijednosti (discrete time continuous valued -
DTCV) signal.

Diskretizacija (kvantizacija) po amplitudi se vrši tako da opseg vrijednosti odmjerka preslika


u jednu brojnu vrijednost podataka. Ona može biti u rasponu vrijednosti od Xmin i Xmax. Da
bi se dobio konačan broj vrijednosti amplitude, skup konačnih brojeva se mora definisati u
rasponu od Xmax do Xmin. U ovom slučaju, definisano je 8 vrijednosti amplitude u rasponu
od 10(Xmax) do −10(Xmin). To su ±1.25, ±3.75, ±6.25, ±8.75.

Uzorci se mogu aproksimirati (t.j. kvantizovati) da bi bili najbliži stvarnim vrijednostima


amplitude. Ukoliko signal ima konačan broj vremenskih vrijednosti i vrijednosti amplituda,
kaže da je signal diskretan u vremenu i diskretan po vrijednosti (discrete time discrete valued
- DTDV).
% CTCV, DTCV, DTDV signali
clc;
clear all;
close all;

t=0:.001:5;

T=5;
f=1/T;
a=1.5*(5*sin(2*pi*f*t)+sin(7*pi*f*t));%+4*cos(4*pi*t);

subplot(3,1,1);

plot(t,a,'k');
xlabel('vrijeme -->');
ylabel('amplituda -->');
title('CTCV');

subplot(3,1,2);

t1=0:.5:5;
a1=1.5*(5*sin(2*pi*f*t1)+sin(7*pi*f*t1));
stem(t1,a1,'k');
xlabel('vrijeme (nT_S)-->');
ylabel('amplituda -->');
title('DTCV');

subplot(3,1,3);

% rezolucija

res=20/8;

% funkcija size vraca velicinu niza ili vektora. r je broj reda, a c kolona

[r c]=size(a1);

% funkcija zeros dodjeljuje vrijednost 0 od prvog do devetog clana niza

s=zeros(1,9);
s(1)=-10;

for i=2:9
s(i)=s(i-1)+2.5;
end;
for i=1:c
for j=2:9
if (a1(i)<=s(j) & a1(i)>=s(j-1))
a2(i)=(s(j-1)+s(j))/2;
end;
end;
end;
stem(t1,a1,'k');
hold on;

% funkcija stairs crta stepenasti grafikon navedenog vektora

stairs(t1,a2,'k--');
xlabel('vrijeme (nT_S)-->');
ylabel('amplituda -->');
title('DTDV');

% definise se prikaz legende na grafikonu


legend('Uzorkovani signal','Kvantizovani signal');

Das könnte Ihnen auch gefallen