Fixed in-buffer time and use vector sine generator

This commit is contained in:
Xavier Arteaga 2019-04-24 20:05:42 +02:00
parent baac179d95
commit 794325fa29
1 changed files with 6 additions and 10 deletions

View File

@ -72,7 +72,7 @@ static inline int parse_model(srslte_channel_fading_t* q, const char* str)
if (strlen(str) > offset) {
q->doppler = (float)strtod(&str[offset], NULL);
if (isnan(q->doppler) || isinf(q->doppler)) {
ret = SRSLTE_ERROR;
q->doppler = 0.0f;
}
} else {
ret = SRSLTE_ERROR;
@ -94,14 +94,10 @@ generate_tap(float delay_ns, float power_db, float srate, float phase, cf_t* buf
float O = (delay_ns * 1e-9f * srate + path_delay) / (float)N;
cf_t a0 = amplitude * cexpf(-_Complex_I * phase) / N;
for (int n = 0; n < N; n++) {
buf[n] = a0;
}
srslte_vec_apply_cfo(buf, -O, buf, N);
srslte_vec_gen_sine(a0, -O, buf, N);
}
static void generate_taps(srslte_channel_fading_t* q, double time)
static inline void generate_taps(srslte_channel_fading_t* q, double time)
{
// Initialise freq response
bzero(q->h_freq, sizeof(cf_t) * q->N);
@ -256,10 +252,10 @@ double srslte_channel_fading_execute(
uint32_t counter = 0;
if (q) {
// Generate taps
generate_taps(q, init_time);
while (counter < nsamples) {
// Generate taps
generate_taps(q, init_time);
// Do not process more than N / 4 samples
uint32_t n = SRSLTE_MIN(q->N / 4, nsamples - counter);