EARLYLATE actually works
This commit is contained in:
parent
f93e7c4a99
commit
306e4aeb91
2 changed files with 12 additions and 6 deletions
1
csdr.c
1
csdr.c
|
@ -2387,6 +2387,7 @@ int main(int argc, char *argv[])
|
||||||
fwrite(output_buffer, sizeof(complexf), state.output_size, stdout);
|
fwrite(output_buffer, sizeof(complexf), state.output_size, stdout);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
TRY_YIELD;
|
TRY_YIELD;
|
||||||
|
fprintf(stderr, "state.input_processed = %d\n", state.input_processed);
|
||||||
memmove((complexf*)input_buffer,((complexf*)input_buffer)+state.input_processed,(the_bufsize-state.input_processed)*sizeof(complexf)); //memmove lets the source and destination overlap
|
memmove((complexf*)input_buffer,((complexf*)input_buffer)+state.input_processed,(the_bufsize-state.input_processed)*sizeof(complexf)); //memmove lets the source and destination overlap
|
||||||
fread(((complexf*)input_buffer)+(the_bufsize-state.input_processed), sizeof(complexf), state.input_processed, stdin);
|
fread(((complexf*)input_buffer)+(the_bufsize-state.input_processed), sizeof(complexf), state.input_processed, stdin);
|
||||||
//fprintf(stderr,"iskip=%d state.output_size=%d start=%x target=%x skipcount=%x \n",state.input_processed,state.output_size,input_buffer, ((complexf*)input_buffer)+(BIG_BUFSIZE-state.input_processed),(BIG_BUFSIZE-state.input_processed));
|
//fprintf(stderr,"iskip=%d state.output_size=%d start=%x target=%x skipcount=%x \n",state.input_processed,state.output_size,input_buffer, ((complexf*)input_buffer)+(BIG_BUFSIZE-state.input_processed),(BIG_BUFSIZE-state.input_processed));
|
||||||
|
|
17
libcsdr.c
17
libcsdr.c
|
@ -1697,6 +1697,7 @@ timing_recovery_state_t timing_recovery_init(timing_recovery_algorithm_t algorit
|
||||||
to_return.debug_count = 3;
|
to_return.debug_count = 3;
|
||||||
to_return.debug_force = 0;
|
to_return.debug_force = 0;
|
||||||
to_return.debug_writefiles = 0;
|
to_return.debug_writefiles = 0;
|
||||||
|
//to_return.last_phase_offset = 0;
|
||||||
return to_return;
|
return to_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1705,7 +1706,7 @@ void timing_recovery_trigger_debug(timing_recovery_state_t* state, int debug_pha
|
||||||
state->debug_phase=debug_phase;
|
state->debug_phase=debug_phase;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MTIMINGR_HDEBUG 1
|
#define MTIMINGR_HDEBUG 0
|
||||||
|
|
||||||
void timing_recovery_cc(complexf* input, complexf* output, int input_size, timing_recovery_state_t* state)
|
void timing_recovery_cc(complexf* input, complexf* output, int input_size, timing_recovery_state_t* state)
|
||||||
{
|
{
|
||||||
|
@ -1719,7 +1720,7 @@ void timing_recovery_cc(complexf* input, complexf* output, int input_size, timin
|
||||||
float error;
|
float error;
|
||||||
int si;
|
int si;
|
||||||
if(state->debug_force) fprintf(stderr, "disp(\"begin timing_recovery_cc\");\n");
|
if(state->debug_force) fprintf(stderr, "disp(\"begin timing_recovery_cc\");\n");
|
||||||
if(MTIMINGR_HDEBUG) fprintf(stderr, "timing_recovery_cci started, nsb = %d, nshb = %d, nsqb = %d\n", num_samples_bit, num_samples_halfbit, num_samples_quarterbit);
|
if(MTIMINGR_HDEBUG) fprintf(stderr, "timing_recovery_cc started, nsb = %d, nshb = %d, nsqb = %d\n", num_samples_bit, num_samples_halfbit, num_samples_quarterbit);
|
||||||
if(state->algorithm == TIMING_RECOVERY_ALGORITHM_GARDNER)
|
if(state->algorithm == TIMING_RECOVERY_ALGORITHM_GARDNER)
|
||||||
{
|
{
|
||||||
for(si=0;;si++)
|
for(si=0;;si++)
|
||||||
|
@ -1760,18 +1761,21 @@ void timing_recovery_cc(complexf* input, complexf* output, int input_size, timin
|
||||||
}
|
}
|
||||||
else if(state->algorithm == TIMING_RECOVERY_ALGORITHM_EARLYLATE)
|
else if(state->algorithm == TIMING_RECOVERY_ALGORITHM_EARLYLATE)
|
||||||
{
|
{
|
||||||
|
//bitstart index should be at symbol maximum effect point
|
||||||
for(si=0;;si++)
|
for(si=0;;si++)
|
||||||
{
|
{
|
||||||
if(current_bitstart_index + num_samples_bit >= input_size) break;
|
if(current_bitstart_index + num_samples_halfbit * 3 >= input_size) break;
|
||||||
if(MTIMINGR_HDEBUG) fprintf(stderr, "current_bitstart_index = %d, input_size = %d\n",
|
if(MTIMINGR_HDEBUG) fprintf(stderr, "current_bitstart_index = %d, input_size = %d\n",
|
||||||
current_bitstart_index, input_size);
|
current_bitstart_index, input_size);
|
||||||
output[si++] = input[current_bitstart_index + num_samples_halfbit];
|
output[si++] = input[current_bitstart_index];
|
||||||
error = (
|
error = (
|
||||||
iof(input, current_bitstart_index + num_samples_quarterbit * 3) - iof(input, current_bitstart_index + num_samples_quarterbit)
|
iof(input, current_bitstart_index + num_samples_quarterbit * 3) - iof(input, current_bitstart_index + num_samples_quarterbit)
|
||||||
); //* iof(input, current_bitstart_index + num_samples_halfbit); //I don't think we need the end of the Nutaq formula
|
) * iof(input, current_bitstart_index + num_samples_halfbit);
|
||||||
if(state->use_q)
|
if(state->use_q)
|
||||||
{
|
{
|
||||||
error += qof(input, current_bitstart_index + num_samples_quarterbit * 3) - qof(input, current_bitstart_index + num_samples_quarterbit);
|
error += (
|
||||||
|
qof(input, current_bitstart_index + num_samples_quarterbit * 3) - qof(input, current_bitstart_index + num_samples_quarterbit)
|
||||||
|
) * qof(input, current_bitstart_index + num_samples_halfbit);
|
||||||
error /= 2;
|
error /= 2;
|
||||||
}
|
}
|
||||||
//Correction method #1: this version can only move a single sample in any direction
|
//Correction method #1: this version can only move a single sample in any direction
|
||||||
|
@ -1791,6 +1795,7 @@ void timing_recovery_cc(complexf* input, complexf* output, int input_size, timin
|
||||||
num_samples_quarterbit * 1, 'r',
|
num_samples_quarterbit * 1, 'r',
|
||||||
num_samples_quarterbit * 2, 'r',
|
num_samples_quarterbit * 2, 'r',
|
||||||
num_samples_quarterbit * 3, 'r',
|
num_samples_quarterbit * 3, 'r',
|
||||||
|
0 , 'b',
|
||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
current_bitstart_index += num_samples_bit + num_samples_halfbit * (-error/2);
|
current_bitstart_index += num_samples_bit + num_samples_halfbit * (-error/2);
|
||||||
|
|
Loading…
Reference in a new issue