aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Erckenbrecht <eligs@eligs.de>2020-07-31 13:36:57 +0200
committerFelix Erckenbrecht <eligs@eligs.de>2020-07-31 13:36:57 +0200
commit8ff76630be0bc62f33342d6a4d880c27f0d4eebc (patch)
tree373a929eda603a5cb66c9340c2d02639881d527d
parent107cbb6fab042c7960fb384b00329334c77ff1e9 (diff)
downloadosmo-fl2k-8ff76630be0bc62f33342d6a4d880c27f0d4eebc.tar.gz
osmo-fl2k-8ff76630be0bc62f33342d6a4d880c27f0d4eebc.tar.bz2
osmo-fl2k-8ff76630be0bc62f33342d6a4d880c27f0d4eebc.zip
Turn double to float
-rw-r--r--src/fl2k_iq.c47
1 files changed, 24 insertions, 23 deletions
diff --git a/src/fl2k_iq.c b/src/fl2k_iq.c
index 26fcbfe..6d253e0 100644
--- a/src/fl2k_iq.c
+++ b/src/fl2k_iq.c
@@ -78,8 +78,8 @@ int base_freq = 1440000;
int rf_to_baseband_sample_ratio;
int input_freq = 48000;
-complex double *ampbuf;
-complex double *slopebuf;
+complex float *ampbuf;
+complex float *slopebuf;
int writepos, readpos;
void usage(void)
@@ -145,27 +145,27 @@ struct trigonometric_table_S {
static struct trigonometric_table_S trig_table = { .initialized = 0 };
typedef struct {
- double sample_freq;
- double freq;
+ float sample_freq;
+ float freq;
unsigned long int phase;
unsigned long int phase_step;
- complex double amplitude;
- complex double ampslope;
+ complex float amplitude;
+ complex float ampslope;
} dds_t;
-static inline void dds_set_freq(dds_t *dds, double freq)
+static inline void dds_set_freq(dds_t *dds, float freq)
{
dds->freq = freq;
dds->phase_step = (freq / dds->sample_freq) * 2 * M_PI * ANG_INCR;
}
-static inline void dds_set_amp(dds_t *dds, complex double amplitude, complex double ampslope)
+static inline void dds_set_amp(dds_t *dds, complex float amplitude, complex float ampslope)
{
dds->amplitude = amplitude;
dds->ampslope = ampslope;
}
-dds_t dds_init(double sample_freq, double freq, double phase, double amp)
+dds_t dds_init(float sample_freq, float freq, float phase, float amp)
{
dds_t dds;
int i;
@@ -176,7 +176,7 @@ dds_t dds_init(double sample_freq, double freq, double phase, double amp)
dds_set_amp(&dds, amp, 0);
/* Initialize sine table, prescaled for 16 bit signed integer */
if (!trig_table.initialized) {
- double incr = 1.0 / (double)TRIG_TABLE_LEN;
+ float incr = 1.0 / (float)TRIG_TABLE_LEN;
for (i = 0; i < TRIG_TABLE_LEN; i++){
trig_table.sine[i] = sin(incr * i * DDS_2PI) * 32767;
trig_table.cosine[i] = cos(incr * i * DDS_2PI) * 32767;
@@ -222,8 +222,8 @@ static inline void dds_real_buf(dds_t *dds, int8_t *buf, int count)
* in the amp buffer */
static void *iq_worker(void *arg)
{
- register double freq;
- register double tmp;
+ register float freq;
+ register float tmp;
dds_t base_signal;
int8_t *tmp_ptr;
uint32_t len = 0;
@@ -286,9 +286,10 @@ static inline int writelen(int maxlen)
return r;
}
-static inline complex double modulate_sample_iq(const int lastwritepos, const complex double lastamp, const complex double sample)
+static inline float complex modulate_sample_iq(const int lastwritepos, const float complex lastamp, const float complex sample)
{
- complex double amp, slope;
+ float complex amp;
+ float complex slope;
/* Calculate modulator amplitudes at this point to lessen
* the calculations needed in the signal generator */
@@ -301,7 +302,7 @@ static inline complex double modulate_sample_iq(const int lastwritepos, const co
the dds parameters. In fact this gives us a very
efficient and pretty good interpolation filter. */
slope = amp - lastamp;
- slope = slope * 1.0/ (double) rf_to_baseband_sample_ratio;
+ slope = slope * 1.0/ (float) rf_to_baseband_sample_ratio;
slopebuf[writepos] = slope;
ampbuf[writepos] = lastamp;
@@ -313,11 +314,11 @@ void iq_modulator()
{
unsigned int i;
size_t len;
- double freq;
- complex double lastamp = 0;
+ float freq;
+ float complex lastamp = 0;
int16_t baseband_buf[BASEBAND_BUF_SIZE][2];
uint32_t lastwritepos = writepos;
- complex double sample;
+ float complex sample;
while (!do_exit) {
len = writelen(BASEBAND_BUF_SIZE);
@@ -331,7 +332,7 @@ void iq_modulator()
}
for (i = 0; i < len; i++) {
- sample = (double) baseband_buf[i][0] / 32768.0 + I * (double) baseband_buf[i][1] / 32768.0;
+ sample = (float) baseband_buf[i][0] / 32768.0 + I * (float) baseband_buf[i][1] / 32768.0;
/* Modulate and buffer the sample */
lastamp = modulate_sample_iq(lastwritepos, lastamp, sample);
@@ -446,13 +447,13 @@ int main(int argc, char **argv)
txbuf = buf2;
/* Decoded audio */
- slopebuf = malloc(BUFFER_SAMPLES * sizeof(double complex));
- ampbuf = malloc(BUFFER_SAMPLES * sizeof(double complex));
+ slopebuf = malloc(BUFFER_SAMPLES * sizeof(float complex));
+ ampbuf = malloc(BUFFER_SAMPLES * sizeof(float complex));
readpos = 0;
writepos = 1;
- fprintf(stderr, "Samplerate:\t%3.2f MHz\n", (double)samp_rate/1000000);
- fprintf(stderr, "Center frequency:\t%5.0f kHz\n", (double)base_freq/1000);
+ fprintf(stderr, "Samplerate:\t%3.2f MHz\n", (float)samp_rate/1000000);
+ fprintf(stderr, "Center frequency:\t%5.0f kHz\n", (float)base_freq/1000);
pthread_mutex_init(&cb_mutex, NULL);
pthread_mutex_init(&iq_mutex, NULL);