svn commit: r246138 - user/adrian/ath_radar_stuff/src/spectral_fft
Adrian Chadd
adrian at FreeBSD.org
Wed Jan 30 23:59:28 UTC 2013
Author: adrian
Date: Wed Jan 30 23:59:27 2013
New Revision: 246138
URL: http://svnweb.freebsd.org/changeset/base/246138
Log:
Update the FFT code to support the HT40 operating mode and the slight
change in FFT format from libradarpkt.
Modified:
user/adrian/ath_radar_stuff/src/spectral_fft/fft_eval.c
user/adrian/ath_radar_stuff/src/spectral_fft/fft_freebsd.c
user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.c
Modified: user/adrian/ath_radar_stuff/src/spectral_fft/fft_eval.c
==============================================================================
--- user/adrian/ath_radar_stuff/src/spectral_fft/fft_eval.c Wed Jan 30 23:59:04 2013 (r246137)
+++ user/adrian/ath_radar_stuff/src/spectral_fft/fft_eval.c Wed Jan 30 23:59:27 2013 (r246138)
@@ -49,8 +49,8 @@
#include "fft_histogram.h"
#include "fft_display.h"
-/* 10 a second for now, the rendering is too inefficient otherwise? */
-#define RENDER_PERIOD_MSEC 100
+/* 5 a second for now, the rendering is too inefficient otherwise? */
+#define RENDER_PERIOD_MSEC 200
#define LCL_EVENT_RENDER 69
@@ -200,6 +200,7 @@ void graphics_main(struct fft_app *fap)
break;
case SDL_QUIT:
quit = 1;
+ printf("quit!\n");
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym) {
Modified: user/adrian/ath_radar_stuff/src/spectral_fft/fft_freebsd.c
==============================================================================
--- user/adrian/ath_radar_stuff/src/spectral_fft/fft_freebsd.c Wed Jan 30 23:59:04 2013 (r246137)
+++ user/adrian/ath_radar_stuff/src/spectral_fft/fft_freebsd.c Wed Jan 30 23:59:27 2013 (r246138)
@@ -67,7 +67,7 @@ pkt_print(struct radar_entry *re)
{
printf("ts: %llu, freq=%u, rssi=%d, dur=%d, nsamples=%d\n",
re->re_timestamp,
- re->re_freq,
+ re->re_freq_centre,
re->re_rssi,
re->re_dur,
re->re_num_spectral_entries);
Modified: user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.c
==============================================================================
--- user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.c Wed Jan 30 23:59:04 2013 (r246137)
+++ user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.c Wed Jan 30 23:59:27 2013 (r246138)
@@ -19,9 +19,6 @@
#include "fft_histogram.h"
-/* XXX ew */
-#define SPECTRAL_HT20_NUM_BINS 56
-
struct fft_histogram *
fft_histogram_init(void)
{
@@ -62,39 +59,57 @@ void
fft_add_sample(struct fft_histogram *fh, struct radar_entry *re,
struct radar_fft_entry *fe)
{
- float ffreq;
+ float ffreq_khz;
int i;
int fidx;
int cur;
+ float fwidth_khz;
+
+ if (fe->num_bins == 0) {
+ fprintf(stderr, "%s: invalid num_bins (0)\n", __func__);
+ return;
+ }
+ //fprintf(stderr, "%s: yay, bins=%d, centre freq=%d\n", __func__, fe->num_bins, re->re_freq_centre);
- for (i = 0; i < SPECTRAL_HT20_NUM_BINS; i++) {
+ /*
+ * We know the bins are 315KHz (or 312.5KHz for non-fast mode,
+ * but whatever) wide, so let's calculate the true total bin
+ * width.
+ */
+ fwidth_khz = (float) (fe->num_bins) * 312.5;
+
+ for (i = 0; i < fe->num_bins; i++) {
/* Calculate frequency of the given event */
- ffreq = (float) re->re_freq - 10.0 +
- ((20.0 * i) / SPECTRAL_HT20_NUM_BINS);
+ ffreq_khz = (((float) re->re_freq_centre) * 1000.0) - (fwidth_khz / 2.0) +
+ ((fwidth_khz * i) / (float) fe->num_bins);
/* If it doesn't fit in the array, toss */
- fidx = freq2fidx((int) (ffreq * 1000.0));
- if (fidx < 0)
+ fidx = freq2fidx((int) ffreq_khz);
+ if (fidx < 0) {
+ fprintf(stderr, "%s: tossed, ffreq_khz=%d\n", __func__, (int) ffreq_khz);
continue;
+ }
/* XXX until i figure out what's going on */
- if (fe->pri.bins[i].dBm == 0 || fe->pri.bins[i].dBm < -185) // || fe->pri.bins[i].dBm > -10)
+ if (fe->bins[i].dBm == 0 || fe->bins[i].dBm < -185) { // || fe->bins[i].dBm > -10) {
+// fprintf(stderr, "%s: tossed; dbm=%d\n", __func__, fe->bins[i].dBm);
continue;
+ }
/* Rolling/decaying average */
cur = fh->d.avg_pts_cur[fidx];
if (fh->d.avg_pts[fidx][cur] == 0) {
- fh->d.avg_pts[fidx][cur] = fe->pri.bins[i].dBm;
+ fh->d.avg_pts[fidx][cur] = fe->bins[i].dBm;
} else {
- fh->d.avg_pts[fidx][cur] = (((fh->d.avg_pts[fidx][cur] * 100) / 90) + fe->pri.bins[i].dBm) / 2;
+ fh->d.avg_pts[fidx][cur] = (((fh->d.avg_pts[fidx][cur] * 100) / 90) + fe->bins[i].dBm) / 2;
}
fh->d.avg_pts_cur[fidx] = (fh->d.avg_pts_cur[fidx] + 1) % FFT_HISTOGRAM_HISTORY_DEPTH;
/* Max */
- if (fh->d.max_pts[fidx] == 0 || fe->pri.bins[i].dBm > fh->d.max_pts[fidx]) {
- fh->d.max_pts[fidx] = fe->pri.bins[i].dBm;
+ if (fh->d.max_pts[fidx] == 0 || fe->bins[i].dBm > fh->d.max_pts[fidx]) {
+ fh->d.max_pts[fidx] = fe->bins[i].dBm;
} else {
- fh->d.max_pts[fidx] = ((fh->d.max_pts[fidx] * 975) + (fe->pri.bins[i].dBm * 25)) / 1000;
+ fh->d.max_pts[fidx] = ((fh->d.max_pts[fidx] * 990) + (fe->bins[i].dBm * 10)) / 1000;
}
}
}
More information about the svn-src-user
mailing list