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.