EARLYLATE actually works

This commit is contained in:
ha7ilm 2017-03-05 19:16:34 +01:00
parent f93e7c4a99
commit 306e4aeb91
2 changed files with 12 additions and 6 deletions

1
csdr.c
View file

@ -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));

View file

@ -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);