Implementação em DSP de um Modem Padrão V.29
Glauco Cardozo, Walter Gontijo
Universidade do Vale do Itajaí - UNIVALI
[email protected]
Resumo
Atualmente muitas empresas vêm utilizando modems
embarcados em suas soluções. Nestes casos é preciso
optar entre um chip modem ou um soft modem, sendo que
este segundo possui algumas vantagens em relação ao
primeiro. Desta forma, este trabalho buscou a
implementação de um modem padrão ITU-T V.29 em um
DSP (Digital Signal Processor). Tal implementação tem
como meta a obtenção de um código base que possa ser
utilizado no desenvolvimento de um soft modem
compatível com soluções comerciais. Com base nos
códigos da biblioteca Spandsp [3], o algoritmo do V.29
foi implementado em linguagem C, sendo que o DSP
adotado foi o TMS320C5410 da Texas Instruments. Com
as simulações efetuadas verificou-se o correto
funcionamento de modulação e demodulação do
algoritmo, sendo que para isso é indispensável que
transmissor
e
receptor
estejam
perfeitamente
sincronizados.
1. Introdução
Para viabilizar a transferência de dados no formato
digital por meio de canais analógicos, foram
desenvolvidos os MODEMS (Modulador, demodulador),
cuja função é converter os bits 0 e 1 dos formatos digitais
em freqüências compatíveis com os sinais analógicos.
O padrão V.29 foi estabelecido pelo ITU (International
Telecommunications Union), e é adotado por grande parte
dos modems com velocidades de 9.600 bps (bits por
segundo). Atualmente, modems como o padrão V.29 são
empregados em sistemas dedicados, com finalidades
específicas.
O padrão ITU V.29 permite transmissão síncrona a
uma taxa de 9.600 bps para operação em linhas alugadas,
aceitando taxas de fallback de 7.200 e 4.800 bps, com
circuitos de 4 fios para operação full-duplex ou dois fios
para operação half-duplex. A modulação adotada por este
padrão é do tipo 16-QAM, com uma freqüência de
portadora de 1.700 Hz e uma taxa de modulação de 2.400
bauds por segundo.
A implementação do algoritmo de modem e da
aplicação em um mesmo DSP é cada vez mais comum,
visto a necessidade da customização de recursos assim
como uma maior integração entre os sistemas.
Para a correta transmissão dos dados, várias etapas se
fazem necessárias, já que ambos os modems, transmissor
e receptor, devem estar perfeitamente sincronizados.
2. Soft modem x Chip modem
Muitas empresas utilizam DSPs no desenvolvimento
de seus produtos. Algumas destas soluções utilizam
modems que atuam em conjunto com a aplicação
desenvolvida, sendo que nestes casos, são utilizados chips
dedicados para tal função. Recentemente as empresas têm
buscado implementar tais modems no próprio dispositivo
DSP, eliminando assim a necessidade de um chip externo.
Entre as vantagens que se pode ter na utilização de um
soft modem, está o fato de se poder rodar em um mesmo
processador, neste caso um DSP, a aplicação principal, e
um modem responsável pela comunicação deste com
sistemas externos. Assim, a utilização de um único chip,
além de um custo mais baixo, faz do soft modem uma boa
opção para sistemas embarcados que necessitem de
comunicação a distâncias maiores.
Outras vantagens relativas à utilização de um soft
modem são: maior integração, flexibilidade, sem risco de
descontinuidade no fornecimento, etc.
3. DSP
Processadores Digitais de Sinal são componentes
chaves em muitos produtos eletrônicos de comunicação,
industriais e instrumentação. Seu hardware e instruções
especializadas executam mais eficientemente as operações
matemáticas comuns em processamento de sinais.
O DSP adotado para realização deste trabalho foi o
TMS320C5410 da Texas Instruments. A família C54x
possui processadores
(DSPs)
de
ponto-fixo,
desenvolvido para satisfazer necessidades específicas de
aplicações em tempo real, como é o caso das
utilizadas na área de telecomunicações.
Assim como os demais DSPs da família C54x, o
C5410 possui uma estrutura interna altamente
paralelizada, permitindo a escrita e leitura de dados na
memória em um mesmo ciclo de clock. Sua memória
possui uma capacidade de endereçamento de 192k words,
sendo 64k para memória de dados, 64k para memória de
programas e 64k para I/O. Formando a CPU do C5410
temos uma ULA de 40 bits, uma unidade de shifter de 40
bits e dois acumuladores, também de 40 bits, além de uma
unidade MAC de 40 bits com um multiplicador de 17 bits
por 17 bits [2].
4. Algoritmo do V.29
Escrito na linguagem de programação C, o algoritmo
do V.29 utilizado foi baseado na biblioteca Spandsp [3],
que fornece muita das funções necessárias para telefonia e
é de distribuição livre. Em sua estrutura o V.29 é
composto basicamente de um transmissor e um receptor,
além de códigos auxiliares como gerador senoidal,
equalizador e filtros.
O sinal da portadora é gerado usando-se o método
DDS (Direct Digital Synthesis), com a utilização de duas
ondas em quadratura.
4.1. Transmissor
No transmissor encontra-se um filtro RRC (Rised Root
Cosine) utilizado durante a modulação do sinal. Este filtro
tem como objetivo eliminar anomalias e ajustar o sinal
para ser transmitido, de acordo com a natureza do meio de
transmissão.
O sinal de saída é composto por um fluxo continuo de
8.000 amostras por segundo. Estas amostras são geradas a
partir dos dados que serão transmitidos, e depois de
filtradas são multiplicadas á portadora formando o sinal
de saída [3].
No início de cada transmissão uma seqüência de
treinamento, composta por quatro etapas distintas é
enviada antes dos dados. A primeira etapa do treinamento
é opcional. Nela a onda portadora é enviada sem nenhuma
codificação, tendo como objetivo auxiliar na proteção
contra eco. Já nas três etapas seguintes, uma série de
códigos pré-estabelecidos é enviada ao receptor. Estes
códigos servirão de base para que o receptor possa ser
calibrado e interpretar corretamente o sinal recebido.
Finalizado o treinamento, a informação a ser
transmitida é repassada ao modem através da função
“get_bit”, sendo que isto é feito com o repasse de um bit
por cada chamada da função.
Na Figura 1 vemos o diagrama de bloco do algoritmo
do transmissor do V.29.
Dados de
Treinamento
Dados a
serem
Enviados
fake_get_bit
get_bit
v29_tx_state_t
(Estado)
Dados a
serem
Transmitidos
Dados da
Portadora
dds_complexf
v29_tx_init
(Inicialização)
v29_tx
(Transmissão)
Figura 1: Transmissor do V.29.
4.2. Receptor
No receptor, além do filtro RRC, tem-se também um
equalizador adaptativo. Este equalizador é baseado no
algoritmo Gardner, e tem como finalidade analisar as
amostras e corrigir automaticamente o sinal recebido [3].
Durante a segunda etapa do treinamento, quando o
nível de potencia do sinal da portadora ultrapassar o
mínimo de -26 dB, este é identificado pelo receptor, que
por sua vez inicia o processamento do mesmo. O nível do
sinal medido nesta etapa serve para fixar o ganho do
receptor, sendo que qualquer variação subseqüente do
sinal é identificada e tratada pelo equalizador adaptativo
[3].
Ao termino das 128 alternâncias que constituem a
segunda etapa, da-se inicio a terceira etapa do
treinamento. É durante esta etapa que o equalizador
adaptativo é calibrado. Para isto o transmissor envia uma
seqüência de 384 símbolos. O sinal oriundo do
transmissor é de 1.700 Hz com uma tolerância de +-1 Hz,
sendo que no receptor essa tolerância é de +-7 Hz. Desta
forma tem-se no pior caso uma taxa de rotação com cerca
de 1 grau por símbolo recebido [3].
Na ultima fase de treinamento, uma seqüência curta de
48 símbolos formados por “uns” é recebida. Essa
seqüência de dados compostos por “uns” é misturada pelo
“scrambler” antes de ser enviada pelo transmissor e tem
como objetivo garantir que os dados enviados estão sendo
recebidos corretamente. Ao final do treinamento, os dados
reais começam a ser recebidos e decodificados pelo
receptor, que na seqüência os repassa a função (callback)
“put_bit”, responsável por reconstruir a informação
recebida.
Na Figura 2 vemos um diagrama de bloco do algoritmo
do receptor do V.29.
Sinal
Recebido
v29_rx
(Recepção)
v29_rx_init
(Inicialização)
equalizer_get
(Equalização)
process_half_
baund
(Treinamento)
v29_rx_state_t
(Estado)
decode_baund
(Decodificação)
Algumas funções e equações contidas no algoritmo do
V.29 também tiveram que ser refeitas, sendo que durante
a execução destas equações, o produto de alguns valores
resultava num valor com mais de 32 bits, ultrapassando
assim a quantidade de bits dos tipos de dado suportado
pelo DSP. A solução para este problema foi a modificação
destas funções, efetuando divisões antes dos produtos, e
refazendo as operações ao final das equações, sem afetar
assim no resultado final da função, conforme mostra a
Tabela 1.
5. Resultados
put_bit
Dados
Recebidos
Figura 2: Receptor do V.29.
4.2. Alterações no Código
Para que o algoritmo pudesse ser compilado
corretamente, alterações em relação aos tipos de dados
tiveram que ser feitas. Como o compilador do CCS define
os tipos inteiros com 16 bits e a biblioteca spandsp foi
escrita para um processador x86 (inteiros de 32 bits), estes
códigos tiveram que ser alterados. Desta forma, todos os
dados declarados como inteiro (int) tiveram que ser
reescritos com um tipo de 32 bits, sendo que neste caso
utilizou-se o tipo “long”.
Com o código em linguagem C, a simulação do modem
no DSP foi realizada a partir o ambiente de simulação do
CCS (Code Composer Studio).
Como entrada para modulação, utilizou-se um arquivo
(seno.dat) contendo amostras de um sinal senoidal cuja
freqüência é de 300 Hz.
Como saída do transmissor, obteve-se um arquivo com
o sinal composto pelas amostras geradas pelo modulador,
conforme a Figura 3.
Função sem alteração.
int32_t power_meter_update
(power_meter_t *s, int16_t amp){
s->reading += ((amp*amp - s->reading)
>> s->shift);
return s->reading;
}
Função com alteração.
int32_t power_meter_update
(power_meter_t *s, int16_t amp){
Figura 3: Sinal de saída do V.29.
Sentando o parâmetro “TEP” como “True” na
inicialização do transmissor, este enviará na primeira
parte do treinamento a onda portadora sem nenhuma
modulação. Plotando a FFT (Fast Fourier Transform)
desta parte do sinal é possível verificar a correta geração
da portadora com 1.700 Hz, como mostra a Figura 4.
int_32 valor1;
int_32 valor2;
int_32 valor3;
valor1 = amp >> s->shift;
valor1 = valor1 * amp;
valor2 = s->reading >> s->shift;
valor3 = valor1 - valor2;
Figura 4: FFT da portadora do V.29.
s->reading += valor3;
return s->reading;
}
Tabela 1: Alteração do código.
O sinal gerador pelo transmissor foi repassado ao
receptor que executou a demodulação do mesmo, obtendo
como saída o sinal original de 300 Hz.
Para que esta demodulação fosse possível é
indispensável que o equalizador adaptativo esteja
calibrado a fim de identificar corretamente os sinais
recebidos. Na Figura 5 é possível analisar o gráfico da
constelação do sinal recebido após este ser corretamente
equalizado.
Scatter plot
5
Quadrature
3
1
0
-1
-3
-5
-5
-3
-1
0
1
In-Phase
3
5
Figura 5: Constelação do sinal recebido.
A partir do mapa de memória do algoritmo do V.29,
gerado pelo CCS, observou-se que este ocupou um total
de 31.862 words, sendo que deste total, 17.145 words são
ocupados na memória de programas e 14.717 words na
memória de dados.
Na Tabela 2 é apresentado o número de ciclos de clock
para algumas das principais funções do V.29. Estes
valores foram computados de maneira acumulativa, já que
algumas funções estão inclusas em outras, sendo que tais
dados servem de base para comparação com outros
algoritmos do V.29.
Função
Nº
dds_complexf
807
Transmissor
getbaud
1.374
get_scrambled_bit
517
v29_tx
41.266
decode_baud
14.835
equalizer
107.01
Receptor
process_half_baud
134.88
put_bit
385
v29_rx
272.24
Tabela 2: Número de Clocks do V.29.
6. Conclusões
A simulação realizada no DSP apresentou um resultado
satisfatório, sendo que os dados modulados foram
corretamente demodulados.
As simulações efetuadas durante a implementação do
modem, mostraram a complexidade de se enviar dados
digitais por um canal analógico de forma síncrona.
Para que transmissor e receptor possam se comunicar
corretamente é necessário que estes estejam
sincronizados. Isto, por sua vez, seria muito difícil sem
uma prévia calibração efetuada pelo treinamento. Sendo
que sem este treinamento, tanto a recuperação do clock
assim como identificação da portadora poderiam ser
comprometidos.
Como a simulação ocorreu sob condições ideais de
funcionamento, sem a influência de um canal de
transmissão, não foi possível avaliar de maneira mais
eficaz, o funcionamento do equalizador adaptativo. No
entanto foi possível verificar que o uso do equalizador é
indispensável à correta demodulação do sinal recebido.
Com o número de cloks apresentados na Tabela 2, é
possível discernir que algumas funções poderiam ser
otimizadas, a fim de melhorar o desempenho do código. A
melhor opção para tais otimizações seria reescrever as
funções de maior relevância em linguagem Assembly, o
que se mostra como uma tarefa complexa e trabalhosa.
.
7. Referências
[1] ITU, International Telecommunication Union. ITU-T
Recommendation
V.29.
Disponível
em:
http://www.itu.int/rec/T-REC-V.29/en.
Acessado
em:
30/04/2007.
[2] TI, Texas Instruments. TMS320C54x Reference Set.
Disponível em: http://focus.ti.com/lit/ug/spru131g/spru131g.pd.
Acessado em: 04/10/2007.
[3]
SOFT-SWITCH.ORG.
Spandsp.
Disponível
em:
http://spandsp.sourceforge.net/soft-switch.org/index.html.
Acessado em: 29/03/2007.
[4] HELD, Gilbert. Comunicação de Dados. 6º ed. Rio de
Janeiro: Campus, 1999.
Download

Implementação em DSP de um Modem Padrão V.29