Пример #1
0
void quisk_set_tx_mode(void)	// called when the mode rxMode is changed
{
	tx_filter(NULL, 0);
	tx_filter2(NULL, 0);
#ifdef TEST_TX_WAV_FILE
	if (!wavFp)			// convenient place to open file
		open_wav();
#endif
}
Пример #2
0
void CODEC2_WIN32SUPPORT fdmdv_mod(struct FDMDV *fdmdv, COMP tx_fdm[], 
				   int tx_bits[], int *sync_bit)
{
    COMP          tx_symbols[NC+1];
    COMP          tx_baseband[NC+1][M];

    bits_to_dqpsk_symbols(tx_symbols, fdmdv->prev_tx_symbols, tx_bits, &fdmdv->tx_pilot_bit);
    memcpy(fdmdv->prev_tx_symbols, tx_symbols, sizeof(COMP)*(NC+1));
    tx_filter(tx_baseband, tx_symbols, fdmdv->tx_filter_memory);
    fdm_upconvert(tx_fdm, tx_baseband, fdmdv->phase_tx, fdmdv->freq);

    *sync_bit = fdmdv->tx_pilot_bit;
}
Пример #3
0
int quisk_process_microphone(complex * cSamples, int count)
{
	int i, sample, maximum;
	double d;
	static double fmPhase = CLIP16;

#if 0
	// Measure soundcard actual sample rate
	static time_t seconds = 0;
	static long total = 0;
	struct timeb tb;
	static double dtime;

	ftime(&tb);
	total += count;
	if (seconds == 0) {
		seconds = tb.time;
		dtime = tb.time + .001 * tb.millitm;
	}		
	else if (tb.time - seconds > 4) {
		printf("Mic soundcard rate %.3f\n", total / (tb.time + .001 * tb.millitm - dtime));
		seconds = tb.time;
		printf("backlog %d, count %d\n", backlog, count);
	}
#endif

	
#ifdef TEST_TX_WAV_FILE
	get_wav(cSamples, count);	// replace audio samples with sound from a WAV file
#endif
#if USE_GET_SIN
	get_sin(cSamples, count);	// Replace mic samples with a sin wave, and send it
#endif
	maximum = 1;
	for (i = 0; i < count; i++) {	// measure maximum microphone level for display
		cSamples[i] *= (double)CLIP16 / CLIP32;	// convert 32-bit samples to 16 bits
		d = creal(cSamples[i]);
		sample = (int)fabs(d);
		if (sample > maximum)
			maximum = sample;
	}
	if (maximum > mic_level)
		mic_level = maximum;
	mic_timer -= count;		// time out the max microphone level to display
	if (mic_timer <= 0) {
		mic_timer = quisk_sound_state.mic_sample_rate / 1000 * MIC_MAX_HOLD_TIME;
		mic_max_display = mic_level;
		mic_level = 1;
	}

	if (quisk_is_key_down())
		switch (rxMode) {
		case 2:		// LSB
		case 3:		// USB
			if (spotMode == 0) {
				tx_filter(cSamples, count);	// filter samples
				transmit_udp(cSamples, count);
			}
			else if (spotMode == 1)
				transmit_mic_carrier(cSamples, count, 0.5);
			else
				transmit_mic_carrier(cSamples, count, 1.0);
			break;
		case 4:		// AM
			tx_filter2(cSamples, count);
			for (i = 0; i < count; i++)	// transmit (0.5 + ampl/2, 0)
				cSamples[i] = (creal(cSamples[i]) + CLIP16) * 0.5;
			transmit_udp(cSamples, count);
			break;
		case 5999:		// FM
			tx_filter2(cSamples, count);
			for (i = 0; i < count; i++) {	// transmit +/- 5000 Hz tone
				fmPhase *= cexp( - I * 2.0 * M_PI * (5000.0 * creal(cSamples[i]) / CLIP16) /
					quisk_sound_state.mic_sample_rate);
				cSamples[i] = fmPhase;
			}
			transmit_udp(cSamples, count);
			break;
		case 10:	// transmit IMD 2-tone test
			transmit_mic_imd(cSamples, count, 1.0);
			break;
		case 11:
			transmit_mic_imd(cSamples, count, 1.0 / sqrt(2.0));
			break;
		case 12:
			transmit_mic_imd(cSamples, count, 0.5);
			break;
		}
	else
		fmPhase = CLIP16;
	return count;
}