bladeRF enclosure – made from laser cut acrylic

I made an enclosure for my bladeRF board from laser-cut acrylic (also known as “Perspex”). This is the first time I experimented with custom laser cutting. The laser cutting service is provided by SeeedStudio. I’m very pleased with the result, see photos below.

bladeRF acrylic enclosure

bladeRF acrylic enclosure

The acrylic used is 2.55 mm thick. The PCB is mounted to the bottom plate using eight M2.5 hex spacers. The top plate and the bottom plate are held together by four M4 hex posts.

Laser-cut acrylic is good for making a prototype enclosure. It is quick and easy to design. It requires no effort in producing them. It also has a nice distinctive look.

ViewRF software – RTL-SDR Spectrum Analyzer for BeagleBone Black

In my previous blog entry I demonstrated my RTL-SDR based spectrum analyzer running on the BeagleBone Black (BBB) with a 7-inch touchscreen LCD.

In this entry I’ve provided instructions on how you can run this software on your own BeagleBone. I’ve released the software – ViewRF – under the GPL license. You can download the source code hosted on GitHub.

The hardware you need (other than the BeagleBone itself) is the RTL2832U based DVB-T (digital TV) USB dongle. See RTL-SDR wiki for a list of supported hardware. I’ve tested the software with dongles based on the Elonics E4000 tuner and also the Rafael Micro R820T tuner. These dongles are available from various online shops.

The software has been designed to run on a 800×480 resolution screen, ie the resolution of the 7 inch LCD cape.


  1. Download and unzip (using 7-zip) this microSD image:
    Angstrom-Cloud9-IDE-GNOME-eglibc-ipk-v2012.12-beaglebone-2013.06.20.img.xz. Then copy this unzipped image using Win32 Disk Imager to a microSD card.
  2. Insert the microSD card to your BBB and power it on.
  3. After you are logged in, open a terminal, then disable X Windows autostart using the command:
    systemctl disable gdm
  4. Reboot:
    /sbin/shutdown -r now
  5. At the console, login as root, then calibrate the touchscreen
  6. Install these Angstrom packages:
    opkg update
    opkg install qt4-embedded --force-depends
    opkg install libqtsvge-dev --force-depends
    opkg install libqtguie-dev --force-depends
    opkg install qt4-embedded-dev --force-depends
  7. Set the following environment variables:
    export OE_QMAKE_CXX=/usr/bin/gcc
    export OE_QMAKE_CXX=/usr/bin/g++
    export OE_QMAKE_LINK=/usr/bin/gcc
    export OE_QMAKE_INCDIR_QT=/usr/include/qtopia
    export OE_QMAKE_MOC=/usr/bin/moc
  8. Download, compile and install QWT:
    tar -xjvf qwt-6.1.0.tar.bz2
    cd qwt-6.1.0

    Edit qwtconfig.pri, remove QwtOpenGL, QwtDesigner
    Edit ./src/, change TARGET to:
    TARGET = $$qwtLibraryTarget(qwt$$QT_LIBINFIX)
    Continue with the compilation process:
    make install
  9. Download, compile and install RTL-SDR library:
    git clone git://
    cd rtl-sdr
    autoreconf -i
    ./configure --enable-driver-detach
    make install
    make install-udev-rules
  10. Edit /etc/profile, add the line:
    export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/qwt-6.1.0/lib
  11. Edit /etc/profile.d/, if using touchscreen add the line:
    export QWS_MOUSE_PROTO=LinuxInput:/dev/input/touchscreen0
    or if using a mouse, add the line:
    export QWS_MOUSE_PROTO=MouseMan:/dev/psaux
    Logout, then log back in again.
  12. Download and run ViewRF software
    git clone git://
    cd ViewRF
  13. To run the pre-built binary (don’t run the git checkout command if you are building from source)
    git checkout 9b4d425331
    ./ViewRF -qws

I hope this software is useful to you. Let me know what you do with it. Feel free to donate :), link on the sidebar.

Demonstration of my Spectrum Analyzer project

A demonstration of my Spectrum Analyzer project built using the Beaglebone Black and a USB DVB-T digital television receiver. The receiver is based on Realtek RTL2832U accessed using RTL-SDR library. The demonstration shows the RF spectrum of various sources.

If you are interested in this project, I’ll be releasing the application and source code in GitHub so you can build your own. Probably in a month or two, or sooner, or later.
You can now run this software – ViewRF – on your own hardware. See

Electronics pliers and side cutters


Small precision pliers and side cutters are essential for electronics work. I’ve owned and used the pliers and cutter pictured above for a few months now. I found them to be really good.

The cutter is a Knipex 77 32 115 ESD, and the pliers are CK Tools 3772-1D-120. Both feel really good in the hand, have nice spring, top quality construction, have ESD handles and they both use the highly durable box joint construction.

I chose the version of pliers with serrated jaws as they give better grip comapred to the smooth one.

The cutter is rated for cutting copper wire of diameter 0.3 to 1.3 mm.

BeagleBone Black (BBB)

BeagleBone Black

This is my new BeagleBone Black (BBB). It is an ultra low cost ($45) ARM computer that readily runs Operating Systems such as Linux or Android. It is based on Texas Instrument Sitara Cortex A8 1 GHz System-on-Chip. I won’t attempt to describe the board in detail as there are already many good descriptions on the Internet.

This board is often compared to the Raspberry PI (RPI). This site has good comparison: . The two boards are similar in many way, but there are differences. The RPI is better suited for video playback, and the BBB is better suited for hardware development or hacking.

This BBB has much potential. With a microcontroller (eg. PIC or AVR or Cortex Mx), it is a lot of work to implement high-level functions such as tcp/ip, graphics, file-systems, threading, webservers, etc. There are libraries available, but are usually costly and feature limited. High-level libraries are available for the BBB for free as part of the Linux operating system.

With computers running desktop operating systems, interface to hardware peripheral is usually limited to USB or RS232. The latency of such interface is usually high and not guaranteed. I’m hopeful that the BBB can overcome this limitation. The Sitara System-on-Chip contains two Programmable Real-time Units (PRU). A PRU is a separate 200 MHz CPU core that is meant to implement “soft” peripherals, peripherals with tight real-time constraint.

Frequency calibration of my Rubidium Frequency Standard

In my last entry I compared the frequencies of my two 10 MHz frequency references. One is from FEI FE-5680A Rubidium Frequency Standard (RFS) and the other one is from Trimble Thunderbolt GPS Disciplined Oscillator (GPSDO).

The frequency accuracy of RFS drifts over time. The manufacturer specifies drift of less than 2×10-9 per year, which for 10 MHz reference is 0.02 Hz . I don’t understand the drift mechanism, but in any case the frequency offset of this RFS needs to be measured and corrected. (Why? because I could.)

The frequency accuracy of GPSDO, on the other hand, does not drift with time. This is because the guys at the U.S. Naval Observatory (USNO) continuously monitor and correct the clocks in their GPS satellites to track UTC(USNO). The UTC(USNO) in turns tracks the Coordinated Universal Time (UTC) time maintained by BIPM in Paris.

In my last entry, the way I compared the two frequencies was by comparing the phase of the two waveforms on an oscilloscope. In that short time comparison, the two frequencies were virtually identical. The two waveforms were virtually stationary with respect to each other. In order to measure the difference between these two nearly identical frequencies, I need to track the phase difference over a much longer period of time. Here is the block diagram of the circuit that helps me do this:


For convenience, both 10 MHz references were first converted to 1 pulse-per-second (PPS) signals. One PPS drives the “start” signal of a Time Interval Counter (TIC) and the other PPS drives the “stop” signal of the same TIC. The TIC measures the time interval between the “start” and the “stop” signal. The TIC is build using a digital counter clocked at 50 MHz which gives 20 ns resolution. The interval values were then sent to a PC for data-logging. And here is the result:

The top graph shows the time interval measured. The horizontal axis is the elapsed time. Each sample point correspond to 1 second. Over a period of 8.3 hours, the PPS signal of the RFS drifted by 320 ns. This drift corresponds to an error of 1.1×10-11 or 0.00011 Hz.

The bottom graph plots the self-monitoring performance of the GPSDO. It shows that the GPSDO is functioning correctly during the duration of the experiment.

The frequency error of 0.00011 Hz is pretty impressive. This RFS was calibrated about a month ago. This hasn’t always been the case. When I first acquire the RFS, its frequency error was 0.072 Hz. It wasn’t bad, it was good, but it is impressive now :)

Next: improve the resolution of my counter. Short of buying Stanford Research SR620 counter, I’m planning to add a linear interpolator to my digital counter. Basically it will use the rise time of an RC circuit to measure time in-between the counter oscillator “ticks”.

Next: Understand time stablitity measurement, also known as Allan Deviation.

Rubidium Frequency Standard vs GPS Disciplined Oscillator

Here is a quick frequency comparison between my atomic clock against my GPS disciplined oscillator (GPSDO).

I am using Trimble Thunderbolt as my reference GPSDO. GPSDO is basically an ovenized crystal that is steered/disciplined to GPS time. The GPS time itself is steered to UTC(USNO). In short, GPSDO produces accurate frequency reference with zero long term frequency drift.

The video below shows that the 10 MHz frequency signal from the Rubidium Frequency Standard is virtually identical to the GPSDO signal.

Later I will perform a more in-depth comparison between the two clocks.

Atomic Clock

Here is my new Rubidium Frequency Standard. It’s an atomic clock! It has a crystal oscillator disciplined to Rubidium-87 hyperfine transition.

Rubidium Frequency Standard - Atomic Clock

It has an impressive specification:

Drift 2×10-9/year
Allan Deviation 1.4×10-11 /√ τ (1s ≤ τ ≤ 100s)

I do not (yet) have any means for verifying its stability and accuracy. A quick test with my frequency meter suggests that it is working correctly. However this test does not tell me much as this frequency standard stability is many order of magnitude better than my frequency meter. I am planning to get a GPS disciplined oscillator for performance comparison.