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