Get your fresh Google+ invites here. (Is there any shortage of these? I managed to give away one single invite when I posted the link on my facebook wall…)

# Assessing the Rigol DS1052E digital oscilloscope

I recently bought a digital storage oscilloscope (DSO) from DealExtreme for the ridiculously low price of \$360 (including shipping!). The Rigol DS1052E is widely known among hobbyists as delivering very good value-for-money – not hard to understand when you compare the price to the basic specifications: 2 channels, 1GSa/s, 50MHz bandwidth. USB for saving screenshots, raw data (CSV), printing and computer control. Nice selection of triggers, filters, zoom and so on. Many time and voltage measurements available. 1Mpts memory depth. FFT and more. Good build quality and feel. And what’s even better: the scope can be modified by software to provide a claimed 100MHz bandwidth. For me, this is a tremendous leap up from my old analogue scope, especially in terms of functionality. But what about the performance? And will the 100MHz modification deliver?

After performing the reasonably easy modification to up the BW to 100MHz, I decided to test one of the most basic properties of an oscilloscope; its bandwidth. Basically how fast a signal you can measure. In practice you need some overhead to be able to see distortions, noise and so on. For digital signals, you need a lot of overhead. A perfect square wave, as in a (theoretically perfect) digital signal, is composed of an infinite number of harmonic sine waves. A suggested rule-of-thumb is to use a BW five times the fastest clock rate, or in other words, enough bandwidth to see the 5th harmonic. A rule-of-thumb for analogue signals is to use a scope with 3 times the bandwidth of the signal. Depending on exactly what you are using the measurements for, and what kind of accuracy you need, the required bandwidth can be both lower or higher than this. There is a really nice paper by Agilent called Evaluating Oscilloscope Bandwidths for Your Application. It explains the rules of thumb mentioned above as well as how you can more scientifically evaluate the necessary bandwidth based on the desired accuracy.

Above is a sweep of an 1GHz BW Agilent scope where a sine-wave signal generator is set to sweep across a large frequency span in a short time. The timebase and triggering on the scope is adjusted so that the complete span is shown in one scope sweep. Pretty neat.

I tried doing the same on my scope, but it looks like the sampling rate at large timebases is slowed down and the measurements didn’t make any sense. Instead I decided to rely on the built-in voltage measurements and manually step the generator through the frequency range until the voltage dropped by 3dB. The measurement functionality on the scope is a little fiddly and changes a bit by varying the timebase. I decided to give the scope the benefit of the doubt and used a timebase displaying more than 10 cycles of the wave as this seemed to produce the most consistent results. (1-5MHz: 500ns, 5-10MHz: 200ns, 10-20MHz: 100ns, 20-50MHz: 50ns, 50-100MHz: 20ns, 100-175MHz: 10ns).

The generator I borrowed for this experiment is specified with an accuracy of +/-1dB and a flatness across its frequency range of 0.3dB at 0dBm output. I connected it to the scope through a short, good quality coax cable, a T-adapter and a 50ohm terminator (as the scope only has a 1Mohm input). I set the output level to 0dBm.

$$0dBm = 224mV_\mathrm{RMS}$$

At 1MHz, it gave a result of 218mV on the scope which I suppose was a combination of generator inaccuracy, cable/connector loss and scope measurement inaccuracy. The cable loss should however be pretty flat across the bandwidth (estimated <0.1dB at 150MHz).

$$218mV_\mathrm{RMS} – 3dB = 154mV_\mathrm{RMS}$$

As you can see from the screenshots above, there is a bit of distortion to the sine wave at 120MHz (the frequency counter shown is a little bit off). It is almost like the signal is a bit amplitude modulated.

I went on to manually sweep the signal generator from 1MHz to 175MHz and record the readings off the scope. All this hard work resulted in the graph below. -3dB at 127MHz and -2dB attenuation at 100MHz. Not too bad! Although the flatness could have been much better over the lower frequencies, I guess the DS1052E does deliver what it promises – and even more with the software modification.

The complete set of measurements and code (Octave/MATLAB and gnuplot) for generating the graph are available on github: ds1052e-measurements.

# Photos from Korea

I visited Ulsan, Busan and Okpo, on Geoje Island, in South-Korea for 3 weeks in April. Below are some of my photos from the trip. Enjoy!

# WordPress plugins used here

I thought I would quickly highlight a few WordPress plugins I think are nice and that are in use here. First of all, you might have noticed that the text is justified. Well, not only that, but hyphens are used to break up words and split them on multiple lines. This all makes the lines even and very fine looking. What’s interesting, though, is that this fancy hyphenation algorithm is implemented client-side through a JavaScript library called Hyphenator.js. This is very easy to implement in a WordPress site by including the Hyphenator plugin and setting the text-align property to justify in the CSS.

On the subject of typography, I’ve also added a plugin for producing stunningly beautiful mathematical expressions. MathJax is a really impressive JavaScript library that interprets TeX and LaTeX (or MathML) syntax for mathematical formulas and outputs code that successfully degrades depending on your browser’s capabilities. MatJax comes in a nice plugin called MatJax-LaTeX.

$$\frac{4}{\pi}\left (\sin(\pi ft)+{1\over3}\sin(3\pi ft)+{1\over5}\sin(5\pi ft) + \cdots\right )$$

Lastly, I’m using the SyntaxHighlighter Evolved plugin which employs Alex Gorbatchev’s SyntaxHighlighter to produce nice looking syntax highlighted code snippets. Behold the beauty of Duff’s device:

 register n = (count + 7) / 8;      /* count > 0 assumed */

switch (count % 8)
{
case 0:        do {  *to = *from++;
case 7:              *to = *from++;
case 6:              *to = *from++;
case 5:              *to = *from++;
case 4:              *to = *from++;
case 3:              *to = *from++;
case 2:              *to = *from++;
case 1:              *to = *from++;
} while (--n > 0);
}


# Relaunch!

I’ve upgraded the WordPress version, changed to a simpler domain name, updated the layout, added some content, removed old stuff. Welcome back!