miércoles, 28 de octubre de 2009

Códigos DSPs

Fragmentos de Códigos en C útiles para DSP o aplicaciones en RT.
Los códigos aquí mostrados no son para que los copien, sino para que ustedes los alumnos los analicen y hagan el suyo propio, recuerden que ustedes son los diseñadores y cada quien piensa de manea distinta, de forma tal que la solución se puede encontrar de distintas formas

1 comentario:

  1. /*********************************
    *ANALISIS/SINTESIS DE FILTROS
    *JFUENTES
    *IPN-UPIITA
    *POCOS PELOS PERO BIEN PEINADOS
    *OCTUBRE-2009
    *********************************/

    #include stdio.h
    #include math.h

    #define N 8
    #define M 4


    int main(){

    //================================
    //COEFICIENTES-FILTROS
    //================================

    float h0[] = {-0.0915, 0.1585, 0.5915, 0.3415};
    float h1[] = {-0.3415, 0.5915, -0.1585, -0.0915};
    float g0[] = { 0.3415, 0.5915, 0.1585, -0.0915};
    float g1[] = {-0.0915, -0.1585, 0.5915, -0.3415};

    //================================
    //DECLARACION DE VARIABLES
    //================================

    int Z; //longitudes
    int W; //longitudes
    int x; //senal de entrada
    int r1; //longitudes
    int r2;
    int i; //indices
    int j; //indices
    int k; //indices
    float i0; //senal sintesis
    float i1;

    //================================
    Z = N + M - 1;
    W = Z + M - 1;
    r1 = M + 2*N - 2;
    r2 = M + 2*Z - 2;
    //================================

    float Y0[Z];
    float I0[Z];
    float V0[Z];
    float H0[r1];
    float G0[r2];

    float Y1[Z];
    float V1[Z];
    float H1[r1];
    float G1[r2];
    float S1[W];

    //================================
    //INICIALIZACION DE VECTORES
    //================================

    for(i = 0; i <(N+M-1); i++){
    Y0[i] = 0;
    }
    for(i = 0; i <(N+M-1); i++){
    I0[i] = 0;
    }
    for(i = 0; i<(N+2*M-2); i++){
    V0[i] = 0;
    }
    for(i = 0; i < (N+2*M-2) ; i++){
    H0[i] = 0;
    }
    for(i = 0; i < (2*N+3*M-2) ; i++){
    G0[i] = 0;
    }
    for(i = (N-1); i < (N+M-1) ; i++){
    H0[i] = h0[i-(N-1)];
    }
    for(i = (N+M-2); i < (N+2*M-2) ; i++){
    G0[i] = g0[i-(N+M-2)];
    }

    //================================
    //ETAPA DE ANALISIS
    //================================

    for(i = 0; i < N; i++){

    printf("\n >> x(%d) = ",i);
    scanf("%d",&x);

    for(j = 0; j < N+M-1; j++){
    Y0[j] = (x * H0[(N-1) + j - i] ) + Y0[j];

    //================================
    //DIEZMADO / INTERPOLACION
    //================================

    if(j%2==0){
    I0[j] = Y0[j];
    }

    //================================
    //ETAPA DE SINTESIS
    //================================

    for(k = 0; k < (N+2*M-2); k++){
    i0 = I0[j];
    V0[k] = (i0 * G0[(N+M-2) + k - j] ) + V0[k];
    }
    }

    }// for principal
    }// fin de main

    ResponderEliminar