Matriz generadora de TCH3 en satélite GMR

0

Estoy interesado en encontrar la matriz generadora utilizada para la codificación del canal TCH3 ( GEO -Interfaz de radio móvil ). Seguí los pasos de instalación indicados en OsmocomGMR . Hubo un ejemplo para que el canal FACCH3 generara la matriz G. Modifiqué el código para TCH3 (que se muestra a continuación) pero los resultados de salida no parecen correctos. Realmente lo agradecería si pudiera decirme qué está haciendo mal en el código a continuación.

Gracias de antemano.

/* GMR-1 G/g matrix geneation forTCH3 */

/* (C) 2011 by Sylvain Munaut <[email protected]>  * All Rights Reserved 
*  * This program is free software; you can redistribute it and/or modify  * it under the terms of the GNU Affero General Public License as published by  * the Free Software Foundation; either version 3 of the License, or  * (at your option) any later version.  *  * This program is distributed in the hope that it will be useful,  * but WITHOUT ANY WARRANTY; without even the implied warranty of  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  * GNU Affero General Public License for more details.  *  * You should have received a copy of the GNU Affero General Public License  * along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

#include <errno.h>
#include <stdio.h>
#include <string.h>

#include <osmocom/core/bits.h>
#include <osmocom/core/utils.h>



#include <osmocom/gmr1/l1/tch3.h>



static void copy_bits(ubit_t *dst, int r, ubit_t *bits_e) {     int i, j
= 0;    for(i=0;i<212;i++){         if (i<52 || i > 55){            dst[(208*r)+j] = bits_e[i];             j++;        }   }

}



static int pbm_save_bits(const char *filename, ubit_t *m, int x, int y) {   FILE *fh;   int i, j;

    fh = fopen(filename, "w");  if (!fh)        return -EPERM;

    fprintf(fh, "P1\n%d %d\n", x, y);

    for (i=0; i<y; i++)         for (j=0; j<x; j++)             fprintf(fh, "%d%c", m[(i*x)+j], j==x-1 ? '\n' : ' ');

    fclose(fh);

    return 0; }

int main(int argc, char *argv[]) {

     ubit_t mat_G[208*160]; /* 208 lines of 160 pixels */   ubit_t mat_g[208];  /* 208 lines of 1 pixel */

    ubit_t bits_e[212];     ubit_t bits_u1[160];    ubit_t bits_s[4];   uint8_t l1[10];     uint8_t l2[10];

    int i;  int j;  int m = 0;



    memset(mat_G, 0x00, sizeof(mat_G));     memset(mat_g, 0x00, sizeof(mat_g));

    memset(bits_s, 0x00, sizeof(bits_s));   memset(l1, 0x00, sizeof(l1));   memset(l2, 0x00, sizeof(l2));

    gmr1_tch3_encode(bits_e, l1, l2, bits_s, NULL,m);   copy_bits(mat_g, 0, bits_e);

            for (i=0; i<160; i++) {             memset(l1, 0x00, sizeof(l1));           memset(l2, 0x00, sizeof(l2));           memset(bits_u1, 0, sizeof(bits_u1));            bits_u1[i] = 1;

            osmo_ubit2pbit_ext(l1, 0, bits_u1, 0, 80, 1);           osmo_ubit2pbit_ext(l2, 0, bits_u1, 80, 80, 1);
                        gmr1_tch3_encode(bits_e, l1, l2, bits_s, NULL,m);           copy_bits(mat_G, i, bits_e);


        }       for (i=0; i<160; i++) {         for (j=0; j<208; j++) {             mat_G[(i*208)+j] ^= mat_g[j];       }   }

    pbm_save_bits("mat_G.pbm", mat_G, 160, 208);    pbm_save_bits("mat_g.pbm", mat_g,  1, 208);     printf("\n"); }
    
pregunta wireless gmr

0 respuestas

Lea otras preguntas en las etiquetas