Stand-Alone Transceiver App for the LimeSDR - Who's First..?



I followed your directions for installing LimeSuite and other dependencies for your application as you wrote them in your procedure. Compiled and installed the SDRAngel application and it compiled and installed fine - I can bring up the window. Before I did that I did an SopaySDRUtil --find to ensure that the system could find my LimeSDR and it did. So then I launched SDRAngel and it came up fine, but in the device list I could not find the LimeSDR. So then I grabbed one of my RTL-SDRs and attached it to the USB 3.0 connection and it could find that in the Device List and it also did a GREAT job of operating in FM, AM, and SSB. My RTL-SDR has a RF Upconverter in it that allows it to be used in the HF band and it even demodulated SSB fine. Here is a snapshot of it working in the AM mode receiving one of my local AM radio stations at 1540 kHz (with 120 MHz upconversion because of my HF Upconverter):

So if SoapySDRUtil can find my LimeSDR and I made sure all the dependencies worked, then why can’t SDRAngel find the LimeSDR? Again, all the procedural steps were followed (to the best of my knowledge) yet no LimeSDR found in the device list.

Please let me know what I may be doing wrong here - this is compiled on Ubuntu 16.04. Otherwise your application is GREAT for my RTL-SDR… :slight_smile:

73 de Marty, KN0CK


Hello Marty,

glad you like it and thanks for the screenshot :slight_smile: Since you can list the device with SopaySDRUtil that amost rules out the classical problem of udev rules. However to be 100% sure I’d try to use LimeUtil --find because the SDRangel plugin uses LimeSuite natively and so does LimeUtil. My second guess is that with the Qt plugin approach the compilation could run fine but still have unresolved dependencies that are supposed to be satisfied at run time. If this is the case then the plugin is not loaded and the corresponding device does not show up. Normally unresolved dependencies should be listed in the console messages when you start SDRangel. In any case if the LimeSDR plugins are loaded correctly they should appear in the list shown by Help->Loaded Plugins… There should be LimeSDR input and LimeSDR output rows in the list. If they don’t appear then we should chase what are the unresolved dependencies. LimeSuite itself needs sqlite3 so that might be the case that it is missing but it is just a guess.

Best regards and 73!


Hi @F4EXB, @martywittrock
I built it yesterday with no issues. It sees the LimeSDR and I can select it for TX and RX, but the highest I can tune is 3.8MHz. Is there a band button somewhere I am missing?
It looks great, BTW. Nicely laid out UI.
/ Gerry



GREAT WORK on getting SDRAngel working with the Lime…! I followed Edouard’s procedure (to the best of my knowledge) for both the LimeSuite dependencies and for the manner in compiling the SDRAngel app. I’m using Ubuntu 16.04 as the basis for my build. Can you document here the procedure you used to get yours to compile right? I just want to make sure I’m not losing anything with Edouard’s procedure, too. Anything you can provide will be greatly appreciated and also let me know if there were certain tests you did to ensure that the Lime dependencies and SDRAngel were lined up.

Thanks in advance, Gerry -

73 de Marty, KN0CK


Hi @martywittrock
Yes, for sure. When I get home I will dump the command history, but from what I remember I did the folllowing:

  1. added PPAs
  2. installed limesuite, liblimesuite-dev, limesuite-udev
  3. added myself to ‘plugdev’ group
  4. cloned SDRAngel repo
  5. did the usual mkdir build && cd build && cmake …/ && make
    cmake discovered the limesuite.h and files itself, and build proceeded as per normal.
    it’s worth stating that I had previously installed some of the dependencies, such as qt-dev

/ Gerry



Gerry - I’m following you on most of what you have written, but I’m not sure what you mean by ‘added myself to ‘plugdev’ group’. Can you expand on that a bit more? I think I did all the steps you’ve done with the exception of that question I’m asking.

Lemme know -

73 de Marty, KN0CK


G’day Marty,

SDRAngel builds and runs fine on my 64bit Ubuntu 16.04LTS laptop. All dependencies were already in place due to prior requirements and this is what I did:

git clone
cd sdrangel
mkdir build
cd build
cmake -DLIMESUITE_INCLUDE_DIR=/usr/include/lime/ -DLIMESUITE_LIBRARY=/usr/lib/x86_64-linux-gnu/ …

Thats all.

73, Berndt


The udev rules specify the USB device to be created with user root and group plugdev. By default, standard users aren’t members of this group, so I just did ‘usermod -a -G plugdev gerryk’, and logged out and back in.


Maybe you figured it out already but the frequency dials are in kHz units so the displayed 3.800.000 actually means 3.8 GHz which is LimeSDR limit. The main LO goes down to 30 MHz so to get below that limit down to the 100 kHz RF limit you will have to use the NCO.

Best regards and 73!


Forgot about the plugdev thing… Yes a few devices are created under the plugdev group so your user needs to be a member of this group. Similar cases are HackRF and BladeRF.

Best regards and 73!




Yep - figured that out already on the frequency entry, but like the demod frequency skew for any demod. Also, how does one select the NCO for HF? Please let us know.

73 de Marty, KN0CK


Did you get it built @martywittrock
The command history I used is here:

~/D/r/build ❯❯❯ git clone
~/D/r/build ❯❯❯ sudo apt-get install cmake g++ pkg-config libfftw3-dev libqt5multimedia5-plugins qtmultimedia5-dev qttools5-dev qttools5-dev-tools libqt5opengl5-dev qtbase5-dev libusb-1.0 librtlsdr-dev libboost-all-dev libasound2-dev pulseaudio liblz4-dev libnanomsg-dev libopencv-dev libsqlite3-dev
~/D/r/build ❯❯❯ sudo apt install liblimesuite-dev                                                                                          
~/D/r/build ❯❯❯ mkdir build && cd build
~/D/r/build ❯❯❯ cmake ..
~/D/r/build ❯❯❯ make


Hello Marty,

GUI details are here: This is for the input plugin but the output works similarly.

Basically you engage the NCO with button (3) . The center frequency after mixing (before on Tx) is arranged with the thumb-wheel dial (5). The possible span depends on the sample rate set with (10) so that the maximum span around the center LO frequency set with the big dial (1) is equal to the sample rate (i.e. +/- half the sample rate). You can use the FIR filter with button (12) and dial (13) to filter around the resulting frequency (5). In fact this is designed according to LMS7002M internals. You can IF shift from any LO frequency this way thus rejecting the remaining DC outside passband. This is useful not only for HF and since this is hardware there is no processing cost on the host PC side. The Lime clearly stands out from its peers on this point. The hardware decimation/interpolation (set with combo #8) is also nice.

Best regards and 73!


As an update on the SoDaRadio progress…

RX still works. There are (software) clipleads still in the RX support code, and I don’t have RX antenna selection setup yet, but the stream control, gain, and frequency control all work just fine.

TX is still a problem. I can now transmit CW reliably, but there are issues with SoapyLMS7::readStreamStatus not finding the END_BURST marker. I’ve filed an “issue” on that. The symptom is that _BT or _SK (which should terminate TX mode) are truncated to a little chirp and the TX turns off.

I suspect the same issue is in the way of the SSB path. I can send an SSB signal but it is delayed by almost 18 seconds. This is what I’d expect if all the TX buffers were full before the first audio modulation was applied and sent to the hardware. Fixing this problem will wait until I can get reliable stream status.

The RX came together very quickly. TX is always hard, for any new platform. I’ve got about 30+ hours into that part of the venture so far. If we get the readStreamStatus thing fixed, I think it will only take a few more hours to get to the point where it is worth trying.

For the truly adventuresome, the SoDaRadio code is in the LimePort2 branch of the repo. No claims are made as to usability, function, safety, courtesy, kindness, obedience, cheerfulness, thrift, bravery, cleanliness, or reverence. ymmv.



Keep at it…Every software package has its gives and takes and I’m certainly waiting for the time when yours is ready so I can check it out - - Again, keep at it - the audience is LARGE for a transceiver app for the LimeSDR.

73 de Marty, KN0CK



Thanks for writing back with more into - that will be helpful when I have time tomorrow to play with SDRAngel and the LimeSDR since I performed the change that Gerry recommended and now I have the LimeSDR receiving and have transmit capability. I went searching for transmit with my Yaesu FT-757 at 144.000 MHz in NBFM mode and was not able to hear the transmit signal out of the Lime. I have modulation because I have it selected correctly, see it in the modulation meter on the NBFM plug-in, and see it in the transmit waterfall…But not hearing anything when I’m tuned at 144.000 MHz on my Yaesu and have the Lime tuned at 144000 in the SDRAngel app. I tried both the TX1-L and TX1-H ports with an antenna and did not hear anything across the room on my Yaesu. Can you advise which port is active in transmit and if I’m missing something (like a transmit gain control?).

Otherwise, the app is beautiful on receive - great job on that.

Let us all know on the above at your soonest - 73 de Marty, KN0CK



Did the udev rules on the plugdev and it worked like a champ - I’m on transmit now, but still searching for my signal at 144.000 MHz. Let me know if you’re transmitting and hearing something from your Lime.

73 de Marty, KN0CK



I don’t know if that’s related because I use LimeSuite directly but I had all sorts of problems with Tx until I set the timeout on the send stream call to 1 second. Last parameter is the timeout in microseconds:

res = LMS_SendStream(m_stream, (void *) m_buf, LIMESDROUTPUT_BLOCKSIZE, &metadata, 1000000);

It appears that if it is too short then it does’t wait until the sending is complete.

Best regards,


Hi Marty,

first you need to add a sink device with the Device->Add sink device in the main window top bar menu. This will open a new set of tabs tagged “T1”.

Then in the Sampling devices control section you have to select and validate (with the check button) the LimeSDR. Then from the combo just below you need select and add a modulator with the “+” button. Eventually you fire everything up with the “Play” button in the top left of the Sampling devices section. You should see a peak centered in the main spectrum display.

This should send a carrier (except in SSB). On AM, FM and WFM you can send a tone with the button with the carrier icon just below the “Vol”. Details can be found in each modulator plugin readme:

Best regards,


I did try a build , but it failed. I will try again this evening. I think my Soapy configuration was a bit messy.