aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKyle Keen <keenerd@gmail.com>2014-01-23 07:31:34 -0500
committerSteve Markgraf <steve@steve-m.de>2014-01-23 23:26:41 +0100
commitf459214894f1eb7d633a7f71165065b9974540b9 (patch)
tree499d49de5c311a14e2aef460a9dc859dbbfcacfd
parent835bd23542f1ec3f48e3da918cb6f80a6f9ea92a (diff)
rtl_power: fix dBm math
Signed-off-by: Steve Markgraf <steve@steve-m.de>
-rw-r--r--src/rtl_power.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/rtl_power.c b/src/rtl_power.c
index e96dd2a..f28055b 100644
--- a/src/rtl_power.c
+++ b/src/rtl_power.c
@@ -623,6 +623,12 @@ void downsample_iq(int16_t *data, int length)
//remove_dc(data+1, length-1);
}
+long real_conj(int16_t real, int16_t imag)
+/* real(n * conj(n)) */
+{
+ return ((long)real*(long)real + (long)imag*(long)imag);
+}
+
void scanner(void)
{
int i, j, j2, f, n_read, offset, bin_e, bin_len, buf_len, ds, ds_p;
@@ -691,11 +697,11 @@ void scanner(void)
fix_fft(fft_buf+offset, bin_e);
if (!peak_hold) {
for (j=0; j<bin_len; j++) {
- ts->avg[j] += (long) abs(fft_buf[offset+j*2]);
+ ts->avg[j] += real_conj(fft_buf[offset+j*2], fft_buf[offset+j*2+1]);
}
} else {
for (j=0; j<bin_len; j++) {
- ts->avg[j] = MAX((long) abs(fft_buf[offset+j*2]), ts->avg[j]);
+ ts->avg[j] = MAX(real_conj(fft_buf[offset+j*2], fft_buf[offset+j*2+1]), ts->avg[j]);
}
}
ts->samples += ds;