Вы находитесь на странице: 1из 4

LEFT: Sistemas de Aquisicao de Dados

Simulacao de um Circuito de Modulacao Delta-Sigma


Andre Bastos da Cunha
27 de Abril de 2007

Introduc
ao

Pretende-se simular, numa linguagem arbitraria de programacao, um simulador que efectue


a modulacao de um sinal de entrada Vin com voltagem constante.
O circuito a simular esta esquematizado na Figura 1 e o seu funcionamento e descrito da
seguinte forma:
1. O sinal Vin e somado `a sada do DAC (que devera ser nulo na primeira iterada).
2. O sinal entra no integrador. Como e constante e estamos a integrar num intervalo
unitario, o circuito integrador mantem o valor da entrada e soma-lhe o valor da u
ltima
integracao. Na primeira integracao, este valor devera ser nulo e como tal o sinal de
sada devera ser igual a Vin .
` sada o sinal sera
3. O sinal sado do circuito integrador entra entao no comparador. A
1 ou 0 dependendo do sinal original ser positivo ou negativo respectivamente. Note-se
que um sinal nulo gera uma sada a 1.
4. O sinal, agora 1 ou 0, entra agora no conversor digital analogico (DAC) onde e convertido para o valor da voltagem de referencia Vref ou Vref respectivamente.
5. Depois de invertido, o sinal de sada do DAC e somado ao Vin e o processo recomeca.
O objectivo da simulacao e simplesmente obter a sequencia de 0 e 1 que e gerada ao fim
de N ciclos em Vout .
Quanto `a natureza do metodo, podemos afirmar em termos simplistas que o circuito
faz estimativas grosseiras quanto ao sinal, mede o erro cometido, integra-o e depois tenta
compensa-lo sucessivamente.
Quanto ao proposito deste tipo de modulacao, basicamente vai possibilitar atraves dos
princpios de oversampling mencionados na aula teorica, o noise shaping do rudo presente
num dado sinal e sua consequente deslocacao no espectro de frequencias para zonas longe da
frequencia que pretendemos extrair.

Vin +

Vout

Vref
DAC

-Vref
Figura 1: Circuito de modulacao .
Tendo em conta a simplicidade do situacao a implementar, torna-se algo difcil estudar os
efeitos referidos nos dois pontos acima e como tal vai incidir-se sobre o aspecto computacional
da implementacao.
Por fim, resta referir que a linguagem escolhida para o programa foi mais uma vez o
JAVA e que se recorreu a uma classe adicional, Consola.java, para efectuar os inputs.

Implementac
ao

Vai-se proceder a uma descricao detalhada do programa relegando para segundo plano as
questoes mais tecnicas de programacao focando-nos primariamente na ligacao do programa
com o modelo a implementar. Uma vez que o algoritmo e iterativo como e evidente pela
Figura 1, escolheu-se um ciclo for para o implementar, respeitando assim a natureza conceptual do projecto.
As variaveis de sada out dac, out soma, out intg e out comp sao respectivamente, a
sada do DAC de 1 bit, a sada do somador , a sada do integrador e a sada do comparador.
Todas elas sao doubles uma vez que e conveniente ter o maximo de precisao nestas variaveis
com excepcao da variavel out comp que reflecte apenas 1 bit, sendo por isso um int. Notar
que se podia ter atribudo um boolean a esta variavel mas tal escolha seria pouco simpatica
uma vez que se pretende extrair a sequencia binaria `a sada do comparador e como tal,
requereria mais codigo. Definou-se ainda a variavel ones que ira armazenar o n
umero de 1
detectados na sequencia binaria gerada.
As variaveis de entrada sao vref que reflecte o valor da voltagem de referencia do DAC,
Vref sendo Vref obtida a partir desta, e o sinal vin que e o valor da voltagem do sinal de
entrada constante Vin .
Por fim, como variaveis de controlo, temos iter e i que sao respectivamente, o n
umero
de ciclos a realizar no circuito e a variavel de controlo do ciclo for utilizado.
O ciclo devera entao correr o n
umero de vezes definido pelo utilizador em iter sendo
2

controlado pela variavel i .


Uma vez dentro do ciclo, somos confrontados com o algoritmo principal propriamente
dito. Comeca-se entao por multiplicar a sada do DAC, que na primeira iterada devera ser
igual a 0, por -1 para lhe inverter o sinal, sendo consequentemente somada `a variavel vin
tal como esta descrito no somador da Figura 1.

out_dac = out_dac * -1;


out_soma = vin + out_dac;
De seguida, para descrever o integrador, basta somar a variavel out soma com o anterior
valor integrado. Notar que o integral de out soma e sempre igual a si mesmo uma vez que
estamos a integrar uma constante num intervalo unitario. Desta forma para obter o integral
dos varios intervalos unitarios que compoem o conjunto total de iteradas, basta soma-los
iterativamente.

out_intg = out_intg + out_soma;


Passando ao comparador, se o valor integrado for maior ou igual a 0, o comparador sai a
1, a sada do DAC sai a Vref e como um 1 e capturado a variavel ones incrementa,
if (out_intg >= 0) {
out_comp = 1;
out_dac = vref;
ones = ones + 1;
}
caso contrario, o comparador sai a 0 e a sada do DAC sai a Vref .
else {
out_comp = 0;
out_dac = vref * -1;
}
Como u
ltimo passo do ciclo, o programa emite a sada do comparador, 0 ou 1.

System.out.println(out_comp);
Ja fora do ciclo, o programa imprime ainda o n
umero de 1 detectado no n
umero de
iteradas definido inicialmente.
3

System.out.println("O numero de 1 e");


System.out.println(ones);
System.out.println("num total de");
System.out.println(iter);

E aqui termina o programa.

Вам также может понравиться