@@ -211,32 +211,41 @@ void pulse_analyzer(pulse_data_t *data, int package_type, r_device* device)
211
211
212
212
double to_ms = 1e3 / data -> sample_rate ;
213
213
double to_us = 1e6 / data -> sample_rate ;
214
- // Generate pulse period data
214
+ // Generate pulse period data (pulse + gap, trailing gap)
215
215
int pulse_total_period = 0 ;
216
- pulse_data_t pulse_periods = {0 };
217
- pulse_periods .num_pulses = data -> num_pulses ;
218
- for (unsigned n = 0 ; n < pulse_periods .num_pulses ; ++ n ) {
219
- pulse_periods .pulse [n ] = data -> pulse [n ] + data -> gap [n ];
216
+ pulse_data_t pulse_periods_pg = {0 };
217
+ pulse_periods_pg .num_pulses = data -> num_pulses ;
218
+ for (unsigned n = 0 ; n < pulse_periods_pg .num_pulses ; ++ n ) {
219
+ pulse_periods_pg .pulse [n ] = data -> pulse [n ] + data -> gap [n ];
220
220
pulse_total_period += data -> pulse [n ] + data -> gap [n ];
221
221
}
222
- pulse_total_period -= data -> gap [pulse_periods .num_pulses - 1 ];
222
+ pulse_total_period -= data -> gap [pulse_periods_pg .num_pulses - 1 ];
223
+ // Generate pulse period data (gap + pulse, leading gap)
224
+ pulse_data_t pulse_periods_gp = {0 };
225
+ pulse_periods_gp .num_pulses = data -> num_pulses ;
226
+ pulse_periods_gp .pulse [0 ] = data -> pulse [0 ];
227
+ for (unsigned n = 1 ; n < pulse_periods_gp .num_pulses ; ++ n ) {
228
+ pulse_periods_gp .pulse [n ] = data -> pulse [n ] + data -> gap [n - 1 ];
229
+ }
223
230
224
231
histogram_t hist_pulses = {0 };
225
232
histogram_t hist_gaps = {0 };
226
- histogram_t hist_periods = {0 };
233
+ histogram_t hist_periods_pg = {0 }; // Pulse+Gap periods
234
+ histogram_t hist_periods_gp = {0 }; // Gap+Pulse periods
227
235
histogram_t hist_timings = {0 };
228
236
229
237
// Generate statistics
230
238
histogram_sum (& hist_pulses , data -> pulse , data -> num_pulses , TOLERANCE );
231
239
histogram_sum (& hist_gaps , data -> gap , data -> num_pulses - 1 , TOLERANCE ); // Leave out last gap (end)
232
- histogram_sum (& hist_periods , pulse_periods .pulse , pulse_periods .num_pulses - 1 , TOLERANCE ); // Leave out last gap (end)
240
+ histogram_sum (& hist_periods_pg , pulse_periods_pg .pulse , pulse_periods_pg .num_pulses - 1 , TOLERANCE ); // Leave out last gap (end)
241
+ histogram_sum (& hist_periods_gp , pulse_periods_gp .pulse , pulse_periods_gp .num_pulses , TOLERANCE );
233
242
histogram_sum (& hist_timings , data -> pulse , data -> num_pulses , TOLERANCE );
234
243
histogram_sum (& hist_timings , data -> gap , data -> num_pulses , TOLERANCE );
235
244
236
245
// Fuse overlapping bins
237
246
histogram_fuse_bins (& hist_pulses , TOLERANCE );
238
247
histogram_fuse_bins (& hist_gaps , TOLERANCE );
239
- histogram_fuse_bins (& hist_periods , TOLERANCE );
248
+ histogram_fuse_bins (& hist_periods_pg , TOLERANCE );
240
249
histogram_fuse_bins (& hist_timings , TOLERANCE );
241
250
242
251
fprintf (stderr , "Analyzing pulses...\n" );
@@ -246,9 +255,11 @@ void pulse_analyzer(pulse_data_t *data, int package_type, r_device* device)
246
255
histogram_print (& hist_pulses , data -> sample_rate );
247
256
fprintf (stderr , "Gap width distribution:\n" );
248
257
histogram_print (& hist_gaps , data -> sample_rate );
249
- fprintf (stderr , "Pulse period distribution:\n" );
250
- histogram_print (& hist_periods , data -> sample_rate );
251
- fprintf (stderr , "Pulse timing distribution:\n" );
258
+ fprintf (stderr , "Pulse+gap period distribution:\n" );
259
+ histogram_print (& hist_periods_pg , data -> sample_rate );
260
+ fprintf (stderr , "Gap+pulse period distribution:\n" );
261
+ histogram_print (& hist_periods_gp , data -> sample_rate );
262
+ fprintf (stderr , "Timing distribution:\n" );
252
263
histogram_print (& hist_timings , data -> sample_rate );
253
264
fprintf (stderr , "Level estimates [high, low]: %6i, %6i\n" ,
254
265
data -> ook_high_estimate , data -> ook_low_estimate );
@@ -291,15 +302,15 @@ void pulse_analyzer(pulse_data_t *data, int package_type, r_device* device)
291
302
device -> tolerance = (device -> long_width - device -> short_width ) * 0.4 ;
292
303
device -> reset_limit = to_us * (hist_gaps .bins [hist_gaps .bins_count - 1 ].max + 1 ); // Set limit above biggest gap
293
304
}
294
- else if (hist_pulses .bins_count == 2 && hist_gaps .bins_count == 2 && hist_periods .bins_count == 1 ) {
305
+ else if (hist_pulses .bins_count == 2 && hist_gaps .bins_count == 2 && hist_periods_pg .bins_count == 1 ) {
295
306
fprintf (stderr , "Pulse Width Modulation with fixed period\n" );
296
307
device -> modulation = (package_type == PULSE_DATA_FSK ) ? FSK_PULSE_PWM : OOK_PULSE_PWM ;
297
308
device -> short_width = to_us * hist_pulses .bins [0 ].mean ;
298
309
device -> long_width = to_us * hist_pulses .bins [1 ].mean ;
299
310
device -> tolerance = (device -> long_width - device -> short_width ) * 0.4 ;
300
311
device -> reset_limit = to_us * (hist_gaps .bins [hist_gaps .bins_count - 1 ].max + 1 ); // Set limit above biggest gap
301
312
}
302
- else if (hist_pulses .bins_count == 2 && hist_gaps .bins_count == 2 && hist_periods .bins_count == 3 ) {
313
+ else if (hist_pulses .bins_count == 2 && hist_gaps .bins_count == 2 && hist_periods_pg .bins_count == 3 ) {
303
314
fprintf (stderr , "Manchester coding\n" );
304
315
device -> modulation = (package_type == PULSE_DATA_FSK ) ? FSK_PULSE_MANCHESTER_ZEROBIT : OOK_PULSE_MANCHESTER_ZEROBIT ;
305
316
device -> short_width = to_us * MIN (hist_pulses .bins [0 ].mean , hist_pulses .bins [1 ].mean ); // Assume shortest pulse is half period
0 commit comments