Hey everyone, its been a long time, hasnt it? Anyways, this blog will be about my intial experience with the hackrf one. So, first time when I saw it, I was suprised how compact it actually was. This is because I have always measured the size from videos by the antenna plugs on the sides, but I figured they were the standard antenna sizes for TV's and such, therefore I thought the hackrf was kinda giant. Might not suprise you that I was suprised, but positively. When I started playing with it, I was easily able to make a simple FM recieve and listen to some local radio. After I.. i guess enjoyed that, I went to try to do actual stuff with the thing. First, I downloaded GnuRadio, set it up(except for the Audio Sink, which didn't work because I am still using the legacy audio driver on my arch install), and got to creating some cool flowgraphs. I was able to control my RC car, aswell as recieve some 2.4GHz Wifi signals, and even some TV signals. I was also able to create my own FM radio station, with rickroll playing on repeat(and it actually worked quite well). But then, I just got an idea, to make a C++ code for the hackrf, and even tho that turned out to be quite a challenge, but I finally figured it out and its amazing! There is so much you can learn with an SDR, and it doesn't even have to be as powerful as the hackrf. So, how did I programm the hackrf using C++? Well, first I used libhackrf to control the hackrf, and then fftw3 to display the waves of the hacrkf as frequency band, letme show you. First, I had to configure and start the recieve on the hackrf, like this: hackrf_init(); hackrf_open(&dev); hackrf_set_freq(dev, freq); // Set frequency hackrf_set_sample_rate(dev, samp_rate); // Set sample rate(preety much like FPS in a game) hackrf_start_rx(dev, callback, nullptr); // Start the calls on callback As soon as you call start_rx function, calls start happening on the rx callback, with the incoming data, where I processed it into frequency base data, like this: ftw_plan plan = fftw_plan_dft_1d(len, in, out, FFTW_FORWARD, FFTW_ESTIMATE); fftw_execute(plan); fftw_destroy_plan(plan); fftw_cleanup(); The problem now is, the data is in something called complex type. Its a thing in SDR's where you commonly have real, and imaginary segment of the number, often describing the amount of real value and of the value i(which is the inexsting value which satisfies sqrt(i) = -1), but in frequency base data, it simply represents the frequencies below the center frequency(so if the center frequency is 100Mhz, 99Mhz would be stored in the imaginary part of data[1000_000].imag), and real segment represents above the center frequency. Therefore, I just put it behind eachother, and printed it on the screen! And thats, how I got a working hackrf c++ reciever, have a great day!