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