MÉTODO E APARELHO PARA CODIFICAR E DECODIFICAR DADOS
Campo da Invenção A presente invenção se refere geralmente à codificação e decodificação de dados e especificamente, a um método e aparelho para turbo codificação e decodificação.
Antecedentes da Invenção As transmissões de dados digitais através de ligações cabeadas e sem fio podem ser corrompidas, por exemplo, por ruído na ligação ou canal, mediante interferência a partir de outras transmissões, ou por outros fatores ambientais. Para combater os erros introduzidos pelo canal, muitos sistemas de comunicação empregam técnicas de correção de erro para auxiliar na comunicação.
Uma técnica utilizada para correção de erro é a turbo codificação de um bloco de informação a ser transmitido. Utilizando tal técnica, um codificador dentro do transmissor de um sistema de comunicação codificará um bloco de entrada u de K' bits de comprimento em um bloco de palavra-código x de N bits. O bloco de palavra-código é então transmitido através do canal, possivelmente após processamento adicional tal como intercalação de canal conforme definido nas especificações IEEE 802.16e. No receptor, o turbo decodificador pega o vetor de sinal recebido y de comprimento N como entrada, e gera uma estimativa ü de vetor u.
Tipicamente o turbo codificador é composto de dois codificadores convolucionais constituintes. O primeiro codificador constituinte pega o bloco de entrada u como entrada em sua ordem original, e o segundo codificador constituinte pega o bloco de entrada u em sua ordem intercalada após passar u através de um turbo intercalador π. A saída do turbo codificador x é composta dos bits sistemáticos (igual ao bloco de entrada u) , os bits de paridade a partir do primeiro codificador constituinte, e os bits de paridade a partir do segundo codificador constituinte.
Correspondentemente o turbo decodificador dentro do receptor do sistema de comunicação é composto de dois decodificadores convolucionais constituintes, um para cada código constituinte. Os decodificadores constituintes são separados pelo intercalador π e o desintercalador correspondente π-1. Mensagens no formato de razões de log-verossimilhança (LLRs) são passadas entre os decodificadores constituintes iterativamente. A decisão ü é tomada após várias iterações. O turbo intercalador π é o componente-chave no modelo de turbo código. Ele é responsável pelo embaralhamento do bloco de entrada u de uma forma pseudo-aleatória, desse modo proporcionando as palavras-código x com distribuição de peso adequada, portanto capacidades adequadas de correção de erro. Em adição à performance de decodificação, o turbo intercalador π tem impacto significativo sobre a implementação do turbo decodificador dentro do receptor. Normalmente, a performance dos turbo códigos melhora com comprimento crescente do intercalador. Contudo, há um retorno decrescente ao se aumentar o tamanho do intercalador. Na prática, o tamanho de bloco máximo de Correção Antecipada de Erro (FEC) (isto é, tamanho de intercalador) de um turbo código é limitado a certo valor devido à complexidade e por razões de retardo. Portanto, se o tamanho do bloco de entrada (bloco de transporte concatenado ou CTB) for maior do que o tamanho de bloco FEC máximo suportado pelo turbo código, o CTB é segmentado (por exemplo, utilizando regra de segmentação de bloco de código) em vários segmentos pequenos, cada um dos quais é processado separadamente pelo turbo codificador no transmissor e correspondentemente pelo turbo decodificador no receptor.
Em alguns sistemas, o turbo código pode ser projetado para suportar apenas um pequeno número de tamanhos de bloco FEC por várias razões (por exemplo, decodificação de alta velocidade, armazenamento reduzido, etc.). Portanto, existe a necessidade de um método e aparelho para turbo codificar e decodificar que combine apropriadamente o CTB com os tamanhos de bloco FEC disponíveis.
MOTOROLA, FRANCE TELECOM, GET AND ORANGE, "EUTRA FEC
Enhancement", TDOC R1-061050 OF 3GPP TSG RAN WG 1 MEETING #44BIS, Athens, Greece se refere a turbo codificação para sistemas de comunicação 3GPP CDMA.
Descrição Resumida dos Desenhos A Figura 1 é um diagrama de blocos de um transmissor. A Figura 2 é um diagrama de blocos de um receptor. A Figura 3 é um diagrama de blocos do turbo codificador da Figura 1. A Figura 4 é um diagrama de blocos do formador de bloco de transporte pelo lado do transmissor. A Figura 5 é um diagrama de blocos de um montador de bloco de transporte pelo lado do receptor. A Figura 6 é um fluxograma mostrando a operação do transmissor da Figura 1. A Figura 7 é um fluxograma mostrando a operação do receptor da Figura 2.
Descrição Detalhada dos Desenhos Para tratar da necessidade mencionada acima, é provido aqui um método e aparelho para turbo codificação e decodificação. Durante a operação, um bloco de transporte concatenado (CTB) de comprimento X é recebido e um tamanho de bloco Ki de correção antecipada de erro (FEC) é determinado a partir de um grupo de tamanhos de bloco FEC não-contíguos disponíveis Kmin e Kmax, e em que <=A7< θ em que Ki se baseia adícionalmente em X. 0 bloco de transporte concatenado de comprimento X é segmentado em C segmentos cada um de tamanho substancialmente igual a Ki. Uma palavra código FEC para cada um dos C segmentos é determinada utilizando tamanho de bloco FEC Ki, e as C palavras código FEC são transmitidas através do canal.
Em uma modalidade alternativa, um bloco de transporte concatenado (CTB) de comprimento X é recebido Ki-i e Ki são determinados a partir de um grupo de tamanhos de bloco FEC não-contíguos, em que os tamanhos de bloco FEC não-contíguos disponíveis estão entre Kmin e Kmax, e em que <= A7-i< <= Â/<= θ em gue Kll θ Kl se baseiam adícionalmente em X. 0 bloco de transporte concatenado de comprimento X é segmentado em C segmentos cada um de tamanho substancialmente igual a Ki-i e Ki. Uma palavra código FEC para cada um dos C segmentos é determinada utilizando tamanhos de bloco FEC Ki ou Ki-i, e as C palavras código FEC são transmitidas através do canal. 0 benefício dos métodos acima é que eles reduzem o enchimento dos bits de enchimento exigidos para codificar o CTB, enquanto utilizando o menor número de segmentos permitido pelos tamanhos de bloco FEC não-contíguos disponíveis. Especificamente, o segundo método utiliza dois diferentes tamanhos de bloco FEC (porém adjacentes) para minimizar o número de bits de enchimento enquanto utilizando o menor número de segmentos conforme permitido pelos tamanhos de blocos FEC não-contíguos disponíveis. Além disso, os tamanhos de bloco FEC para os tamanhos de segmento e o número de segmentos para as duas modalidades podem ser determinados utilizando conjunto de circuitos, lógicos, simples.
Antes de descrever os dados de codificação e decodificação, as seguintes definições são providas para definir os antecedentes necessários: ■ Para facilidade de notação, um bloco de transporte concatenado se refere ao resultado de concatenar um ou mais blocos de transporte, após adicionar overhead tal como bits CRC para cada bloco de transporte. ■ X denota o tamanho de bloco de transporte concatenado (por exemplo, comprimento do bloco de transporte concatenado em bits). ■ Y denota o tamanho total de bits de enchimento adicionados a um bloco de transporte concatenado. ■ C denota o número de segmentos nos quais o bloco de transporte concatenado é segmentado. ■ CBSSi denota o tamanho do i° segmento de um bloco de transporte concatenado (i=1,... C), onde C é o tamanho do segmento. CBSS significa o tamanho de segmento de bloco. ■ K1-1 e Ki denotam tamanhos de bloco FEC (por exemplo, tamanhos para os quais o intercalador interno de turbo código é definido) que podem ser usados para codificar FEC os segmentos de um bloco de transporte concatenado. ■ Ktabie denota um conjunto de tamanhos de blocos FEC não-contíguos disponíveis (tamanhos para os quais um intercalador interno de turbo código é definido). ■ Kfiiier denota o número de bits de enchimento adicionados a um segmento. ■ R denota a taxa de código-mãe do turbo codificador (por exemplo, R = 1/3 para turbo-código de 3GPP) . ■ R-1 é o inverso da taxa de código-mãe do turbo codificador (por exemplo, R-1 = 3 para turbo-código de 3GPP). ■ Ntb é o número de bits finais no bloco codificado, especificamente para turbo-código de 3GPP, o Ntb = 12 para turbo-código de 3GPP com bits finais o Ntb = o para um turbo-código de 3GPP com códigos convolucionais constituintes tail-biting. ■ π denota o intercalador interno de turbo código. ■ A operação de limite mínimo . x. denota o número inteiro maior, menor do que ou igual a x e a operação de limite máximo ΓχΊ denota o menor número inteiro maior do que ou igual a x.
De acordo agora com os desenhos, em que numerais semelhantes designam componentes semelhantes, a Figura 1 é um diagrama de blocos do transmissor 100. Conforme mostrado, o transmissor 100 compreende conjunto de circuitos de segmentação de bloco de código 102, conjunto de circuitos de enchimento 103, turbo codificador 104, conjunto de circuitos de descarte de enchimento 105, transmissor 108, conjunto de circuitos lógicos 106, e tabela/meio de armazenamento 107. 0 transmissor 100 compreende adicionalmente conjunto de circuitos de recepção (não mostrado na Figura 1) que recebe um bloco de transporte concatenado de comprimento X. 0 conjunto de circuitos lógicos 106 determina um tamanho de bloco FEC disponível Ki a partir de um grupo de tamanhos de blocos FEC não-contíguos 107, em que os tamanhos de blocos FEC não-contíguos disponíveis estão entre Kmin e Kmax, e em que θ em gue Kl se baseia adicionalmente em X. 0 conjunto de circuitos de segmentação de bloco de código 102 segmenta o bloco de transporte concatenado de comprimento X em C segmentos de tamanhos substancialmente iguais à Ki, e conjunto de circuitos de codificação 104 determina uma palavra código FEC para cada um dos C segmentos utilizando o tamanho de bloco FEC Ki. Finalmente, o conjunto de circuitos de transmissão 108 transmite as C palavras código FEC através de um canal.
Em outra modalidade, o transmissor 100 compreende conjunto de circuitos de recepção (não mostrado na Figura 1) que recebe um bloco de transporte concatenado de comprimento X, conjunto de circuitos lógicos 106 que determina dois tamanhos de bloco FEC disponíveis Ki-i e Ki a partir de um grupo de tamanhos de bloco FEC não-contíguos 107, em que os tamanhos de bloco FEC não-contíguos disponíveis estão entre Kmin e Kmax, e em que <= K/-j< <= ky = Xmj,., θ em gue 2 θ se baseiam adicionalmente em X. 0 transmissor 100 compreende conjunto de circuitos de segmentação de bloco de código 102 que segmenta o bloco de transporte concatenado de comprimento X em C segmentos de tamanhos substancialmente iguais a K1-1 ou Ki, e conjunto de circuitos de codificação 104 que determina uma palavra código FEC para cada um dos C segmentos utilizando tamanho de bloco FEC Ki ou K1-1. Finalmente, é provido conjunto de circuitos de transmissão 108 que transmite as C palavras código FEC através de um canal. O conjunto de circuitos de codificação 104 é precedido por conjunto de circuitos de enchimento 103 que insere bits de enchimento nos segmentos para formar um bloco de entrada FEC. O codificador FEC 104 codifica o bloco de entrada FEC, e conjunto de circuitos de descarte de enchimento 105 descarta os bits relacionados aos bits de enchimento.
Durante operação do transmissor 100, os dados na forma de um bloco de transporte concatenado são recebidos pelo conjunto de circuitos 102. O conjunto de circuitos 102 prepara o bloco de transporte concatenado antes da codificação de Correção Antecipada de Erros (FEC).
Em geral, a faixa dos tamanhos CTB (isto é, X) pode ser diferente da faixa dos tamanhos de bloco FEC suportados pelo esquema FEC subjacente na camada física para um sistema de comunicação. Portanto, é necessário definir uma regra que divide um CTB em segmentos que podem ser manejados eficientemente pelo FEC. Especificamente, os tamanhos de CTB (isto é, X) frequentemente são muito maiores do que o tamanho de bloco FEC máximo que o codificador FEC 104 pode manejar. Portanto, o CTB precisa ser segmentado pelo conjunto de circuitos 102 em um número de segmentos de tamanho menor e cada segmento precisa ser codificado pelo codificador FEC 104 em uma palavra código FEC separada. O conjunto de circuitos 102 utiliza uma regra de segmentação de bloco de código que é projetada para obter bom desempenho (isto é, o desempenho agregado dos segmentos para um determinado CTB) com FEC subjacente. Ele envolve os seguintes aspectos para qualquer tamanho de CTB determinado: ■ Escolha do número de segmentos C; ■ Escolha dos tamanhos de cada segmento; ■ Inserção dos bits de enchimento antes da codificação FEC e a remoção dos bits de enchimento após a codificação FEC, se o tamanho de segmento não puder ser manejado diretamente pelo FEC.
As regras de segmentação propostas são particularmente úteis para o sistema de Acesso de Rádio Terrestre UMTS-Expandido (EUTRA) onde um turbo codificador pode ser definido para apenas um conjunto limitado de tamanhos de bloco FEC (tamanhos de intercalador). Ao contrário do turbo codificador 3GPP Versão 6 que define 5.075 intercaladores de tamanho contíguo, um para cada tamanho de intercalador Ki entre 40 bits e 5.114 bits, um turbo codificador EUTRA pode define um número limitado de tamanhos de bloco FEC Ktabie (por exemplo, 40~50 intercaladores com tamanhos não-contíguos variando de 128 bits a 6.144 bits) para cobrir um grande número de tamanhos de segmento (por exemplo, 6.144128+1 = 6.017 tamanhos). Quando o tamanho de segmento é igual a um tamanho de bloco FEC disponível, então o segmento pode ser considerado como um bloco de entrada FEC diretamente (desse modo não precisa ser inserção de bits de enchimento). Contudo, quando o tamanho de segmento não é igual a qualquer um dos tamanhos de bloco FEC disponíveis, o enchimento de bit de enchimento pode ser aplicado, e o próximo maior tamanho de bloco FEC disponível (isto é, tamanho de intercalador) escolhido a partir de Ktabie 107 pode ser usado. Número de segmentos: As regras de segmentação consideram as seguintes propriedades de turbo codificação. (a) A performance do turbo código melhora à medida que aumenta o tamanho do bloco FEC. (b) Aperfeiçoamento da performance do turbo código por intermédio de tamanhos crescentes de bloco FEC tem retornos decrescentes além de uns poucos milhares de bits. (c) Um CTB é recebido corretamente apenas se todos os segmentos forem recebidos corretamente.
As propriedades (a) e (c) indicam que a performance global provavelmente deve ser dominada pelo segmento tendo o pior desempenho. Desse modo, é preferível ter segmentos que sejam aproximadamente de tamanhos iguais de modo que eles são codificados com FEC com aproximadamente tamanhos de bloco iguais de FEC (e, portanto, proteção de erro aproximadamente igual acordada a partir da perspectiva de FEC). A propriedade (b) sugere que não é necessário incluir intercaladores para cada tamanho grande na tabela (Ktabie). Contudo, os tamanhos de bloco de FEC definidos em Ktabie podem depender de outros fatores. Por exemplo, i) para armazenamento/complexidade reduzida, um pequeno número de intercaladores em Ktabie pode ser desejável, e ii) o tamanho de intercalador máximo definido em Ktabie pode ser escolhido para limitar o número de segmentos por CTB. Desse modo limitando a penalidade de segmentação de um CTB. A penalidade de segmentação é a perda de performance devido à divisão de um CTB em vários segmentos em vez de codificar o CTB inteiro em uma palavra código FEC. A propriedade (c) sugere que o número mínimo de segmentos deve ser usado para reduzir a penalidade de segmentação.
Considerando tudo que foi mencionado acima, o número de segmentos é “Γ^/^ιικιιΙ; onde Kmax é o tamanho máximo de bloco FEC definido em Ktabie. Supondo que CBSSi denota o tamanho de segmento do i° segmento (í = 1,... Cj do bloco de transporte concatenado, a soma de todos os segmentos é igual ao tamanho do bloco de transporte concatenado X, isto é, os tamanhos de segmento são limitados pela seguinte equação. A próxima seção descreve a determinação do tamanho de bloco FEC usado para codificação FEC, um para cada um dos C tamanhos de segmento.
Determinação de tamanho de bloco FEC
Dado que um CTB de comprimento X é a entrada para a função de segmentação de bloco de código, a regra para determinar o tamanho de bloco FEC (tamanho de intercalador) para o turbo codificador conforme descrito na Versão 6 do padrão 3GPP é conforme a seguir onde Kmax = 5114 é o tamanho de intercalador máximo para Turbo código Versão 6, C é o número de segmentos (ou blocos de código), Ki é o tamanho de intercalador, e Y é o número total de bits de enchimento inseridos para o CTB de tamanho X quando C blocos de entrada FEC de tamanho Ki são usados. Em essência, um CTB de tamanho X é segmentado em C segmentos de tamanho aproximadamente igual, e cada segmento é codificado utilizando um turbo código com um intercalador de U bits. Se Y > 0, Y bits conhecidos são preenchidos para o início do primeiro segmento antes da codificação. Como os tamanhos de blocos FEC (isto é, intercaladores) são definidos para todos os tamanhos entre Kmin = 40 e Kmax = 5114 no turbo código 3GPP Versão 6, o número de bits de enchimento é limitado por C, o número de segmentos usados para segmentação de blocos de código.
Contudo, em outros sistemas tal como aquele sendo considerado para EUTRA, os tamanhos de bloco FEC (tamanhos de intercalador) podem ser definidos apenas para tamanhos não-contíguos (um conjunto mais grosseiro de tamanhos de intercalador) Ktabie. Em tais casos, os tamanhos de segmento que não são iguais a quaisquer tamanhos de bloco FEC disponíveis (isto é, não definidos em Ktabie) precisam ser manejados utilizando bits de enchimento antes de codificação FEC (e perfuração após codificação para chegar a uma taxa de código desejada).
Supondo que um turbo codificador suporta apenas um número limitado de tamanhos de bloco FEC distribuídos entre Kmin e Kmax, ambos inclusivos, dois métodos simples de segmentação de blocos de código de um bloco de transporte concatenado de comprimento X utilizando Ktabie são descritos a seguir. Esses métodos utilizam o menor número possível de segmentos enquanto eles também reduzem o número de bits de enchimento que são exigidos para codificação.
Permitir apenas um tamanho de bloco FEC
Um método é o de modificar (1) e deixar todos os segmentos serem codificados com um único tamanho de intercalador Ki, onde onde i, l< = i< = T, é indexado no grupo de tamanhos de blocos FEC não-contíguos disponíveis em Ktabie, supondo que T tamanhos em Ktabie são classificados em ordem ascendente. Em essência, esse método escolhe o menor Ki a partir de Ktabie que é maior do que, ou igual a hM isto é, *T,-p7Cl+tf; onde £ »<*■(-*·,,. e A',-,<UZU.
Observar que é atribuído que Ki-i = 0 quando 1 = 1. Portanto, o número de bits de enchimento é dado por Portanto, Y é maior do que δ em tamanho. Os exemplos a seguir ilustram como o número de tamanhos de bloco FEC disponíveis {Ktabie) afeta Y. • Se Ktabie tem todos os valores entre Zmin = 4 0 e Zmax = 5114, o número máximo de bits de enchimento é igual a C-1 . • Se Ktabie tem valores T = 100 distribuídos uniformemente entre Zmin = 40 e Zmax = 5114, o número total máximo de bits de enchimento enchidos em todos os segmentos é aproximadamente igual a 50xC.
Portanto, o número de bits de enchimento pode ser controlado mediante variação da granularidade de tamanho de bloco FEC em Ktabie. 0 número de bits de enchimento também pode ser reduzido utilizando outra abordagem como descrito a seguir. Contudo, antes de discutir o próximo método, observa-se que em um caso geral, qualquer b/ci> pode ser escolhido a partir de Ktabie para codificação FEC à custa de um número potencialmente aumentado de bits de enchimento. Nesse caso, os tamanhos de segmento obtidos após a segmentação de blocos de código satisfaz 055¾ s Kh para í=l,...C. Nesse caso, o conjunto de circuitos lógicos 106 determina o número de segmentos usando a seguinte relação Permitir apenas dois tamanhos de blocos FEC adjacentes Em vez de usar um tamanho de bloco FEC Ki para codificar todos os segmentos de um dado CTB, propõe-se que dois tamanhos de bloco FEC adjacentes Ki-i e Ki, Ki-kKi, 1<=I<=T, sejam selecionados a partir de Ktabie. Observar que é atribuído que Ki-i=0 quando 1=1. 0 número de segmentos C e o tamanho de bloco FEC maior Ki ainda são escolhidos para serem idênticos como nos casos anteriores, isto é, C ainda é computado como em (1) e Ki ainda é computado como (2) . Contudo, o número de segmentos codificados com tamanho Ki-i e tamanho Ki é determinado como a seguir (para facilidade de entendimento, todas as computações envolvidas são repetidas abaixo). Nesse caso, o conjunto de circuitos lógicos 106 realiza as seguintes operações para achar o número de segmentos, e Ci-i e Ci representam o número de segmentos que são codificados utilizando os tamanhos de bloco FEC Ki-i e Ki, respectivamente, onde Ki é o menor tamanho a partir dos tamanhos de bloco FEC disponíveis que é maior do que ou igual a e Di denota a diferença entre os tamanhos de intercaladores adjacentes Ki-i e Ki.
Observar que em (4) Y não indica o número de bits de enchimento exigido se permitindo dois tamanhos adjacentes; mas indica que o número de bits de enchimento exigido tinha apenas um tamanho de Ki usado para todos os C segmentos.
Desse modo, a segmentação de blocos de código forma C segmentos, dos quais Ci-i segmentos são codificados FEC com um tamanho de bloco FEC Ki-i. Observar que quando Y<Di, (4) proporciona Ci-i=0, e esse método degenera para usar apenas um tamanho de bloco FEC de Ki (isto é, tamanho Ki-i é permitido, mas não efetivamente usado). Por outro lado, quando Y>=Di, esse método requer um número menor de bits de enchimento do que o enchimento de todos os C segmentos para o maior tamanho de bloco FEC Ki. Esse método é ótimo em que o número de bits de enchimento Y” adicionados por CTB é garantido para ser o mínimo enquanto utilizando o menor número possível de segmentos. Y” é determinado como a seguir r + CA, - A. „ (5) Pode ser comprovado que Y” é limitado por Di, independente de C, 0£ϊ’< K, -K,_,, (6) Nesse caso, os tamanhos de segmento obtidos após a segmentação de bloco de código têm as seguintes limitações, supondo (sem perda de generalidade que os primeiros Ci segmentos são codificados com Ki e o resto com Ki-i) .
Retornando à Figura 1, conforme discutido acima, um tamanho de bloco FEC adequado precisa ser escolhido a partir da Tabela 107 de tamanhos de blocos FEC não-contíguos. 0 conjunto de circuitos lógicos 106 realiza a tarefa de escolher o tamanho/tamanhos de blocos FEC apropriados conforme discutido acima. Um exemplo da Tabela 107 é fornecido na Tabela 1. Por exemplo, no primeiro caso, o conjunto de circuitos lógicos 106 escolhe o tamanho de bloco FEC a partir dos tamanhos de bloco FEC não-contíguos disponíveis entre Kmin e Kmax, e em que Kmin<=Ki< = Kmax, e em que Ki se baseia adicionalmente em X. Particularmente, se um único tamanho de bloco FEC Ki deve ser usado, o conjunto de circuitos lógicos 106 escolhe o menor Ki (a partir da Ktabie) que não é menor do que ruu. isto é, íf, -p/cl+d; onde δ>0 , e ai < r.r/cl . Se, contudo, dois tamanhos de bloco FEC devem ser usados, Ki-i e Ki são determinados com a equação (4) dando o número de segmentos que são codificados utilizando os tamanhos de bloco FEC Ki-i e Ki.
Tabela 1: 0 conjunto de tamanhos de bloco FEC para os quais o intercalador interno de turbo codificador é definido O codificador FEC subjacente 104 suporta apenas um conjunto limitado de tamanhos de bloco FEC (ou tamanhos de entrada). Sem perda de generalidade, supõe-se que o codificador FEC 104 seja um turbo codificador, e o conjunto de tamanhos de bloco FEC suportados pelo turbo codificador seja o conjunto de tamanhos de intercalador para os quais o intercalador interno de turbo código é definido. Contudo, aqueles de conhecimento comum na técnica reconhecerão que outros esquemas FEC podem ser usados em 104, incluindo códigos de verificação de paridade de baixa densidade (LDPC); códigos convolucionais; turbo códigos de bloco; códigos Reed-Solomon, etc.
Quando o número de segmentos C e o tamanho de bloco FEC para cada segmento forem determinados, essa informação é passada para o conjunto de circuitos de segmentação de bloco de código 102 onde o CTB (X bits) segmentado em C segmentos os quais são codificados com tamanho de bloco FEC Ki, se apenas um tamanho de bloco FEC for permitido. Alternativamente, se dois tamanhos de bloco FEC adjacentes forem permitidos, o conjunto de circuitos de segmentação de bloco de códigos 102 pode emitir Ci segmentos os quais podem ser codificados com tamanho de bloco FEC Ki e Ci-i segmentos os quais devem ser tamanho de bloco FEC codificado Ki-i.
Inserção de Bit de Enchimento O número de bits de enchimento (preenchidos para cada segmento) pode ser determinado com base no tamanho de segmento e no tamanho de bloco FEC sendo usado para codificação FEC do segmento. Há ao menos duas formas de distribuir os bits de enchimento totais nos C segmentos. · Enchimento concentrado. Colocar os bits de enchimento no menor número possível de segmentos sem tornar os tamanhos dos segmentos muito pequenos. Em um exemplo, todos os bits de enchimento podem aparecer no início do primeiro segmento. A vantagem é que apenas um segmento (contendo todos os bits de enchimento) precisa ser manipulado separadamente. Além disso, os bits de enchimento podem ser preenchidos no segmento que é codificado com o maior tamanho de bloco FEC Ki mais propriamente do que o menor tamanho de bloco FEC Ki-i quando dois tamanhos de bloco FEC são usados para um CTB. Esse método é particularmente atraente ao permitir dois tamanhos de bloco FEC adjacentes para codificação. · Enchimento distribuído. Distribuir os bits de enchimento igualmente (tanto quanto possível) em vários segmentos. Os bits de enchimento podem ser distribuídos em tantos quantos todos os C segmentos.
Para implementação eficiente do transmissor e do receptor, enchimento concentrado é preferido. Uma modalidade preferida é a de apensar Y” (se permitindo dois tamanhos de bloco FEC adjacentes; Y se permitindo apenas um tamanho de bloco FEC) bits de enchimento consecutivos na frente de um dois segmentos (por exemplo, o primeiro ou o último) utilizando o tamanho de bloco FEC Ki antes de enviar o mesmo para o codificador. Em termos de performance, é equivalente a apensar Y'' bits de enchimento consecutivos na extremidade de um segmento tendo tamanho de bloco FEC Ki.
Retornando à Figura 1, para cada segmento (produzido pelo conjunto de circuitos 102), uma palavra código FEC é determinada utilizando as etapas de inserir os bits de enchimento no segmento para formar um bloco de entrada FEC; codificar FEC o bloco de entrada FEC; e descartar os bits relacionados aos bits de enchimento.
Cada segmento produzido pelo conjunto de circuitos 102 é passado para o conjunto de circuitos de enchimento 103 onde ocorre a inserção do bit de enchimento. Se nenhum bit de enchimento for exigido, então o conjunto de circuitos de enchimento é transparente, isto é, nenhum bit de enchimento é adicionado (Kfiiier=0) . Os segmentos (junto com os bits de enchimento) são então passados para o turbo codificador 104 onde turbo codificação dos C segmentos leva a C palavras código FEC. Os bits de enchimento são então descartados pelo conjunto de circuitos 105 e as C palavras código resultantes são apropriadamente transmitidas pelo conjunto de circuitos de transmissão 108. Se nenhum bit de enchimento for adicionado pelo conjunto de circuitos 103, então o conjunto de circuitos de descartar enchimento 105 é transparente, isto é, nenhum bit de enchimento é removido (Kfiiier=0) . Observar que é possível que o conjunto de circuitos 105 possa não descartar quaisquer bits correspondendo aos bits de enchimento. A Figura 2 é um diagrama de blocos de um receptor. Durante operação o vetor de sinal recebido segue através do conjunto de circuitos de de-segmentação de bloco de código 202 o qual organiza porções do vetor de sinal recebido de acordo com o segmento com o qual elas estão associadas. O tamanho de segmento, número de segmentos, tamanho de bloco FEC usados para turbo decodificar cada segmento, número de bits de enchimento podem ser determinados utilizando conjunto de circuito lógico 213 e tabela de tamanho de bloco FEC disponível 215 de uma forma similar àquela no codificador. O conjunto de circuitos de manejo de enchimento 204 utiliza o conhecimento da localização dos bits de enchimento para favorecer o turbo codificador 206, por exemplo, mediante ajuste das LLRs correspondendo aos bits de enchimento em uma magnitude elevada. Após a turbo decodificação, o conjunto de circuitos 208 descarta os bits de enchimento para obter estimativa de um segmento. O montador de bloco de código 211 monta o transporte estimado mediante ação de adequadamente coletar e arranjar as estimativas dos segmentos obtidos a partir do conjunto de circuitos 208.
Remoção dos bits de paridade do codificador constituinte Essa seção provê uma forma específica de determinar a palavras código FEC. O método que tira proveito do conhecimento da inserção de bits de conhecimento no transmissor é descrito. Especificamente, o método determina quais bits (bits não apenas sistemáticos como também de paridade) podem ser descartados a partir da saída de turbo codificador com nenhuma, ou apenas insignificantes, degradação de desempenho. Em geral, os bits de enchimento são conhecidos e, portanto, os bits sistemáticos desses bits (igual aos bits conhecidos) podem ser descartados antes da transmissão. Contudo, não é evidente se quaisquer bits de paridade podem ser descartados. A Figura 3 é um diagrama de blocos do turbo codificador 104 da Figura 1. Durante a operação, o bloco de entrada de comprimento de Ki bits entra tanto no intercalador 301 como no codificador constituinte 302. O intercalador 301 intercala o bloco de entrada e passa o bloco de entrada em ordem intercalada para o codificador constituinte 303. O codificador constituinte 303 então codifica o bloco de entrada intercalado. De uma maneira similar, o codificador constituinte 302 codifica o bloco de entrada original. O bloco de palavra código x é composto de bloco sistemático (igual ao bloco de entrada FEC), saída do codificador constituinte 302, e saída do codificador constituinte 303. O bloco de palavra código x é então enviado ao conjunto de circuitos 105.
Em um turbo codificador convencional tal como, por exemplo, turbo códigos finais, o estado inicial dos codificadores constituintes (conteúdo de registrador de deslocamento) é supostamente de todos zeros. Em tal caso, quando Kfiiier bits de enchimento (normalmente 0) são inseridos no início do bloco de entrada de turbo código, os bits sistemáticos e os bits de paridade do codificador constituinte 302 correspondendo às posições de Kfiiier bit, são todos zeros. Portanto, esses bits podem ser descartados no transmissor e o receptor pode utilizar esse conhecimento ao realizar a turbo decodificação. Contudo, no codificador constituinte 303, os Kfiiier bits são embaralhados devido ao intercalador de turbo código e, portanto, os bits de paridade do codificador constituinte 303 correspondendo aos bits de enchimento não são conhecidos e assim não podem ser simplesmente descartados.
Quando o turbo codificador tem codificadores constituintes de tail-biting, o estado inicial dos codificadores constituintes pode não ser sempre zero. Para códigos tail-biting, o estado inicial e o estado final para um codificador constituinte são iguais e eles dependem do bloco de entrada. Portanto, quando Kfiiier bits de enchimento consecutivos (isto é, zeros) são inseridos no início do bloco de entrada de turbo código, os bits de paridade do codificador constituinte 302 correspondendo às posições de Kfiiier bits nem sempre são zeros. Contudo, pode ser comprovado que a maioria desses Kfiiier bits de paridade do codificador constituinte 302 não carregam informação.
Em geral, grupos de bits de enchimento consecutivos são inseridos em um segmento para formar um bloco FEC em que o comprimento do grupo é um múltiplo de 2m-1 ( = 7 para os códigos convolucionais constituintes dentro do turbo codificador 3GPP). Então, o bloco de entrada FEC é codificado FEC e os bits de paridade relacionados aos bits de enchimento são descartados. O codificador FEC pode ser um código convolucional tail-biting usado isoladamente, ou um código convolucional tail-biting usado como um código constituinte de um turbo codificador.
Especificamente, quando usados para turbo códigos com códigos constituintes tail-biting, grupos de bits sistemáticos correspondendo aos bits de enchimento podem ser descartados; e os bits de paridade correspondendo aos grupos de bits de enchimento na saída de um codificador constituinte podem ser descartados, em que o codificador constituinte pega o bloco de entrada FEC sem intercalação para turbo codificadores tail-biting. Isso pode ser mostrado como a seguir.
Deixemos o estado do registrador de deslocamento do codificador constituinte 302 na etapa i ser S(i), deixemos m ser o número de elementos no registrador de deslocamento, e deixemos γ ser qualquer número inteiro maior do que zero. Quando (2m-l)x/zeros são introduzidos no codificador constituinte a partir da etapa i + 1 para a etapa i+(2m-l)xy, o que se segue é uma propriedade do codificador convolucional recursivo (tal como aquele usado no turbo código 3GPP Versão 6), S(i)= S(i+(2”-l)x^ (7) Observar que S(i) pode não ser uma constante. Além disso, os estados S(j) intermediários podem não ser uma constante ou igual ao estado S(í) , i<j< = i+ (2“-l) χγ) .
Portanto, o estado do codificador constituinte permanece inalterado entre a etapa i+1 até a etapa i+(2“-1)χχ. Portanto, o transmissor pode tirar proveito de (7) mediante descarte da saída de codificador constituinte durante aquelas etapas, uma vez que esses bits de enchimento não mudam o estado do registrador de deslocamento e desse modo não proporcionam informação para o decodificador. 0 decodificador dentro do receptor também pode tirar proveito de (7) similarmente com base no conhecimento das posições e valores dos bits de enchimento. A seguir, o método acima é descrito com um exemplo onde Kfiiier bits de enchimento (zeros) são inseridos e constituem posições na entrada de um turbo código tail-biting.
Como Kfiiier bits de enchimento consecutivos (zeros) são inseridos no bloco de entrada de turbo código, e, portanto, pxyx(2m-l) bits de paridade do codificador constituinte 302 podem ser descartados, onde p é o número de bits de paridade na saída do codificador constituinte 302 que são gerados para cada bit no bloco de entrada FEC. Portanto, apenas os bits de paridade correspondendo aos grupos de bits de enchimento na saída do codificador constituinte 302 são descartados, em que o codificador constituinte 302 pega o bloco de entrada FEC sem intercalação para turbo codificadores tail-biting.
Para um turbo codificador 3GPP tail-bitincr, d=1 no codificador constituinte 1, m=3 . Desse modo bits de paridade podem ser descartados a partir do codificador constituinte 302 para Kfiiier bits de enchimento consecutivos. Como m=3, no máximo apenas 6 bits de paridade correspondendo aos Kfiiier bits de enchimento do codificador constituinte 302 podem precisar ser mantidos na saída do codificador constituinte 302.
No codificador constituinte 303, os Kfiiier bits de enchimento podem ser dispersos devido ao intercalador de turbo código. Portanto, pode não ser possível descartar os bits de paridade a partir do codificador constituinte 303 sem afetar o desempenho. A seção a seguir descreve alguns cenários exemplares nos quais a regra de segmentação de bloco de código pode ser usada, por exemplo, Repetição Híbrida-Automática reQuest (HARQ), Múltiplas Entradas, Múltiplas Saídas (MIMO), etc.
Formador de Bloco de Transporte (TB) A regra de segmentação de bloco de código descrita acima é aplicada a um bloco de transporte concatenado (CTB) em canal ARQ híbrido (HARQ). Antes da segmentação de bloco de código, os bits de informação que precisam ser enviados a um único usuário a partir da estação base dentro de um intervalo de tempo de transmissão (TTI) podem precisar ser divididos em ao menos um bloco de transporte, desse modo seguindo através de ao menos um canal HARQ. Por exemplo, a Figura 4 mostra um exemplo em que os bits de informação são transmitidos utilizando dois canais HARQ (correspondendo a HARQ1, e HARQ2), e dois blocos de transporte TB1 e TB2. Durante operação, os bits de informação de comprimento A são recebidos pelo conjunto de circuito de formação TB 402 para ser transmitidos em um ou mais fluxos espaciais. O conjunto de circuitos 402 designa X' bits como um bloco de transporte TB1, onde X'<A; o processador HARQ1 404 anexa CRC bits aos X' bits para formar o bloco de transporte concatenado de comprimento X; o bloco de transporte concatenado de comprimento X é mapeado para um primeiro canal HARQ. O bloco de transporte concatenado é enviado para o conjunto de circuitos de segmentação de bloco de código 102. O conjunto de circuitos 402 designa W'=A-X' bits a partir dos bits de informação como um segundo bloco de transporte TB2; o processador HARQ2 406 anexa os bits CRC a Y bits para formar um segundo bloco de transporte concatenado; o bloco de transporte concatenado é mapeado para um segundo canal HARQ. O bloco de transporte concatenado é enviado ao conjunto de circuitos de segmentação de bloco de código 102.
Observar que o conjunto de circuitos 404 e 406 pode realizar funções adicionais tais como outras funcionalidades relacionadas a HARQ, adicionando informação de controle, etc. Embora os conceitos na Figura 4 sejam ilustrados utilizando dois canais HARQ, eles podem ser facilmente estendidos para uma pluralidade de canais HARQ. Se mais do que um canal HARQ for suportado para um usuário dentro de um Intervalo de Tempo de Transmissão (TTI), a regra de segmentação de bloco de código pode ser aplicada a cada TB. Múltiplos canais HARQ podem ocorrer devido ao fato de ter muitas palavras código FEC (ou segmentos) por TTI por usuário, tal como a partir de largura de banda larga (por exemplo, 20 MHz), modulação de ordem superior (por exemplo, 64 QAM), MIMO de múltiplos fluxos, etc. Múltiplos canais HARQ também podem ser usados para os TBs que têm diferentes QoS, tal como VoIP e dados de melhor esforço.
Uma palavra código MIMO compreende os bits que são enviados a um único usuário dentro de um TTI em um fluxo MIMO. Desse modo uma palavra código MIMO pode compreender uma ou mais palavras código FEC. Algumas vezes uma palavra código MIMO é usada para se referir aos bits em um fluxo MIMO.
Regras podem ser definidas para a criação de um TB. Em uma modalidade, um TB deve compreender não mais do que x (por exemplo, x=8) palavras código FEC (o valor de x é determinado pelo programador eNodeB em EUTRA). Em outra modalidade, se mais do que x palavras código FEC forem necessárias para um TB, então dois TBs são criados como a seguir. O pacote é dividido aproximadamente de forma igual entre os dois TBs, cada TB tendo quase o mesmo número de palavras código FEC de aproximadamente o mesmo tamanho. Em ainda outra modalidade, para palavras código FEC que devem ser enviadas para dois fluxos MIMO, cada uma pertence a um TB separado. Em ainda outra modalidade, para palavras código FEC que devem ser enviadas para três fluxos MIMO enquanto utilizando dois canais HARQ simultâneos, o primeiro (na média, o fluxo de melhor qualidade) pertence a um TB e o segundo e o terceiro fluxo pertencem a um segundo TB. Em ainda outra modalidade, quatro palavras código MIMO a serem enviadas utilizando dois canais HARQ, várias combinações são possíveis. Por exemplo, (a) TB1=1,2 TB2=3,4 (b) TB1=1,3 TB2=2,4 (c) TB1=1,2 TB2=2,3 (d) TB1=1, TB2 = 2,3,4. Aqui, TBi se refere ao TB de i° canal HARQ; os números 1 a 4 indicam o número de palavra código (ou fluxo) MIMO. A Figura 5 é um diagrama de blocos de processamento de receptor quando os bits de informação são recebidos através de ao menos um canal HARQ. Os bits recebidos a partir do montador de bloco de código 211 são introduzidos nos processadores de canal, apropriados, 504 e 506. A saída dos processadores de canal são os blocos de transporte estimados TB1 e TB2 os quais são introduzidos no conjunto de circuitos de montador TB 502 que combina os TBs e emite os bits de informação estimados. A Figura 6 é um fluxograma mostrando a operação do transmissor da Figura 1. O fluxo lógico começa na etapa 601 onde o conjunto de circuitos de segmentação recebe um bloco de transporte concatenado de comprimento X. Na etapa 603 o conjunto de circuitos lógicos acessa a tabela 107 e escolhe um tamanho de bloco FEC apropriado. Conforme discutido acima, em uma primeira modalidade da presente invenção o tamanho de bloco FEC Ki é determinado a partir de um grupo de tamanhos de bloco FEC não-contíguos localizados na tabela 107, onde os tamanhos de bloco FEC não-contíguos na tabela 107 estão entre Kmín θ Kmax, θ θγώ qus Kmin<=Ki<Kmax. Como discutido acima, Ki se baseia em X. X é determinado pelo conjunto de circuitos lógicos 106 a partir do bloco de transporte concatenado. Quando X é determinado, AÇ-fA/rl+á e -|"Λ/^Ηηλ1 sgo determinados. Em uma segunda modalidade da presente invenção os tamanhos de bloco FEC Ki e Ki-i são determinados, onde -ΓΧ/Cl+c!
Continuando, na etapa 605 o número de segmentos C e os tamanhos de bloco FEC são passados para o conjunto de circuitos de segmentação 102 e na etapa 607 o conjunto de circuitos de segmentação segmenta o bloco de transporte concatenado de comprimento X em C segmentos de tamanho substancialmente igual a Ki (ou alternativamente Ki e Ki-i) . Os bits de enchimento são adicionados (se necessário) na etapa 609 por intermédio do conjunto de circuitos 103 e na etapa 611 cada um dos C segmentos é codificado (por exemplo, uma palavra código FEC é determinada para cada um dos C segmentos) . Finalmente, na etapa 613 as palavras código FEC são transmitidas por intermédio do conjunto de circuitos de transmissão 108.
Conforme discutido acima, a etapa de determinar uma palavra código FEC compreende as etapas de inserir bits de enchimento no segmento para formar um bloco de entrada FEC, codificar FEC o bloco de entrada FEC, e descartar os bits relacionados aos bits de enchimento. Essa etapa pode requerer a inserção de grupos de bits de enchimento consecutivos em um segmento para formar um bloco de entrada FEC onde o comprimento de grupo é um múltiplo de 7, codificar FEC o bloco de entrada FEC, e descartar os bits relacionados aos bits de enchimento. Descartar os bits de enchimento compreende as etapas de descartar os grupos de bits sistemáticos correspondendo aos bits de enchimento e descartar os bits de paridade correspondendo aos grupos de bits de enchimento na saída do codificador constituinte 1, onde o codificador constituinte pega o bloco de entrada FEC sem intercalação para os turbo codificadores tail-biting. A Figura 7 é um fluxograma mostrando a operação do receptor da Figura 2. 0 fluxo lógico começa na etapa 701 onde o tamanho de segmento, número de segmentos, tamanho de bloco FEC usado para turbo decodificar cada segmento, e o número de bits de enchimento são determinados utilizando o conjunto de circuitos lógicos 213 e a tabela 215. Conforme discutido acima, em uma primeira modalidade da presente invenção o tamanho de bloco FEC Ki é determinado a partir de um grupo de tamanhos de bloco FEC não-contíguos na tabela 215, onde os tamanhos de bloco FEC não-contíguos disponível na tabela 2 05 estão entre Kmin e Kmax, e em que Kmin< = Ki<Kmax. Como discutido acima, Ki se baseia em X. X é determinado pelo conjunto de circuitos lógicos 213 a partir do vetor de sinal recebido. 0 conjunto de circuitos lógicos 213 então determina ~ + í' e ( ΓΛ/λ\ιαχ1 . Em uma segunda modalidade da presente invenção os tamanhos de bloco FEC Ki e Ki-i são determinados, onde -rx/cl+í Na etapa 703 um vetor de sinal recebido segue através do conjunto de circuitos de de-segmentação de bloco de código 202 o qual organiza porções do vetor de sinal recebido de acordo com o segmento C ao qual elas estão associadas. Na etapa 705 o conjunto de circuitos de manejo de enchimento 204 utiliza o conhecimento da localização dos bits de enchimento para favorecer o turbo decodificador 206, para, por exemplo, ajustar as LLRs correspondendo aos bits de enchimento em uma magnitude elevada. Cada um dos C segmentos é decodificado na etapa 707. Após turbo decodificar, o conjunto de circuitos 208 descarta os bits de enchimento para obter a estimativa de um segmento (etapa 709). O montador de bloco de código 211 monta o transporte estimado mediante coleta e arranjo adequados das estimativas dos segmentos obtidos a partir do conjunto de circuitos 208 (etapa 711).
Embora a invenção tenha sido particularmente mostrada e descrita com referência a uma modalidade específica, será entendido por aqueles versados na técnica que várias mudanças em forma e detalhes podem ser feitas na mesma sem se afastar do espírito e escopo da invenção. Pretende-se que tais mudanças sejam abrangidas pelo escopo das reivindicações a seguir.
REIVINDICAÇÕES