LPRF Spectrum Indicator


Part of my summer internship at Texas Instruments LPRF in 2009 was to develop a spectrum analyzer using the CC2511 and CC1111 as a low cost ($49 or $99 depending on what hardware is needed) alternative to the expensive professional spectrum analyzers out there. This resulted in the LPRF Spectrum Indicator, with the name Indicator chosen to emphasize the inaccuracy of the measurements, which you can find below. Although not perfect in any ways, this little tool can prove worthy for many RF developers out there.

For the CC2511it supports the entire 2.4 GHz ISM band and for the CC1111 it supports 877-973 MHz. The PC side was developed using Qt (http://qt.nokia.com/).

Here is a screenshot of the application:

Download the application here:

Remember to read the instructions in ReadMe.txt

To be able to run this you will need either a CC2511EMK or a CC1111EMK to run the application. You will also need a CC debugger or SmartRF04EB to program the spectrum indicator firmware onto the USB dongle.


The full source for the PC application can be found here (includes notes on how to get started and more documentation):

To compile this you will need Qt, QWT and Microsoft Visual C++ 2008 Express Edition:

Although I’m not considering a lot more development on this, questions, suggestions for improvements or general comments are more than welcome!
Want to develop this further? Feel free to post it here on the community. Known issues and improvements to be made are:

  • There seems to be an offset of 1-4 khz per channel, to the real frequency. Thus, a known peak at 2440 MHz will have an offset of around 150-500kHz when this accords to channel 150 (a little right of the center of the plot). This could be verified by applying a known signal then move the plot so that this peak is drawn at different positions in the plot. At the far left the frequency is correct.
    • Suggested solution:
      Find the connection, a mathematical expression of the offset, and compensate when filling the x-axis, GraphPlot::setTraceData().
  • Start Frequency - RF bandwidth - Channel Spacing
    There are only a discrete number of values valid for the above mutually dependent variables. When the user interacts through zooming, or direct control through the advanced menu, these values are set to the closest valid value in DataManagement. Currently there are internal function calls within DataManagement to keep dependencies valid, as well as signals sent back to the user through adjustments in GraphPlot. These internal calls and signals have a structure which should be improved. The adjustments finally applied might not always appear logical to the user. For example, centering on cursor, as well as zooming, does not always give the intuitive result.
    I've tried to encapsulate as much as possible, but might have ended up with a too complicated structure.
    • Suggested solution:
      Turn the requested change from user into one signal, with only one response. Or keep essential variables, such as Start frequency - End frequency - Channel spacing shared between GUI and DataManagement.
  • In TraceControl::MaxHold when zooming, the first set of samples is not captured by the break argument. This might be because the x-axis is altered, but not fed with new RSSI values. This causes an eventual peak to remain until it is no longer amongst the last TraceControl::m_nofMaxHoldSamples. You'll notice this when zooming on a peak. The problem is that this peak is no shown in the right place.
    • Suggested solution:
  • Only pdf is currently supported as an export format.
    • Suggested solution:
      Change the GraphPlot::export() to find the fileformat from the incoming file name. According to this, do the exporting, f.ex. use QSvgGenerator.
  • A curve's properties can not be changed after being chosen. That is, the properties set when adding a trace.
    • Suggested solution:
      Include a button calling the OptionsCurve dialog.
  • It should be automatically found which virtual serial port the CC2511 is located at.
    • Suggested solution:

Hope you like this.



Best regards,


 Helps us tracking and improving the quality of our support to the community:

if you were satisfied with the answer and of the support, could you please click on 'Verify this post'?