Fixed timing_recovery_cc output data

This commit is contained in:
ha7ilm 2017-04-01 12:54:21 +02:00
parent bc299725b9
commit ca40a41d5a
3 changed files with 393 additions and 93 deletions

4
csdr.c
View file

@ -131,7 +131,7 @@ char usage[]=
" differential_decoder_u8_u8\n"
" dump_u8\n"
" psk_modulator_u8_c <n_psk>\n"
" psk31_interpolate_sine_cc\n"
" psk31_interpolate_sine_cc <interpolation>\n"
" duplicate_samples_ntimes_u8_u8 <sample_size_bytes> <ntimes>\n"
" bpsk_costas_loop_cc <samples_per_bits>\n"
" ?<search_the_function_list>\n"
@ -2455,7 +2455,7 @@ int main(int argc, char *argv[])
FEOF_CHECK;
if(debug_n && ++debug_i%debug_n==0) timing_recovery_trigger_debug(&state, 3);
timing_recovery_cc((complexf*)input_buffer, (complexf*)output_buffer, the_bufsize, &state);
//fprintf(stderr, "os %d\n",state.output_size);
//fprintf(stderr, "trcc is=%d, os=%d, ip=%d\n",the_bufsize, state.output_size, state.input_processed);
fwrite(output_buffer, sizeof(complexf), state.output_size, stdout);
fflush(stdout);
TRY_YIELD;

View file

@ -69,65 +69,6 @@
<value></value>
</param>
</block>
<block>
<key>variable_slider</key>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>converver</key>
<value>float_converter</value>
</param>
<param>
<key>value</key>
<value>1000</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(296, 11)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>grid_pos</key>
<value></value>
</param>
<param>
<key>id</key>
<value>freq</value>
</param>
<param>
<key>label</key>
<value></value>
</param>
<param>
<key>max</key>
<value>samp_rate/2</value>
</param>
<param>
<key>min</key>
<value>0</value>
</param>
<param>
<key>notebook</key>
<value></value>
</param>
<param>
<key>num_steps</key>
<value>100</value>
</param>
<param>
<key>style</key>
<value>wx.SL_HORIZONTAL</value>
</param>
</block>
<block>
<key>variable_slider</key>
<param>
@ -148,7 +89,7 @@
</param>
<param>
<key>_coordinate</key>
<value>(960, 171)</value>
<value>(288, 11)</value>
</param>
<param>
<key>_rotation</key>
@ -211,7 +152,7 @@
</param>
<param>
<key>value</key>
<value>1000000</value>
<value>2**18</value>
</param>
</block>
<block>
@ -250,7 +191,7 @@
</param>
<param>
<key>max</key>
<value>1</value>
<value>2</value>
</param>
<param>
<key>minoutbuf</key>
@ -262,7 +203,7 @@
</param>
<param>
<key>num_samps</key>
<value>1</value>
<value>1000</value>
</param>
<param>
<key>type</key>
@ -273,6 +214,104 @@
<value>True</value>
</param>
</block>
<block>
<key>blocks_complex_to_float</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>0</value>
</param>
<param>
<key>_coordinate</key>
<value>(960, 265)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>blocks_complex_to_float_0</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
</block>
<block>
<key>blocks_interleave</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>blocksize</key>
<value>1</value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>0</value>
</param>
<param>
<key>_coordinate</key>
<value>(1168, 265)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>blocks_interleave_0</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>num_streams</key>
<value>2</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
</block>
<block>
<key>blocks_throttle</key>
<param>
@ -293,7 +332,7 @@
</param>
<param>
<key>_coordinate</key>
<value>(176, 211)</value>
<value>(456, 211)</value>
</param>
<param>
<key>_rotation</key>
@ -321,7 +360,7 @@
</param>
<param>
<key>type</key>
<value>byte</value>
<value>complex</value>
</param>
<param>
<key>vlen</key>
@ -356,7 +395,7 @@
</param>
<param>
<key>_coordinate</key>
<value>(376, 179)</value>
<value>(208, 179)</value>
</param>
<param>
<key>_rotation</key>
@ -388,7 +427,7 @@
</param>
<param>
<key>samples_per_symbol</key>
<value>256</value>
<value>2</value>
</param>
<param>
<key>verbose</key>
@ -403,7 +442,7 @@
</param>
<param>
<key>center_freq</key>
<value>freq_add</value>
<value>-freq_add</value>
</param>
<param>
<key>comment</key>
@ -419,11 +458,11 @@
</param>
<param>
<key>_enabled</key>
<value>True</value>
<value>1</value>
</param>
<param>
<key>_coordinate</key>
<value>(672, 211)</value>
<value>(688, 251)</value>
</param>
<param>
<key>_rotation</key>
@ -455,14 +494,14 @@
</param>
</block>
<block>
<key>ha5kfu_execproc_xx</key>
<key>ha5kfu_execproc_sink_f</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>commandline</key>
<value>csdr bpsk_costas_loop_cc 1</value>
<value>zsh -c \"csdr timing_recovery_cc GARDNER 16 --add_q --octave 1 1&gt;/dev/null 2&gt; &gt;(octave -i)\"</value>
</param>
<param>
<key>comment</key>
@ -474,7 +513,42 @@
</param>
<param>
<key>_enabled</key>
<value>True</value>
<value>0</value>
</param>
<param>
<key>_coordinate</key>
<value>(824, 427)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>ha5kfu_execproc_sink_f_0</value>
</param>
</block>
<block>
<key>ha5kfu_execproc_xx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>commandline</key>
<value>csdr bpsk_costas_loop_cc 8</value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>1</value>
</param>
<param>
<key>_coordinate</key>
@ -509,7 +583,7 @@
</param>
<param>
<key>commandline</key>
<value>csdr timing_recovery_cc GARDNER 256</value>
<value>csdr timing_recovery_cc GARDNER 16 --add_q | csdr fir_interpolate_cc 8</value>
</param>
<param>
<key>comment</key>
@ -521,11 +595,11 @@
</param>
<param>
<key>_enabled</key>
<value>True</value>
<value>1</value>
</param>
<param>
<key>_coordinate</key>
<value>(112, 395)</value>
<value>(112, 403)</value>
</param>
<param>
<key>_rotation</key>
@ -548,6 +622,109 @@
<value>cc</value>
</param>
</block>
<block>
<key>wxgui_fftsink2</key>
<param>
<key>avg_alpha</key>
<value>0</value>
</param>
<param>
<key>average</key>
<value>False</value>
</param>
<param>
<key>baseband_freq</key>
<value>0</value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>0</value>
</param>
<param>
<key>fft_size</key>
<value>1024</value>
</param>
<param>
<key>freqvar</key>
<value>None</value>
</param>
<param>
<key>_coordinate</key>
<value>(960, 59)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>grid_pos</key>
<value></value>
</param>
<param>
<key>id</key>
<value>wxgui_fftsink2_0</value>
</param>
<param>
<key>notebook</key>
<value></value>
</param>
<param>
<key>peak_hold</key>
<value>False</value>
</param>
<param>
<key>ref_level</key>
<value>0</value>
</param>
<param>
<key>ref_scale</key>
<value>2.0</value>
</param>
<param>
<key>fft_rate</key>
<value>15</value>
</param>
<param>
<key>samp_rate</key>
<value>samp_rate</value>
</param>
<param>
<key>title</key>
<value>FFT Plot</value>
</param>
<param>
<key>type</key>
<value>complex</value>
</param>
<param>
<key>win_size</key>
<value></value>
</param>
<param>
<key>win</key>
<value>None</value>
</param>
<param>
<key>y_divs</key>
<value>10</value>
</param>
<param>
<key>y_per_div</key>
<value>10</value>
</param>
</block>
<block>
<key>wxgui_scopesink2</key>
<param>
@ -568,7 +745,7 @@
</param>
<param>
<key>_enabled</key>
<value>True</value>
<value>1</value>
</param>
<param>
<key>_coordinate</key>
@ -596,7 +773,7 @@
</param>
<param>
<key>samp_rate</key>
<value>samp_rate/256</value>
<value>(samp_rate/256)*8</value>
</param>
<param>
<key>t_scale</key>
@ -655,7 +832,7 @@
</param>
<param>
<key>_enabled</key>
<value>True</value>
<value>1</value>
</param>
<param>
<key>_coordinate</key>
@ -683,7 +860,7 @@
</param>
<param>
<key>samp_rate</key>
<value>samp_rate/256</value>
<value>(samp_rate/256)*8</value>
</param>
<param>
<key>t_scale</key>
@ -722,30 +899,153 @@
<value>Counts</value>
</param>
</block>
<block>
<key>wxgui_scopesink2</key>
<param>
<key>ac_couple</key>
<value>False</value>
</param>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(688, 11)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>grid_pos</key>
<value></value>
</param>
<param>
<key>id</key>
<value>wxgui_scopesink2_0_1</value>
</param>
<param>
<key>notebook</key>
<value></value>
</param>
<param>
<key>num_inputs</key>
<value>1</value>
</param>
<param>
<key>samp_rate</key>
<value>samp_rate</value>
</param>
<param>
<key>t_scale</key>
<value>0</value>
</param>
<param>
<key>title</key>
<value>After BPSK modulator</value>
</param>
<param>
<key>trig_mode</key>
<value>wxgui.TRIG_MODE_AUTO</value>
</param>
<param>
<key>type</key>
<value>complex</value>
</param>
<param>
<key>v_offset</key>
<value>0</value>
</param>
<param>
<key>v_scale</key>
<value>0</value>
</param>
<param>
<key>win_size</key>
<value></value>
</param>
<param>
<key>xy_mode</key>
<value>False</value>
</param>
<param>
<key>y_axis_label</key>
<value>Counts</value>
</param>
</block>
<connection>
<source_block_id>analog_random_source_x_0</source_block_id>
<sink_block_id>blocks_throttle_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_throttle_0</source_block_id>
<sink_block_id>digital_psk_mod_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>digital_psk_mod_0</source_block_id>
<source_block_id>blocks_complex_to_float_0</source_block_id>
<sink_block_id>blocks_interleave_0</sink_block_id>
<source_key>1</source_key>
<sink_key>1</sink_key>
</connection>
<connection>
<source_block_id>blocks_complex_to_float_0</source_block_id>
<sink_block_id>blocks_interleave_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_interleave_0</source_block_id>
<sink_block_id>ha5kfu_execproc_sink_f_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_throttle_0</source_block_id>
<sink_block_id>freq_xlating_fir_filter_xxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_throttle_0</source_block_id>
<sink_block_id>wxgui_scopesink2_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>digital_psk_mod_0</source_block_id>
<sink_block_id>blocks_throttle_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>freq_xlating_fir_filter_xxx_0</source_block_id>
<sink_block_id>blocks_complex_to_float_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>freq_xlating_fir_filter_xxx_0</source_block_id>
<sink_block_id>ha5kfu_execproc_xx_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>freq_xlating_fir_filter_xxx_0</source_block_id>
<sink_block_id>wxgui_fftsink2_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>ha5kfu_execproc_xx_0</source_block_id>
<sink_block_id>wxgui_scopesink2_0_0</sink_block_id>

View file

@ -1837,11 +1837,11 @@ void timing_recovery_cc(complexf* input, complexf* output, int input_size, timin
int debug_i = state->debug_count;
float error;
int el_point_left_index, el_point_right_index, el_point_mid_index;
int si;
int si = 0;
if(state->debug_force) fprintf(stderr, "disp(\"begin timing_recovery_cc\");\n");
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);
{
for(si=0;;si++)
for(;;)
{
//the MathWorks style algorithm has correction_offset.
//correction_offset = 0;
@ -1862,7 +1862,7 @@ void timing_recovery_cc(complexf* input, complexf* output, int input_size, timin
el_point_right_index = current_bitstart_index + num_samples_earlylate_wing * 3;
el_point_left_index = current_bitstart_index + num_samples_earlylate_wing * 1 - correction_offset;
el_point_mid_index = current_bitstart_index + num_samples_halfbit;
output[si++] = input[current_bitstart_index + el_point_mid_index];
output[si++] = input[el_point_mid_index];
}
else if(state->algorithm == TIMING_RECOVERY_ALGORITHM_GARDNER)
{
@ -1870,7 +1870,7 @@ void timing_recovery_cc(complexf* input, complexf* output, int input_size, timin
el_point_right_index = current_bitstart_index + num_samples_halfbit * 3;
el_point_left_index = current_bitstart_index + num_samples_halfbit * 1;
el_point_mid_index = current_bitstart_index + num_samples_halfbit * 2;
output[si++] = input[current_bitstart_index + num_samples_halfbit * 1];
output[si++] = input[el_point_left_index];
}
else break;