Vous êtes sur la page 1sur 12

LEFT: Sistemas de Aquisicao de Dados

Simulacao de um Circuito de Modulacao Delta-Sigma


com Filtragem e Decimacao
Andre Bastos da Cunha
25 de Maio de 2007

Introduc
ao

Na sequencia do trabalho anterior, pretende-se adicionar as seguintes funcionalidades ao


circuito de modulacao ja implementado:
O sinal Vin devera ser agora um sinal sinusoidal arbitrario de frequencia maxima ate
1000 KHz e nao apenas um sinal constante;
Ao Vout ligar-se-a agora um modulo de filtro passa-baixo que devera ser simulado computacionalmente;
E por fim ligar-se-a ainda um modulo de decimacao que devera ser tambem simulado
computacionalmente.
Nao havendo restricoes relativamente `a funcao a utilizar escolheu-se arbitrariamente o
sinal descrito pela funcao:
Vin = 2[sin(2Fb 10x)+sin(2Fb 5x)+sin(2Fb 2x)+cos(2Fb 9x)+cos(2Fb 6x)+cos(2Fb 4x)]
(1)
Desta forma, o programa vai realizar o seguinte conjunto de operacoes:
Vai comecar por gerar uma sequencia de -1 e 1 a partir do sinal sinusoidal introduzido;
Essa sequencia vai dar entrada no filtro passa-baixo definido pela operacao de convolucao:
y[n] = x[n] h[k]

(2)

em que y[n] e o sinal de sada do filtro, o sinal x[n] e o sinal de entrada (neste caso a
sequencia de -1 e 1 gerada no modulador ) e h[k] corresponde a:
h[k] =

sin(c (k N ))
(k N )

(3)
1

em que c e a frequencia de corte. Os valores impostos para os parametros foram

. Para efeitos de calculo, a operacao de convolucao equivale a:


N = 32, c = 16
y[n] =

2N
X

h[k].x[n k].

(4)

k=0

O sinal reconstrudo vai entao dar entrada no decimador, onde se vai utilizar um criterio
pouco refinado que escolhe um ponto de 16 em 16 pontos da sequencia reconstruda.
O programa vai entao gerar dois graficos e em cada um deles vai apresentar uma
sobreposicao do sinal original primeiro com o sinal reconstrudo nao decimado e so
depois com o sinal decimado.
Por fim, vai efectuar o calculo do E.N.O.B. ou Effective Number Of Bits dado pela
expressao:
E.N.O.B. =

S.N.R 1, 72
6, 02

(5)

em que o S.N.R ou Signal to Noise Ratio e dado pela expressao:


S.N.R. = 20 log10

AM
e

(6)

em que AM e a amplitude maxima e e o erro medio dado pelo modulo da diferenca


entre o sinal original e os pontos filtrados.

Implementac
ao

Segue-se uma explicacao geral da arquitectura do programa e adoptou-se o MATLAB como


solucao para o implementar. O programa e constitudo por um script principal deltasigma.m
que gere alem de gerir toda a sequencia principal do programa, trata directamente do processo de modulacao implementado num trabalho anterior, corrige o sinal processado no
filtro por introducao de um pequeno offset e eliminacao dos pontos fronteira onde o processo
de convolucao nao e realizado correctamente por uma questao inerente `a forma como esta
definido e faz os dois graficos atras descritos que apresentam os resultados obtidos.
Por uma questao de elegancia e funcionalidade na programacao, tres das dependencias
necessarias para o funcionamento deste script foram definidas como funcoes externas.
A primeira funcao presente no ficheiro deltasigma fir.m nao e mais que a realizacao
do filtro passa-baixo tal como foi definido anteriormente. Em concreto, e tendo em conta os
parametros impostos a operacao equivale a:

y[n] =

64
X
sin( (k N ))
16

k=0

(k N )

x[n k]

(7)

que por causa da indeterminacao em k = 32 vai corresponder a realizar o conjunto de


somas

y[n] =

31
X
sin( (k N ))
16

k=0

(k N )

x[n k] +

33
X
sin( (k N ))
16

k=0

(k N )

x[n k] +

1
x[n k].
16

(8)

A funcao deltasigma dec.m e responsavel pela decimacao do sinal como foi definida
anteriormente e a funcao deltasigma enob calc.m efectua o calculo do S.N.R e do
E.N.O.B como foram definidos.
Para detalhes na implementacao, basta ler o codigo que se segue e os comentarios respectivos.

2.1

Script principal
Listing 1: deltasigma.m
% Sistemas de Aquisio de Dados, TPC n o 7
% Andr Cunha, n o 53757, LEFT

10

%
%
%
%

Simula o de um circuito delta-sigma que gera sequncias bin rias


a partir de um sinal sinusoidal de entrada que posteriormente
processado atravs de um FIR e de um critrio pouco refinado de
decimao.

% Clear workspace. Demora mais tempo mas assegura que no usamos


% variveis ou valores ao correr o programa mais do que uma vez.
clear;

15

20

25

% Inicializao das variveis.


out_dac = 0;
out_intg = 0;
out_comp = 0;
i = 0;
intervalo = 0;
pontos = 0;
tempos = 0;
ones = 0;
zeros = 0;
% Inicializao das matrizes e vectores.

30

v = [];
x = [];
sequence = [];
tempos = [];
sinal_fir = [];
sinal_decima = [];

35

40

%
%
%
%
%

O programa pergunta ao utilizador para introduzir voltagem de


referncia do DAC, frequncia base do sinal a modular, o intervalo
de tempo e o nmero de pontos a amostrar. Entre parntesis
colocaram-se valores sugeridos que funcionam bem para o sinal em
estudo.

vref = input(Qual o valor da voltagem de referencia do DAC? (10));


frq = input(Qual o valor da frequencia base do sinal ? (100));
intervalo = input(O intervalo devera ser entre 0 e ? (0.01));

45

pontos = input(Quantos pontos deseja amostrar? (3200));

50

%
%
%
%

Definio da funo que descreve o sinal de entrada que se


pretende modular. Qualquer funo pode ser usada convinhando que
se utilize como variavel o x, e opcionalmente uma frequencia base
frq (introduzida anteriormente).

x = 0 : intervalo/pontos : intervalo;
v = 2*(sin(2* pi *x*frq*10) + sin(2* pi *x*frq*5) + sin(2* pi *x*frq*2)...
+ cos(2* pi *x*frq*9) + cos(2* pi *x*frq*6) + cos(2* pi *x*frq*4));
55

% Definio do vector que vai armazenar a sequencia gerada pelo


% modulador delta-sigma.
sequence = [1:pontos];
60

% Ciclo que descreve o modulador delta-sigma (vai saltar-se uma vez


% que j foi explicado num trabalho anterior).

65

f o r i = 1 : pontos,
out_dac = out_dac * -1;
out_soma = v(i) + out_dac;
out_intg = out_intg + out_soma;
i f out_intg >= 0,
out_comp = 1;
out_dac = vref;
ones = ones +1;
else
out_comp = -1;
out_dac = -vref;
zeros = zeros +1;
end

70

75

sequence(i) = out_comp;
80

end
% Chama-se ento a funo que efectua a operao de convoluo na
% sequncia obtida do modulador delta-sigma.
85

sinal_fir = deltasigma_fir(pontos,sequence);
% Realiza-se um pequeno offset no vector para compensar os pontos
% "incompletos" que foram calculados no processo de convoluo.
90

f o r n = 33 : pontos,

sinal_fir(n-32) = sinal_fir(n);
end
95

100

f o r n = (pontos - 31) : pontos,


sinal_fir(n) = NaN;
end
% Cria-se um vector tempos para possibilitar a representao
% grfica do nosso sinal modulado.
tempos = 1 : pontos;
tempos = tempos * intervalo/pontos;

105

% Plotagem do sinal modulado antes do processo de decimao


% sobreposto ao sinal original.
f i g u r e (2),plot(x,v,tempos,sinal_fir),grid ,xlabel(Tempo (s)),...
ylabel(Amplitude)

110

% Chama-se a funo que realiza o processo de decimao sobre o


% sinal processado.
sinal_decima = deltasigma_dec(pontos,sinal_fir);
115

% Plotagem do sinal depois da decimao e sobreposio com o sinal


% original.

120

f i g u r e (3),plot(x,v,tempos,sinal_decima,rx),grid ,xlabel(Tempo (s)),...


ylabel(Amplitude)
% Clculo dos valores do SNR e do ENOB antes e depois da decimao.

125

% Para tal criou-se uma funo exterior que efectua o clculo


% destes valores e o apresenta no ecr quando chamada.
% Os inputs da funo so o sinal original, o sinal processado que
% se quer comparar, os pontos em que se analiza e o factor que
% determina o critrio de decimao (mltiplo de 32).

130

disp(Antes da decimacao:)
deltasigma_enob_calc(v,sinal_fir,pontos,1);
135

disp(Depois da decimacao:)
deltasigma_enob_calc(v,sinal_decima,pontos,16);

2.2

Fun
c
ao filtradora
Listing 2: deltasigma fir.m
% Sistemas de Aquisio de Dados, TPC n o 7
% Andr Cunha, n o 53757, LEFT
function sinal_fir = deltasigma_fir(pontos,sequence)

% Ciclo que efectua a operao de convoluo que se pretende


% implementar.

10

% Naturalmente a convoluo ocorre para todos os pontos amostrados,


% como tal o ciclo descrito para o nmero de pontos amostrados
% (varivel pontos).
f o r j = 1 : pontos,

15

% Aqui definimos o somatrio que descreve a operao de


% convoluo propriamente dita. O somatrio constitudo por
% 64 termos para cada ponto.
f or k = 0 : 64,

20

% Constri-se um vector bidimensional (uma matriz) que vai


% armazenar os ndices de k nas linhas e os ndices dos
% pontos nas colunas.
25

% Comea-se ento por estudar os casos em que j maior do


% que k.
i f j > k,

30

35

% Sempre que k = 32, tem-se uma indeterminao e como


% tal, tendo calculado a expresso desse termo
% analiticamente, calcula-se aqui o seu valor.
i f k == 32,
y(k+1,j) = 11 * 1/16 * sequence(j-k);
% Nos restantes casos em que j maior do que k e k
% assume valores diferentes de 32, o clculo feito
% da forma usual.

40

else
y(k+1,j) = 11 * sequence(j-k) * sin((pi/16*(k-32)))...
/(pi *(k-32));
end

45

% Nos casos em que j menor ou igual a k, impe-se um


% valor nulo na matriz.
% Note-se o factor correctivo igual a 11 da
% amplitude em todas as operaes

50

e l s e y(k+1,j) = 0;
end
end
55

end
% Tendo ento a matriz bidimensional completa, somam-se os seus
% termos em k e obtemos assim um vector com os valores do sinal
% filtrado.

60

sinal_fir = sum(y);

2.3

Fun
c
ao decimadora
Listing 3: deltasigma dec.m
% Sistemas de Aquisio de Dados, TPC n o 7
% Andr Cunha, n o 53757, LEFT
function sinal_decima = deltasigma_dec(pontos,sinal_fir)

% Para a decimao do sinal modulado, comea-se por definir um


% vector vazio de dimenso igual ao nmero de pontos que queremos
% representar.
10

15

20

f o r l = 1 : pontos,
sinal_decima(l) = NaN;
end
% Preenche-se o vector vazio parcialmente apenas com os pontos
% obtidos atravs critrio de decimao nas suas posies
% respectivas.
% Notar que se excluem os dois ltimos pontos por no terem
% validade real tendo em conta a correo de offset realizada
% acima.
f o r m = 1 : ((pontos/16)-2),
sinal_decima(16*m)=sinal_fir(16*m);
end

2.4

Fun
c
ao que calcula o E.N.O.B. e o S.N.R.
Listing 4: deltasigma enob calc.m
% Sistemas de Aquisio de Dados, TPC n o 7
% Andr Cunha, n o 53757, LEFT

% Clculo do desvio mdio ao sinal original dentro de pontos


% seleccionados com um factor de decimao.
function deltasigma_enob_calc(sinal,sinal_proc,pontos,crit_dec)

10

% Cria-se um vector que guarde os valores dos desvios ao sinal


% original para todos os pontos decimados.

15

f o r n = 1 : ((pontos/crit_dec) - 32/crit_dec),
desvios(crit_dec*n) = abs(sinal(crit_dec*n) - ...
sinal_proc(crit_dec*n));
end
% Calcula-se a mdia dos desvios.
desvio_med = mean(desvios);

20

% Obteno do valor mximo de amplitude do sinal original.


amplitude_max = max(abs(sinal));
25

% Clculo do SNR (Signal to Noise Ratio) de acordo com a expresso


% dada.
snr = 20* log10(amplitude_max/desvio_med);

30

% Clculo do ENOB (Effective Number Of Bits) de acordo com a


% expresso dada.
enob = (snr - 1.76)/6.02;

35

% Output no ecr dos valores encontrados para o SNR e o ENOB.

40

disp(O SNR calculado e igual a);


disp(snr);
disp(O ENOB calculado e igual a);
disp(enob);

10

Resultados

Para ter uma ideia daquilo que se deve esperar, introduziu-se o resultado ao correr o programa
com os valores recomendados no input.
Qual o valor da voltagem de referencia do DAC? (10)10
Qual o valor da frequencia base do sinal ? (100)100
O intervalo devera ser entre 0 e ? (0.01).01
Quantos pontos deseja amostrar? (3200)3200
Antes da decimacao:
O SNR calculado e igual a
40.9345
O ENOB calculado e igual a
6.5074
Depois da decimacao:
O SNR calculado e igual a
65.5044
O ENOB calculado e igual a
10.5888

11

Amplitude

10
0

0.001

0.002

0.003

0.004

0.005
0.006
Tempo (s)

0.007

0.008

0.009

0.01

Figura 1: Sobreposicao do sinal original com o sinal filtrado antes da decimacao.


8

Amplitude

10
0

0.001

0.002

0.003

0.004

0.005
0.006
Tempo (s)

0.007

0.008

0.009

0.01

Figura 2: Sobreposicao do sinal original com o sinal filtrado depois da decimacao.


12

Vous aimerez peut-être aussi