I added in the baseband-filter-bandwidth control procedure, which is something I forgot to do earlier. This was critical for picking up the weaker stations, such as KJNP 100.3Mhz, which is around 20 or 30 miles away, I think. I coded some simple helper functions (in Scheme) to start and stop receiving data according to time parameters, which I will use to record my favorite radio program each morning. This example records data for one minute from 8:43pm to 8:44pm (code checkout a992f67).
scheme@(guile-user)> (define d (hackrf-open)) scheme@(guile-user)> (load "hackrf-shell-lib.scm") scheme@(guile-user)> (hackrf-sensible-defaults d) scheme@(guile-user)> (hackrf-set-baseband-filter-bandwidth d 2000000) scheme@(guile-user)> (hackrf-enable-amp d) scheme@(guile-user)> (timed-read d "out.bin" 20 43 20 44)
This still just dumps the floating point signal data to a file, rather that doing any demodulation, so the file size is very large, and I must feed it into GnuRadio. Yet, it is progress.
I need to go over the RX start/stop code again as I get an error if I try to start RX again after stopping it. I coded that part of the device management rather quickly so I am not surprised.
I started playing around with merging in FFT functionality. I added an
fft-512 procedure which does FFT on a 512 byte buffer using libfftwf. I think it works, but I haven’t added any procedures yet to do anything useful with
fft-512 so I don’t really know yet. I was going to code something which feeds data to GnuPlot for a spectrum analysis display, in the usual fashion like all the SDR software does:
I have been learning a lot lately about Fourier transform and DFT (Discrete Fourier Transform) and I think I have a mostly clear understanding of the basic math and concepts involved now. For fun, I did a DFT operation manually in Emacs Calc on a length 8 data sample, and the results came out making sense. This article is a nice introduction to the Fourier transform, though you need to have a good understanding of complex numbers to fully grasp the DFT equation:
3 thoughts on “HackRF Shell: Progress Update”
I remember the KJNP signal coming in really strong at your presentation yet it was weak during this study.
Was there a correlation?
At the presentation I was using GnuRadio which had the baseband filter bandwidth set. After I started using the baseband filter bandwidth option in hackrf-shell, then KJNP signal came in strong — 25 dB above the noise floor. I suspect then that when the baseband filter is not enabled, KJNP was coming in, but buried in noise.
That is great progress!