1 2 #define MAX_FM_FFTSIZE 32 3 #define MAX_FM_FFTN 5 4 5 #define CWDETECT_CLEARED 0 6 #define CWDETECT_SEARCH_SPEED 1 7 #define CWDETECT_ERROR 4 8 9 #define CWDETECT_WAVEFORM_ESTABLISHED 5 10 #define CWDETECT_SOME_PARTS_FITTED 6 11 #define CWDETECT_LIMITS_FOUND 10 //test for flag>= 12 #define CWDETECT_REGION_INITIATED 11 13 #define CWDETECT_REGION_WAVEFORM_OK 20 14 #define CWDETECT_SOME_ASCII_FITTED 21 15 #define CWDETECT_DEBUG_STOP 99 16 #define CWDETECT_DEBUG_IDLE 100 17 18 // We evaluate the noise floor from narrow filters outside 19 // the baseband. Define the number of such filters to use on each 20 // side, the number of points for each filter and the separation between 21 // the filters. 22 #define NOISE_FILTERS 2 23 #define NOISE_POINTS 5 24 #define NOISE_SEP 2 25 26 // Parameter for colour scale of cw speed statistcdisplay 27 #define CG_STATISTICS_F1 1.0 28 // Parameter for the total time to average statistics over. 29 #define CG_STATISTICS_F3 10 30 #define CG_STATISTICS_F2 (CG_STATISTICS_F3/CG_STATISTICS_F1) 31 32 // Max length of Morse decoding oscilloscope traces. 33 #define MAX_CG_OSCW 512 34 35 36 // Structure for Morse decoding data. 37 typedef struct { 38 unsigned char type; // Part type (CW_DOT, CW_SPACE,....A,B,C,...) 39 unsigned char unkn; // Number of unknown states before this part 40 unsigned int len; // Length of character in states 41 float midpoint; 42 float sep; 43 float coh_re; 44 float coh_im; 45 float raw_re; 46 float raw_im; 47 float tmp; 48 }MORSE_DECODE_DATA; 49 50 // Defines for MORSE_DECODE_DATA.type (cw.type) 51 // Note that CW_DASH must have the lowest value. 52 // The data in cw_item_len[255-CW_DASH]; must agree with these definitions! 53 54 #define CW_WORDSEP 255 55 #define CW_SPACE 254 56 #define CW_DOT 253 57 #define CW_DASH 252 58 59 60 // The number of dots and dashes we can use in the detect routine 61 // is computed from the maximum number of dots the buffer can hold 62 // multiplied by this factor 63 #define MAX_CW_PARTS 0.25 64 65 // Parameters that define detect accuracy. 66 #define DASH_DETECT_LIMIT 0.82 67 #define DASH_MISFIT_LIMIT 0.7 68 #define DOT_DETECT_LIMIT 0.88 69 #define DOT_MISFIT_LIMIT 0.75 70 // The error in the detect waveform is given by the S/N ratio. 71 // This is the limit at which we decide that the keying speed is 72 // found accurately enough so we can switch from looking for 73 // the keying speed to actually start to look for code parts. 74 #define CW_WAVEFORM_MINSTON 8 75 76 77 78 79 // Defines for the Morse detect oscilloscope. 80 #define COH_GRAPH_ACTIVE -1000 81 82 83 #define POLEVAL_SIZE 32 84 typedef struct { 85 float a2; 86 float b2; 87 float re; 88 float im; 89 } POLCOFF; 90 91 #define KEYING_SPECTRUM_MAX 4 92 93 94 extern int baseb_min_block; 95 extern int baseb_output_block; 96 97 extern float rds_f1; 98 extern float rds_f2; 99 extern float rds_phase; 100 extern float rds_power; 101 extern int bg_filter_points; 102 extern float *squelch_info; 103 extern double squelch_turnon_time; 104 extern int squelch_on; 105 extern int bg_waterfall_blank_points; 106 107 extern float keying_spectrum_pos[KEYING_SPECTRUM_MAX]; 108 extern float keying_spectrum_ampl[KEYING_SPECTRUM_MAX]; 109 extern int keying_spectrum_ptr; 110 extern int keying_spectrum_max; 111 extern int keying_spectrum_cnt; 112 extern float keying_spectrum_f1; 113 extern int min_daout_samps; 114 115 extern int keying_spectrum_size; 116 extern float *keying_spectrum; 117 extern int cg_oscw; 118 extern int cg_osc_points; 119 extern int bg_no_of_notches; 120 extern int bg_current_notch; 121 extern int bg_notch_pos[MAX_BG_NOTCHES]; 122 extern int bg_notch_width[MAX_BG_NOTCHES]; 123 extern int bg_agc_hang_pts; 124 125 extern char *mg_behind_meter; 126 extern short int *mg_rms_ypix; 127 extern short int *mg_peak_ypix; 128 extern float *mg_rms_meter; 129 extern float *mg_peak_meter; 130 extern short int mg_first_xpixel; 131 extern short int mg_last_xpixel; 132 extern short int mg_pa; 133 extern short int mg_px; 134 extern short int mg_size; 135 extern short int mg_mask; 136 extern short int mgw_p; 137 extern short int mg_ymin; 138 extern short int mg_ymax; 139 extern int bg_update_filter; 140 extern char mg_clear_flag; 141 extern double mg_dbscale_start; 142 extern double mg_scale_offset; 143 extern double mg_dbstep; 144 extern float mg_midscale; 145 extern int mg_valid; 146 extern int mg_bar; 147 extern char *mg_barbuf; 148 extern short int mg_bar_x1; 149 extern short int mg_bar_x2; 150 extern short int mg_y0; 151 extern short int mg_bar_y; 152 extern float reg_dot_power[5]; 153 extern float reg_dot_re[5]; 154 extern float reg_dot_im[5]; 155 extern float reg_dash_power; 156 extern float reg_dash_re; 157 extern float reg_dash_im; 158 extern int dot_siz, dot_sizhalf, dash_siz, dash_sizhalf; 159 extern int cg_old_y1; 160 extern int cg_old_y2; 161 extern int cg_old_x1; 162 extern int cg_old_x2; 163 164 extern int cw_item_len[256-CW_DASH]; 165 extern char *cw_item_text[256-CW_DASH]; 166 extern unsigned char *morsascii[6]; 167 extern int cg_no_of_traces; 168 extern int cg_lsep; 169 extern unsigned char cg_color[]; 170 extern int cg_osc_ptr; 171 extern int cg_osc_offset; 172 extern int cg_osc_offset_inc; 173 extern int cg_osc_shift_flag; 174 extern int cg_max_trlevel; 175 extern float cg_code_unit; 176 extern float cg_decay_factor; 177 178 extern int cw_waveform_max; 179 180 extern unsigned int cw_avg_points; 181 extern int cg_wave_start; 182 extern float cg_wave_midpoint; 183 extern float cg_wave_fit; 184 extern float cg_wave_coh_re; 185 extern float cg_wave_coh_im; 186 extern float cg_wave_raw_re; 187 extern float cg_wave_raw_im; 188 extern float cg_wave_dat; 189 extern float cg_wave_err; 190 191 extern int cg_update_interval; 192 extern int cg_update_count; 193 194 extern float cw_stoninv; 195 extern int no_of_cwdat; 196 extern int correlate_no_of_cwdat; 197 extern int cw_decoded_chars; 198 extern float baseband_noise_level; 199 extern float carrier_noise_level; 200 extern float *cw_carrier_window; 201 202 extern float fm0_ph1; 203 extern float fm0_ph2; 204 extern float fm1_ph1; 205 extern float fm1_ph2; 206 extern float fm2_ph1; 207 extern float fm2_ph2; 208 extern float *fmfil70_fir; 209 extern int fmfil70_size; 210 extern int fmfil70_n; 211 extern int fmfil70_points; 212 extern float *fm_audiofil_fir; 213 extern int fm_audiofil_size; 214 extern int fm_audiofil_n; 215 extern int fm_audiofil_points; 216 extern int fm1_resample_ratio; 217 extern float fm1_sampling_speed; 218 extern int fm1_pa; 219 extern int fm1_px; 220 extern float *fm1_all; 221 extern int fm1_size; 222 extern int fm1_mask; 223 224 225 extern float *fmfil55_fir; 226 extern int fmfil55_size; 227 extern int fmfil55_n; 228 extern int fmfil55_points; 229 extern float *fmfil_rds_fir; 230 extern int fmfil_rds_size; 231 extern int fmfil_rds_n; 232 extern int fmfil_rds_points; 233 extern float *fmfil_fir; 234 extern int fmfil_size; 235 extern int fmfil_n; 236 extern int fmfil_points; 237 extern float *fmfil2_fir; 238 extern int fmfil2_size; 239 extern int fmfil2_n; 240 extern int fmfil2_points; 241 extern int fm_n; 242 extern int fm_size; 243 extern unsigned short int fm_permute[MAX_FM_FFTSIZE]; 244 extern COSIN_TABLE fm_tab[MAX_FM_FFTSIZE/2]; 245 extern float fm_win[MAX_FM_FFTSIZE]; 246 247 248 extern double da_block_counter; 249 extern float baseband_sampling_speed; 250 extern int timf1_to_baseband_speed_ratio; 251 extern MEMREF_T *baseband_handle; 252 extern int baseband_size; 253 extern int baseband_mask; 254 extern int baseband_neg; 255 extern int baseband_sizhalf; 256 extern float *baseb_out; 257 extern float *baseb; 258 extern float *baseb_raw; 259 260 extern float *baseb_fm_phase; 261 extern float *baseb_fm_rdsraw; 262 extern float *baseb_fm_composite; 263 extern float *baseb_fm_sumchan; 264 extern float *baseb_fm_diffchan; 265 extern float *baseb_fm_demod; 266 extern float *baseb_fm_demod_low; 267 extern float *baseb_fm_demod_high; 268 extern float *fm_pilot_tone; 269 extern float *baseb_fm_pil2; 270 extern float *baseb_fm_pil2det; 271 extern float *baseb_fm_pil3; 272 extern float *baseb_fm_pil3det; 273 extern int fm_pilot_size; 274 275 276 extern float *baseb_wb_raw; 277 extern float *baseb_raw_orthog; 278 extern float *baseb_carrier; 279 extern float *baseb_carrier_ampl; 280 extern float *baseb_totpwr; 281 extern float *baseb_envelope; 282 extern float *baseb_upthreshold; 283 extern float *baseb_threshold; 284 extern float *baseb_fit; 285 extern float *baseb_tmp; 286 extern float *baseb_agc_level; 287 extern float *baseb_agc_det; 288 extern float *basblock_maxpower; 289 extern float *basblock_avgpower; 290 extern short int *baseb_ramp; 291 extern float *baseb_sho1; 292 extern float *baseb_sho2; 293 extern float *cg_map; 294 extern short int *cg_traces; 295 extern float *dash_waveform; 296 extern float *dash_wb_waveform; 297 extern float *dot_wb_waveform; 298 extern float *baseb_clock; 299 extern int dash_wb_ia; 300 extern int dash_wb_ib; 301 extern int dot_wb_ia; 302 extern int dot_wb_ib; 303 extern float carrfil_weight; 304 extern float bgfil_weight; 305 extern int cg_yzer[CG_MAXTRACE]; 306 extern int cw_ptr; 307 extern int cw_detect_flag; 308 extern int baseb_pa; 309 extern int baseb_pb; 310 extern int baseb_pc; 311 extern int baseb_pd; 312 extern int baseb_pe; 313 extern int baseb_pf; 314 extern int baseb_ps; 315 extern int baseb_pm; 316 extern int baseb_pn; 317 extern int baseb_py; 318 extern int baseb_px; 319 extern float baseb_fx; 320 extern float *mix2_tmp; 321 extern float *mix2_pwr; 322 extern char *daout; 323 extern float *fftn_tmp; 324 extern MORSE_DECODE_DATA *cw; 325 extern int daout_size; 326 extern int new_baseb_flag; 327 extern float da_resample_ratio; 328 extern float new_da_resample_ratio; 329 extern int daout_upsamp; 330 extern int new_daout_upsamp; 331 extern int daout_upsamp_n; 332 extern int daout_pa; 333 extern int daout_px; 334 extern int tx_daout_block; 335 extern int daout_bufmask; 336 extern int flat_xpixel; 337 extern int curv_xpixel; 338 extern int bfo_xpixel; 339 extern int bfo10_xpixel; 340 extern int bfo100_xpixel; 341 extern int bfo_flag; 342 extern int baseb_queue; 343 extern double rx_daout_cos; 344 extern double rx_daout_sin; 345 extern double rx_daout_phstep_sin; 346 extern double rx_daout_phstep_cos; 347 348 extern float daout_gain; 349 extern int daout_gain_y; 350 extern char *bg_volbuf; 351 extern float *bg_binshape; 352 extern float *bg_ytmp; 353 extern int baseb_channels; 354 extern float baseb_wts; 355 extern float da_wttim; 356 extern float baseb_wttim; 357 extern float db_wttim; 358 extern float da_wait_time; 359 extern int poleval_pointer; 360 extern POLCOFF poleval_data[POLEVAL_SIZE]; 361 extern int bg_filtershift_points; 362 extern int bg_expand; 363 extern int bg_coherent; 364 extern int bg_delay; 365 extern int bg_twopol; 366 extern float bg_expand_a; 367 extern float bg_expand_b; 368 extern float bg_agc_amplimit; 369 extern float bg_amplimit; 370 extern float bg_maxamp; 371 extern int bg_amp_indicator_x; 372 extern int bg_amp_indicator_y; 373 extern int da_ch2_sign; 374 extern int cg_size; 375 extern int dash_pts; 376 extern float dash_sumsq; 377 extern float cwbit_pts; 378 extern float refpwr; 379 extern int basblock_size; 380 extern int basblock_pa; 381 extern int basblock_mask; 382 extern int basblock_hold_points; 383 extern float s_meter_peak_hold; 384 extern float s_meter_fast_attack_slow_decay; 385 extern float s_meter_average_power; 386 extern float cg_maxavg; 387 extern float baseband_pwrfac; 388 extern float rx_agc_factor1; 389 extern float rx_agc_factor2; 390 extern float rx_agc_sumpow1; 391 extern float rx_agc_sumpow2; 392 extern float rx_agc_sumpow3; 393 extern float rx_agc_sumpow4; 394 extern float rx_agc_fastsum1; 395 extern float rx_agc_fastsum2; 396 extern float rx_agc_fast_factor1; 397 extern float rx_agc_fast_factor2; 398 extern float agc_attack_factor1; 399 extern float agc_attack_factor2; 400 extern float agc_release_factor; 401 extern float am_dclevel1; 402 extern float am_dclevel2; 403 extern float am_dclevel_factor1; 404 extern float am_dclevel_factor2; 405 extern int s_meter_avgnum; 406 extern float s_meter_avg; 407 extern int max_cwdat; 408 409 410 void show_bg_maxamp(void); 411 void store_dash(void); 412 void fit_dash(void); 413 void shift_cg_osc_track(int shift); 414 float check_dash(float pos); 415 void set_region_envelope(void); 416 void set_long_region_envelope(void); 417 void clear_region(void); 418 int store_symmetry_adapted_dash(int ideal); 419 void update_cg_traces(void); 420 void detect_cw_speed(void); 421 void skip_old_dashes(void); 422 void first_find_parts(void); 423 void second_find_parts(void); 424 void cw_decode(void); 425 void cw_decode_region(void); 426 void init_cw_decode(void); 427 void init_cw_decode_region(void); 428 void seldash_cwspeed(int da, int db); 429 void remove_dash(void); 430 void insert_item(int type); 431 void show_bg_buttons(int all); 432 void make_bg_waterf_cfac(void); 433 void new_bg_waterfall_gain(void); 434 void new_bg_waterfall_zero(void); 435 void change_bg_waterf_avgnum(void); 436 void wb_investigate_region(float pos, int len); 437 void get_wb_average_dashes(void); 438 float collect_wb_ston(void); 439 void find_good_dashes(int ia, int ic, char color); 440 int short_region_guesses(int types); 441 void decoded_cwspeed(void); 442 void get_wb_average_dots(void); 443 void guess_wb_average_dots(void); 444 void init_basebmem(void); 445 void make_baseband_graph(int flag); 446 void init_baseband_sizes(void); 447 void make_bg_filter(void); 448 void clear_baseb_arrays(int nn,int k); 449 450