bladeRF-fsk(1)
π NAME π
bladeRF-fsk β the command line fsk application, bestie! That's bladeRF-fsk(1) if you're being formal about it (section 1, we stan a numbered section), and it's a Nuand joint. π«Ά
β¨ DESCRIPTION β¨
Okay so, the bladeRF-fsk project is a simple frequency shift keying (FSK) based software modem that's implemented entirely on the host PC side, in C code. No cap. π§
It uses libbladeRF to transmit/receive samples with a bladeRF device. And here's the cute part: a USB 3.0 port is not required when using this modem. So your sad lil USB 2.0 port can come too. π
The project also contains a MATLAB/Octave simulation/implementation of the physical layer (PHY) portion of the modem. Fancy. Iconic. π
The top level bladeRF-fsk C program demonstrates the functionality of the modem in a simple bladeRF-to-bladeRF data transfer program. It can transmit/receive both:
- text β like a chat program π¬
- binary files β like a file transfer program π
β¦with a raw link rate of 250 kbps. To properly demonstrate the program, two instances of the program must be run with two separate bladeRF devices. And no, bestie, loopback is not supported. π
π¦ The modulation tea π¦
The modem modulates with continuous-phase frequency shift keying (CPFSK). Baseband I/Q CPFSK samples are sent to the bladeRF device, inside which they are converted from digital to analog, mixed with quadrature RF carriers, and transmitted through the air. βοΈβ¨ Received signals get mixed with quadrature RF carriers to downconvert to baseband I/Q, sampled with an ADC, and sent to the host PC program over the USB connection.
π₯ What the layers are giving π₯
The physical layer code features:
- an FIR low-pass filter
- power normalization
- preamble correlation for signal detection
- CPFSK modulation/demodulation
- scrambling
The link layer code features:
- framing
- error detection via CRC32 checksums
- guaranteed delivery of frames via acknowledgements and retransmissions
β οΈ Real talk though: this project is meant to be an experimental example and should not be treated as a rigorous modem. It's giving "fun little demo", not "certified telecom equipment". Adjust your expectations accordingly, bestie. π
π EXAMPLES π
To run the top-level bladeRF-fsk program with defaults, type into a terminal:
bladeRF-fsk
To see a list of configuration options and how to set them, type:
bladeRF-fsk -h
π NOTE: On Windows 10, if you are running two instances of the program on the same PC, you must specify the bladeRF serial number with the-doption, due to Issue #484 (https://github.com/Nuand/bladeRF/issues/484). Example:
bladeRF-fsk -d *:serial=4e
π Defaults & deets π
By default the program:
- uses the first available bladeRF device
- gets TX input from
stdin - writes RX output to
stdout - uses a default set of transmit/receive frequencies and gains
Gains may need to be tweaked for a good connection with another bladeRF running bladeRF-fsk. π To transfer files, use the -i and -o options. If using stdin for tx data, the program will transmit data line-by-line.
The program runs until it gets an EOF in its TX input. That's the vibe check that ends the party. π
π Example: Transferring Files π
- Be sure two bladeRF devices are plugged into your PC (or two separate PCs) with TX and RX antennas attached. π‘π‘
- Run bladeRF-fsk on one of the devices (receiver), with the output RX file specified:
bladeRF-fsk -r 904M -t 924M -o rx.jpg
- Run bladeRF-fsk on the other device (sender), with opposite frequencies and the input TX file specified:
bladeRF-fsk -r 924M -t 904M -i puppy.jpg
- The file will begin transferring, and progress will be printed in the terminal for the sending device. πΆβ‘οΈβ¨
- Once the transmission is complete, press
[CTRL-D]on Linux/OSX or[CTRL-Z then ENTER]on Windows to stop the program on the receiving end.
π If the sending device does not get any response from the receiving device, it will quit the program. Try increasing the gains and run it again. (Not me, not the gains β the gains. π)
π KNOWN LIMITATIONS π
- The program does not currently support the use of an XB-200 transverter expansion board to transmit/receive at frequencies below
300MHz. In order to add XB-200 support, a new configuration option as well as functions from the "Expansion boards" section of thelibbladeRFAPI would need to be added to the source code. Soβ¦ PRs welcome, bestie? π - The program is currently unable to perform two file transfers in both directions simultaneously. And like, there are two reasons why:
- Reason #1: The program runs until it gets an EOF in its TX input, meaning whichever side finishes transmitting its file first will quit and stop receiving. An EOF bit would need to be added to the link layer packet format in order to stop this behavior.
- Reason #2: The program doesn't seem to perform well during these simultaneous file transfers, and usually loses connection. Further investigation is required to debug this. π΅οΈβοΈπ
π SEE ALSO π
And that's the whole page, babes! πΈ This manual came to you from BLADERF, version 2017.07, dated 2017.07 β and yeah, it's the bladeRF-fsk(1) page, mwah. π Go forth and fsk responsibly. π¦π
π¦ where this page comes from
- debian bookworm: bladerf 0.2022.11-1
- debian trixie: bladerf 0.2024.05-1
- ubuntu jammy: bladerf 0.2021.10-2
- ubuntu noble: bladerf 0.2023.02-4build1
- ubuntu questing: bladerf 0.2024.05-1
- ubuntu resolute: bladerf 0.2024.05-1build1
- ubuntu stonking: bladerf 0.2025.10-2
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms