コード例 #1
0
ファイル: modulador.c プロジェクト: urrutiaitor/POPBL5-T
//--------------------------------------------------------------------------//
// Funcion:	filtro   														//
//																			//
// Descripcion: Funcion que filtra la señal de entrada para darle forma. Va //
//              haciendiendo la convolucion entre los símbolos muestreados  //
//              y los coeficientes del filtro pero también se le añade      //
//              retraso. Paraf filtrar la señal los valores tienen que ser  //
//              de tipo fract32 y es por eso por lo que se hace la          //
//              conversiónde float a fract32 y viceversa	                //
//																			//
// Parametros de entrada: Ninguno											//
//																			//
// Parametros de salida: Ninguno											//
//																			//
//--------------------------------------------------------------------------//
void filtro () {

    for(indice_muestras=0 ; indice_muestras<NUM_SOBREMUESTREADOS ; indice_muestras++)
    {
        left_in_fr32_real[indice_muestras]=float_to_fr32(simbolo_muestreado_real[indice_muestras]/VALOR_MAX_CONSTELACION);
        left_in_fr32_imag[indice_muestras]=float_to_fr32(simbolo_muestreado_imag[indice_muestras]/VALOR_MAX_CONSTELACION);
    }

    for (indice_retraso = 0; indice_retraso < COEFICIENTES_FILTRO; indice_retraso++) {

        retraso[indice_retraso] = 0;
    }

    fir_init(state,filter_fr32,retraso,COEFICIENTES_FILTRO,0);
    fir_fr32(left_in_fr32_real,left_out_fr32_real,NUM_FILTRADOS_1,&state);

    for (indice_retraso = 0; indice_retraso < COEFICIENTES_FILTRO; indice_retraso++) {

        retraso[indice_retraso] = 0;
    }

    fir_init(state,filter_fr32,retraso,COEFICIENTES_FILTRO,0);
    fir_fr32(left_in_fr32_imag,left_out_fr32_imag,NUM_FILTRADOS_1,&state);

    for(indice_muestrasFiltradas=0 ; indice_muestrasFiltradas<NUM_FILTRADOS_1 ; indice_muestrasFiltradas++) {

        left_out_float_real[indice_muestrasFiltradas] = VALOR_MAX_CONSTELACION*fr32_to_float(left_out_fr32_real[indice_muestrasFiltradas]);
        left_out_float_imag[indice_muestrasFiltradas] = VALOR_MAX_CONSTELACION*fr32_to_float(left_out_fr32_imag[indice_muestrasFiltradas]);
    }
}
コード例 #2
0
ファイル: echo.c プロジェクト: upiitadsp/dsk_mixer
int main(){
    float input_data;
    int32 output_data;
    //Configure hardware
    codec_init();
    fir_init(banda1,banda2,banda3,banda4,banda5);

    while(1){
        //Processing data
        if(DSK6713_DIP_get(3)==0){
            //Initialize processing
            leds_output(LED_STATE_ACTIVE);

            while(DSK6713_DIP_get(3)==0){
                input_data = codec_read();
                output_data = fir_filter(input_data);
                codec_write(output_data);
            }
        }
        //Waiting
        else{
            leds_output(LED_STATE_WATING);
        }
    }
}
コード例 #3
0
void blue_signal_processor_init()
{
    fir_init( &blue_signal_fir, blue_fir_coefs, blue_fir_buffer, sizeof(blue_fir_buffer) / sizeof(uint8_t) );

    memset( buffer, 0, sizeof(buffer) );
    head = 0;
    sum = 0;
}
コード例 #4
0
ファイル: resamp.c プロジェクト: soramimi/qSIP
/**
 * Allocate a new Audio resampler
 *
 * @param arp       Pointer to allocated audio resampler
 * @param sampc_max Maximum number of source samples when downsampling
 * @param srate_in  Sample rate for the input in [Hz]
 * @param ch_in     Number of channels for the input
 * @param srate_out Sample rate for the output in [Hz]
 * @param ch_out    Number of channels for the output
 *
 * @return 0 for success, otherwise error code
 */
int auresamp_alloc(struct auresamp **arp, size_t sampc_max,
		   uint32_t srate_in, uint8_t ch_in,
		   uint32_t srate_out, uint8_t ch_out)
{
	struct auresamp *ar;
	int err = 0;

	if (!arp || !sampc_max || !srate_in || !srate_out)
		return EINVAL;

	ar = mem_zalloc(sizeof(*ar), destructor);
	if (!ar)
		return ENOMEM;

	ar->sampv = mem_zalloc(sampc_max * 2, NULL);
	if (!ar->sampv) {
		err = ENOMEM;
		goto out;
	}

	ar->sampc = sampc_max;
	ar->ratio = 1.0 * srate_out / srate_in;
	ar->ch_in = ch_in;
	ar->ch_out = ch_out;

	fir_init(&ar->fir);

	if (ch_in == 1 && ch_out == 1)
		ar->resample = resample;
	else if (ch_in == 1 && ch_out == 2)
		ar->resample = resample_mono2stereo;
	else if (ch_in == 2 && ch_out == 1)
		ar->resample = resample_stereo2mono;
	else if (ch_in == 2 && ch_out == 2)
		ar->resample = resample_stereo;
	else {
		err = EINVAL;
		goto out;
	}

	ar->coeffv = fir_lowpass;
	ar->coeffn = (int)ARRAY_SIZE(fir_lowpass);

 out:
	if (err)
		mem_deref(ar);
	else
		*arp = ar;

	return err;
}
コード例 #5
0
ファイル: main_tsk.c プロジェクト: koban/Uzume-Aqua548
/*=========================================================================*/
void main_task(VP_INT exinf)
{
	int i;
	
	/* Initialize FIR Objects */
	for( i=0;i<numof(fir);++i)
		fir_init( &fir[i] );

	/* Audio Driver start as interrupt interval is 8 blocks, 4 channels*/
	 KzAudioStart( audio_cb, 48000, 8, 4 );
	 
	/* main_task exit */
	ext_tsk();
}
コード例 #6
0
ファイル: main.c プロジェクト: NexusIF/ProjectsBackup
int main()
{
    fir_filter_t fir;
    uint32_t i;

    generate_input_data();

    fir_init( &fir, blue_fir, blue_fir_buffer, sizeof(blue_fir_buffer)/sizeof(int8_t));

    for( i = 0; i < 1024; i++ )
    {
        int8_t sample = fir_push_sample( &fir, data[i] );
        printf( "%d\r\n", sample );
    }

    return 0;
}
コード例 #7
0
ファイル: fir_test.c プロジェクト: WilsonWangTHU/DSP_Verilog
void main()
{
	int	i,
		nsamples,
		tapLength;

    fir_state_fr16 s;

    nsamples = BUFFER_SIZE;
    tapLength = BASE_TAPLENGTH ;
     
	fir_init(s, h, delay, tapLength);
	        
	my_fir(IN, MY_OUT, nsamples, &s);
	_fir(IN, OUT, nsamples, &s);
	
	for (i = 0; i < BUFFER_SIZE; i++) {
	    DIFF[i] = OUT[i] - MY_OUT[i]; 
	}

}
コード例 #8
0
ファイル: fir_filter.c プロジェクト: alexf91/bladeRF
int main(int argc, char *argv[])
{
    int status              = EXIT_FAILURE;
    FILE *infile            = NULL;
    FILE *outfile           = NULL;

    int16_t *inbuf = NULL, *tempbuf = NULL;
    struct complex_sample *outbuf = NULL;

    struct fir_filter *filt = NULL;

    static const unsigned int max_chunk_size = 1024 * 1024 * 1024;

    unsigned int chunk_size = 4096;
    size_t n_read, n_written;
    bool done = false;

    if (argc < 3 || argc > 4) {
        fprintf(stderr,
                "Filter sc16q11 samples from <infile> and write"
                "them to <outfile>.\n\n");

        fprintf(stderr,
                "Usage: %s <infile> <outfile> [# chunk size(samples)]\n",
                argv[0]);

        return EXIT_FAILURE;
    }

    if (argc == 4) {
        bool valid;
        chunk_size = str2uint(argv[3], 1, max_chunk_size, &valid);
        if (!valid) {
            fprintf(stderr, "Invalid chunk size: %s samples\n", argv[3]);
            return EXIT_FAILURE;
        }
    }

    filt = fir_init(rx_ch_filter, rx_ch_filter_len);
    if (!filt) {
        fprintf(stderr, "Failed to allocate filter.\n");
        return EXIT_FAILURE;
    }

    inbuf = calloc(2*sizeof(int16_t), chunk_size);
    if (!inbuf) {
        perror("calloc");
        goto out;
    }
    tempbuf = calloc(2*sizeof(int16_t), chunk_size);
    if (!tempbuf) {
        perror("calloc");
        goto out;
    }

    outbuf = calloc(sizeof(struct complex_sample), chunk_size);
    if (!outbuf) {
        perror("calloc");
        goto out;
    }

    infile = fopen(argv[1], "rb");
    if (!infile) {
        perror("Failed to open input file");
        goto out;
    }

    outfile = fopen(argv[2], "wb");
    if (!outfile) {
        perror("Failed to open output file");
        goto out;
    }

    while (!done) {
        n_read = fread(inbuf, 2*sizeof(int16_t), chunk_size, infile);
        done = n_read != chunk_size;

        fir_process(filt, inbuf, outbuf, n_read);
        //convert
        conv_struct_to_samples(outbuf, (unsigned int) n_read, tempbuf);

        n_written = fwrite(tempbuf, 2*sizeof(int16_t), n_read, outfile);
        if (n_written != n_read) {
            fprintf(stderr, "Short write encountered. Exiting.\n");
            status = -1;
            goto out;
        }
    }

    status = 0;

out:
    if (infile) {
        fclose(infile);
    }

    if (outfile) {
        fclose(outfile);
    }
    free(tempbuf);
    free(inbuf);
    free(outbuf);
    fir_deinit(filt);

    return status;
}