Beruflich Dokumente
Kultur Dokumente
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.
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:
% 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.
% 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');
n=rand(1,501);
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);
subplot(3,2,2);
plot(t,a);
xlabel('t-->');
ylabel('v(t)-->');
title('Analog signal');
n=rand(1,501);
subplot(3,2,4);
plot(t,n);
xlabel('t-->');
ylabel('n(t)-->');
title('AWGN Noise');
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 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.
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);
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;
stairs(t1,a2,'k--');
xlabel('vrijeme (nT_S)-->');
ylabel('amplituda -->');
title('DTDV');