Пример #1
0
void dac_reload_callback(void)
{
	int i;

	if (current_stereo_out_buf == stereo_out_buf1)
		current_stereo_out_buf = stereo_out_buf2;
	else
		current_stereo_out_buf = stereo_out_buf1;

	generate_signal(signal1_buf, &signal1_generator);
	generate_signal(signal2_buf, &signal2_generator);

	/* In order for the FIR filter to work correctly we need to keep
	 * the last part of the previous buffer */
	for (i = 0; i < FIR_NUM_COEF; i++) {
		signal_pre_filter_buf[i] =
				signal_pre_filter_buf[BUFFER_LENGTH + i];
	}

	/* New data is put in the signal_in_buf which points behind the data
	 * kept from the previous buffer */
	dsp16_vect_add_and_sat(signal_in_buf, signal1_buf, signal2_buf,
			BUFFER_LENGTH);

	/* Run the FIR filter; the input buffer will be ... longer then the
	 * output buffer, which has normal length */
	if (active_filter > 0) {
		dsp16_filt_fir(signal_out_buf, signal_pre_filter_buf,
				BUFFER_LENGTH + FIR_NUM_COEF - 1,
				filter_coef[active_filter - 1], FIR_NUM_COEF);
	} else {
		for (i = 0; i < BUFFER_LENGTH; i++)
			signal_out_buf[i] = signal_in_buf[i];
	}

	for (i = 0; i < BUFFER_LENGTH; i++) {
		current_stereo_out_buf[i*2] = signal_out_buf[i];
		current_stereo_out_buf[i*2+1] = signal_out_buf[i];
	}

	signals_are_updated = 1;

	/* Update PDCA buffer */
	tpa6130_dac_output(current_stereo_out_buf, BUFFER_LENGTH);
}
Пример #2
0
int main(int argc, char *argv[])
{
	(void) argc;
	(void) argv;

	struct xdf *xdf = NULL;
	int step, retval = EXIT_FAILURE;
	unsigned int ns, i;
	size_t strides[NARRAYS] = {
		NEEG*sizeof(eeg[0]),
		NSENS*sizeof(sens[0]),
		sizeof(trigger[0])
	};

	/*************************************************
	 *            File preparation                   *
	 *************************************************/
	step = 0;
	xdf = xdf_open(filename, XDF_WRITE, XDF_BDF);
	if (xdf == NULL) 
		goto exit;

	xdf_set_conf(xdf, XDF_F_SAMPLING_FREQ, FS, XDF_NOF);

	step++;
	if (configure_channels(xdf, NEEG, NSENS)) 
		goto exit;

	step++;
	if (xdf_define_arrays(xdf, NARRAYS, strides)
	     || xdf_prepare_transfer(xdf) )
		goto exit;

	/************************************************
	*            Writing loop                       *
	*************************************************/
	step++;
	for (i=0; i<TOTAL_NS; i+=NS) {
		ns = ((TOTAL_NS - i) >= NS) ? NS : (TOTAL_NS - i);
		generate_signal(NEEG, eeg, NSENS, sens, trigger, FS, ns);

		if (xdf_write(xdf, ns, eeg, sens, trigger) < 0) 
			goto exit;
	}

	retval = EXIT_SUCCESS;
exit:
	if (retval != EXIT_SUCCESS) {
		fprintf(stderr, "Error while %s : (%i) %s\n",
		        stepmsg[step], errno, strerror(errno));
	}
	
	xdf_close(xdf);
	return retval;
}
Пример #3
0
int main() {
	fftw_complex signal[NUM_POINTS];
	fftw_complex result[NUM_POINTS];

	fftw_plan plan = fftw_plan_dft_1d(NUM_POINTS,
									  signal,
									  result,
									  FFTW_FORWARD,
									  FFTW_ESTIMATE);

	generate_signal(signal);
	fftw_execute(plan);
	compute_magnitude(result);

	fftw_destroy_plan(plan);

	return 0;
}
Пример #4
0
END_TEST

START_TEST(test_l2c_cm_correlator)
{
  struct signal signal;
  s8* code;
  double init_code_phase = 0;
  double init_carr_phase = 0;
  double I_E;
  double Q_E;
  double I_P;
  double Q_P;
  double I_L;
  double Q_L;
  u32 num_samples;

  code = get_prn_code(gps_l2cm_code, sizeof(gps_l2cm_code),
                      L2C_CM_CHIPS_PER_PRN_CODE);
  fail_if(NULL == code, "Could not allocate L2C CM PRN code data");

  signal = generate_signal( L2C_SIGNAL,             /* signal type */
                            IF_FREQUENCY_HZ,        /* intermediate frequency */
                            L2C_CM_CHIPPING_RATE_HZ,  /* code frequency */
                            CARRIER_DOPPLER_FREQ_HZ,/* carr_doppler frequency */
                            1. / 1200, /* carrier to code scaling factor */
                            SAMPLING_FREQ_HZ,       /* sampling frequency */
                            code,                   /* PRN code data */
                            20);                    /* milliseconds to generate */

  fail_if(NULL == signal.samples, "Could not generate signal data");

  debug_start_timing();

  l2c_cm_track_correlate(signal.samples, signal.size,
    code,
    2 * L2C_CM_CHIPS_PER_PRN_CODE,
    &init_code_phase,
    L2C_CM_CHIPPING_RATE_HZ / SAMPLING_FREQ_HZ,
    &init_carr_phase,
    (IF_FREQUENCY_HZ + CARRIER_DOPPLER_FREQ_HZ) * 2.0 * M_PI / SAMPLING_FREQ_HZ,
    &I_E, &Q_E,
    &I_P, &Q_P,
    &I_L, &Q_L,
    &num_samples);

  debug_stop_timing();

  debug_dump_results(num_samples, I_E, Q_E, I_P, Q_P, I_L, Q_L);

  u32 expected_samples = 20 * SAMPLING_FREQ_HZ / 1000; /* samples per PRN code */
  fail_if(num_samples != expected_samples);

  fail_if((I_P != 0) && (fabs(I_E / I_P) > 0.6));
  fail_if((I_P != 0) && (fabs(I_L / I_P) > 0.6));

  fail_if((I_E != 0) && (fabs(Q_E / I_E) > 0.006));
  fail_if((I_P != 0) && (fabs(Q_P / I_P) > 0.005));
  fail_if((I_L != 0) && (fabs(Q_L / I_L) > 0.006));

  free(code);
  free(signal.samples);
}