Date: Tue, 8 Jan 2013 22:23:13 +0000 (UTC) From: Adrian Chadd <adrian@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r245188 - user/adrian/ath_radar_stuff/src/spectral_fft Message-ID: <201301082223.r08MNDff027834@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: adrian Date: Tue Jan 8 22:23:12 2013 New Revision: 245188 URL: http://svnweb.freebsd.org/changeset/base/245188 Log: Add in a very hacky and mostly incorrect rolling average and slightly decaying max-hold implementation. Plot the max in red, and the current average-ish in blue. Modified: user/adrian/ath_radar_stuff/src/spectral_fft/fft_eval.c user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.c user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.h Modified: user/adrian/ath_radar_stuff/src/spectral_fft/fft_eval.c ============================================================================== --- user/adrian/ath_radar_stuff/src/spectral_fft/fft_eval.c Tue Jan 8 22:23:09 2013 (r245187) +++ user/adrian/ath_radar_stuff/src/spectral_fft/fft_eval.c Tue Jan 8 22:23:12 2013 (r245188) @@ -231,20 +231,23 @@ int draw_picture(int highlight, int star float signal; int freqKhz = i; - /* Fetch dBm value at the given frequency in KHz */ - signal = (float) fft_fetch_freq(freqKhz); x = X_SCALE * (freqKhz - (startfreq * 1000)) / 1000; + /* Fetch dBm value at the given frequency in KHz */ + signal = (float) fft_fetch_freq_avg(freqKhz); + color = BMASK | AMASK; + opacity = 64; y = 400 - (400.0 + Y_SCALE * signal); + if (bigpixel(pixels, x, y, color, opacity) < 0) + continue; + /* .. and the max */ + signal = (float) fft_fetch_freq_max(freqKhz); color = RMASK | AMASK; opacity = 255; - -// printf(" (%d) %d,%d\n", freqKhz, x, y); - + y = 400 - (400.0 + Y_SCALE * signal); if (bigpixel(pixels, x, y, color, opacity) < 0) continue; - } SDL_BlitSurface(surface, NULL, screen, NULL); Modified: user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.c ============================================================================== --- user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.c Tue Jan 8 22:23:09 2013 (r245187) +++ user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.c Tue Jan 8 22:23:12 2013 (r245188) @@ -70,30 +70,40 @@ fft_add_sample(struct radar_entry *re, s continue; /* XXX until i figure out what's going on */ - if (fe->pri.bins[i].dBm == 0 || fe->pri.bins[i].dBm < -185) + if (fe->pri.bins[i].dBm == 0 || fe->pri.bins[i].dBm < -185) // || fe->pri.bins[i].dBm > -10) continue; - /* Store the current dBm value */ - fdata.pts[fidx] = fe->pri.bins[i].dBm; + /* Rolling/decaying average */ + fdata.avg_pts[fidx] = (((fdata.avg_pts[fidx] * 100) / 90) + fe->pri.bins[i].dBm) / 2; + + /* Max */ + if (fdata.max_pts[fidx] == 0 || fe->pri.bins[i].dBm > fdata.max_pts[fidx]) { + fdata.max_pts[fidx] = fe->pri.bins[i].dBm; + } else { + fdata.max_pts[fidx] = ((fdata.max_pts[fidx] * 997) + (fe->pri.bins[i].dBm * 3)) / 1000; + } } } int -fft_fetch_freq(int freqKhz) +fft_fetch_freq_avg(int freqKhz) { int fidx; fidx = freq2fidx(freqKhz); if (fidx < 0) - return -150; /* XXX */ + return -180; /* XXX */ + + return fdata.avg_pts[fidx]; +} +int +fft_fetch_freq_max(int freqKhz) +{ + int fidx; -#if 0 - printf("%s: khz=%d, fidx=%d, val=%d\n", - __func__, - freqKhz, - fidx, - fdata.pts[fidx]); -#endif + fidx = freq2fidx(freqKhz); + if (fidx < 0) + return -180; /* XXX */ - return fdata.pts[fidx]; + return fdata.max_pts[fidx]; } Modified: user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.h ============================================================================== --- user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.h Tue Jan 8 22:23:09 2013 (r245187) +++ user/adrian/ath_radar_stuff/src/spectral_fft/fft_histogram.h Tue Jan 8 22:23:12 2013 (r245188) @@ -10,12 +10,14 @@ ((6000-2300)*FFT_HISTOGRAM_RESOLUTION) struct fft_histogram_data { - int pts[FFT_HISTOGRAM_SIZE]; + int avg_pts[FFT_HISTOGRAM_SIZE]; + int max_pts[FFT_HISTOGRAM_SIZE]; }; extern void fft_histogram_init(void); extern void fft_add_sample(struct radar_entry *re, struct radar_fft_entry *fe); -extern int fft_fetch_freq(int freqKhz); +extern int fft_fetch_freq_avg(int freqKhz); +extern int fft_fetch_freq_max(int freqKhz); #endif
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201301082223.r08MNDff027834>