kopia lustrzana https://github.com/keenerd/rtl-sdr
rtl_power: trough hold
rodzic
86f950389a
commit
0d825fe08e
|
@ -67,6 +67,7 @@
|
|||
#include "convenience/convenience.h"
|
||||
|
||||
#define MAX(x, y) (((x) > (y)) ? (x) : (y))
|
||||
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
|
||||
|
||||
#define DEFAULT_BUF_LENGTH (1 * 16384)
|
||||
#define AUTO_GAIN -100
|
||||
|
@ -104,7 +105,7 @@ struct tuning_state
|
|||
int downsample;
|
||||
int downsample_passes; /* for the recursive filter */
|
||||
int comp_fir_size;
|
||||
int peak_hold;
|
||||
int peak_hold; /* 1 = peak, 0 = off, -1 = trough */
|
||||
int linear;
|
||||
int bin_spec;
|
||||
double crop;
|
||||
|
@ -188,6 +189,7 @@ void usage(void)
|
|||
"\t possible values are 2M to 3.2M\n"
|
||||
"\t[-E enables epoch timestamps (default: off/verbose)]\n"
|
||||
"\t[-P enables peak hold (default: off/averaging)]\n"
|
||||
"\t[-T enables trough hold (default: off/averaging)]\n"
|
||||
"\t[-L enable linear output (default: off/dB)]\n"
|
||||
"\t[-D direct_sampling_mode, 0 (default/off), 1 (I), 2 (Q), 3 (no-mod)]\n"
|
||||
"\t[-O enable offset tuning (default: off)]\n"
|
||||
|
@ -479,10 +481,12 @@ void rms_power(struct tuning_state *ts)
|
|||
err = t * 2 * dc - dc * dc * buf_len;
|
||||
p -= (int64_t)round(err);
|
||||
|
||||
if (!ts->peak_hold) {
|
||||
if (ts->peak_hold == 0) {
|
||||
ts->avg[0] += p;
|
||||
} else {
|
||||
} else if (ts->peak_hold == 1) {
|
||||
ts->avg[0] = MAX(ts->avg[0], p);
|
||||
} else if (ts->peak_hold == -1) {
|
||||
ts->avg[0] = MIN(ts->avg[0], p);
|
||||
}
|
||||
ts->samples += 1;
|
||||
}
|
||||
|
@ -685,7 +689,10 @@ void frequency_range(char *arg, struct misc_settings *ms)
|
|||
exit(1);
|
||||
}
|
||||
for (j=0; j<(1<<c.bin_e); j++) {
|
||||
ts->avg[j] = 0L;
|
||||
if (ts->peak_hold == -1) {
|
||||
ts->avg[j] = 1e6;
|
||||
} else {
|
||||
ts->avg[j] = 0L;}
|
||||
}
|
||||
ts->buf8 = (uint8_t*)malloc(buf_len * sizeof(uint8_t));
|
||||
if (!ts->buf8) {
|
||||
|
@ -933,14 +940,18 @@ void scanner(void)
|
|||
fft_buf[offset+j*2+1] = (int16_t)w;
|
||||
}
|
||||
fix_fft(fft_buf+offset, bin_e, ts->sine);
|
||||
if (!ts->peak_hold) {
|
||||
if (ts->peak_hold == 0) {
|
||||
for (j=0; j<bin_len; j++) {
|
||||
ts->avg[j] += real_conj(fft_buf[offset+j*2], fft_buf[offset+j*2+1]);
|
||||
}
|
||||
} else {
|
||||
} else if (ts->peak_hold == 1){
|
||||
for (j=0; j<bin_len; j++) {
|
||||
ts->avg[j] = MAX(real_conj(fft_buf[offset+j*2], fft_buf[offset+j*2+1]), ts->avg[j]);
|
||||
}
|
||||
} else if (ts->peak_hold == -1){
|
||||
for (j=0; j<bin_len; j++) {
|
||||
ts->avg[j] = MIN(real_conj(fft_buf[offset+j*2], fft_buf[offset+j*2+1]), ts->avg[j]);
|
||||
}
|
||||
}
|
||||
ts->samples += ds;
|
||||
}
|
||||
|
@ -975,7 +986,7 @@ void csv_dbm(struct tuning_state *ts)
|
|||
}
|
||||
dbm = (double)ts->avg[i];
|
||||
dbm /= (double)ts->rate;
|
||||
if (!ts->peak_hold) {
|
||||
if (ts->peak_hold == 0) {
|
||||
dbm /= (double)ts->samples;
|
||||
}
|
||||
if (ts->linear) {
|
||||
|
@ -986,7 +997,10 @@ void csv_dbm(struct tuning_state *ts)
|
|||
}
|
||||
}
|
||||
for (i=0; i<len; i++) {
|
||||
ts->avg[i] = 0L;
|
||||
if (ts->peak_hold == -1) {
|
||||
ts->avg[i] = 1e6;
|
||||
} else {
|
||||
ts->avg[i] = 0L;}
|
||||
}
|
||||
ts->samples = 0;
|
||||
}
|
||||
|
@ -1034,7 +1048,7 @@ int main(int argc, char **argv)
|
|||
init_misc(&ms);
|
||||
strcpy(dev_label, "DEFAULT");
|
||||
|
||||
while ((opt = getopt(argc, argv, "f:i:s:r:t:d:g:p:e:w:c:F:1EPLD:Oh")) != -1) {
|
||||
while ((opt = getopt(argc, argv, "f:i:s:r:t:d:g:p:e:w:c:F:1EPTLD:Oh")) != -1) {
|
||||
switch (opt) {
|
||||
case 'f': // lower:upper:bin_size
|
||||
if (f_set) {
|
||||
|
@ -1102,6 +1116,9 @@ int main(int argc, char **argv)
|
|||
case 'P':
|
||||
ms.peak_hold = 1;
|
||||
break;
|
||||
case 'T':
|
||||
ms.peak_hold = -1;
|
||||
break;
|
||||
case 'L':
|
||||
ms.linear = 1;
|
||||
break;
|
||||
|
|
Ładowanie…
Reference in New Issue