HP 33120A Function / Arbitrary Waveform Generator Review


While this is a discontinued unit, it can still bring a lot of value to a lab and it can be had for only a couple of hundred dollars, used. On top of that, its performance is still better than some similarly priced generators, that you can buy new from other manufacturers.
On the other side, it only has one channel and only goes up to 15 MHz, which might not be enough for everyone, so if you decide to go for it, you’ll probably do it taking other factors into account, like the THD (which is excellent), if you’re doing audio work.

Key Features & Specifications

  • 40 Msa/sec and 15 MHz bandwidth.
  • 50 mVpp to 10 Vpp in 50 Ohms load or 100 mVpp to 20 Vpp into a high impedance load.
  • 12-bit resolution.
  • 16 kilo points for arbitrary waveforms.
  • 10 µHz or 10 digits of frequency resolution.
  • < 0.04% THD from DC to 20 kHz.
  • AM, FM, FSK, Burst and Sweep modulation capability.


I’ve been using it quite a bit lately, but mainly just playing around and analyzing it and I have to say I’m not a fan of the user interface. It’s not bad and you can definitely get used to it, but you can tell the UI was built around the front panel and not the other way around.
When I first bought it, I thought there was no way to enter the frequency directly, but it turns out there is. All the buttons in the main section on the front panel also double as a numeric keypad (if you press the Enter Number button), which is obviously a good thing, because otherwise it would have been painful to use.
Aside from the number pad function, all the buttons have at least one alternate function, which also takes a bit of getting used to and can confuse you and make you enter the wrong values into the wrong settings, so make sure you pay attention at first, especially if you’re working with a sensitive DUT.
On the flip side, switching from one type of waveform to another, as well as the most common functions are one key press away.
The VFD is bright and nice, but the readability doesn’t compare with what you get on graphical display.
Another complaint I have, which I believe was a bad decision when designing the front panel, is the inability to turn the output on or off. It’s always on! That means that if you want to turn the output off, you have to unplug the cable - it’s a bit silly and I honestly don’t know why this is the case.
On the back of the unit we have a GPIB port, a serial port, modulation inputs and, optionally, the external reference input and internal reference output ports. The fact that the external reference port is optional is unfortunate, because if you don't have that option, you’re stuck with the stability of the internal oscillator.
The standard oscillator is pretty stable tho, once it reaches thermal stability. If there are no sudden temperature changes in the room and you let it heat up for a couple of hours, it seems to be drifting back and forth by only a couple of ppb (1 to 3).

Frequency Resolution

This is a minor UI annoyance, but an annoyance nonetheless and you'll see that these themes repeats itself. When setting frequency, you can either use the rotary encoder, or you can type it in, but the resolution you get, differs between the two input methods. When entering it via the rotary encoder, you can only modify the digits on the screen, and there are only 8 of them at a time, but if you type the frequency in, then you get 10 digits of resolution. This means that if you want to change the frequency in small increments of say... 10 μHz, then you’ll have to type the entire frequency, every time you want to make a small change to it. Sadly, this is not an uncommon scenario, so there’s a high chance that you’ll get frustrated by it at one point.

Amplitude Control and DC Offset

The amplitude goes from 50 mVpp to 10 Vpp in a 50 Ohms load or from 100 mVpp to 20 Vpp into a high impedance load. Unlike on the new models, you can’t set an arbitrary load impedance, so the only choices are 50 Ohms or High-Z.
An interesting thing to note is that the DC offset, is tightly connected to the set amplitude, in the sense that it has the following restriction:
|Voffset| + Vpp/2 <= Vmax   and   |Voffset| <= 2 x Vpp
This means that if you want a 0.2 Vpp sine at a DC offset of +2 V, you can’t have it. The DC offset for 0.2 Vpp waveform has to be between -0.4 V and +0.4 V.

Signal Fidelity

I think this is why people are still buying these waveform generators. Like most of the HP products, they were designed really well to the point that it’s hard to improve on them, even today. For example the harmonic distortion on the new Keysight waveform generators, is better, but not by much, while other manufacturers are still lagging behind this 15 years old technology.
I have measured the THD (Total Harmonic Distortion) at a couple of frequencies and it’s doing pretty well:
Frequency THD Harmonics (dBc)
10 kHz 0.057% -77  -65.5 -80.8 -78.7 -83
20 kHz 0.042% -72.3 -69.3 -83.3 -89.5 -90.5
100 kHz 0.134% -60 -61 -84.2 -87.0 -90.7
1 MHz 0.140% -59.6 -61.2 -82.3 -69.2 -91.2
10 MHz 0.336% -60.5 -50.0 -65.8 -68.8 -76.7
15 MHz 0.211% -56.8 -57.8 -61.7 -78.2 -73
I also made a couple of phase noise plots, for sinewaves, in which it shows great performance again:

-116 dBc phase noise @ 10 kHz offset on a 100 kHz carrier.

-118 dBc phase noise @ 10 kHz offset on a 1 MHz carrier.

-115 dBc phase noise @ 10 kHz offset on a 15 MHz carrier.
The square waves also looks ok, with the overshoot much under the specified value of 4%:

~18 ns rise time and < 1% overshoot.

Square wave 1 to 15 MHz.
The square wave looks good until little above 11 MHz and has very little overshoot.


In order to measure linearity, I used the frequency sweep function, going from 100 Hz to 15 MHz, with a set amplitude of 0 dBm. Its worse amplitude specification is of ±0.3 dB and real life measurements do get close to it, but they don't exceed it.

Arbitrary Waveforms:

This is a great feature to have on your bench and it basically transforms your function generator into something that can simulate failures, signal distortion and so on.
It comes with only a couple of arbitrary signals, but you can define new signals yourself and upload them to the device.
Unlike the new generators, from the 33600 line, it appears to have a fixed sampling clock, which means that, internally, instead of adjusting the sampling clock, in order to precisely fit the number of samples in the waveform, it simply outputs and skips data points based on, what I assume to be, a phase accumulator.

Sinc waveform @ 10 kHz.

Sinc waveform @ 1 MHz.

Closeup on the 1 MHz sinc waveform.
This can be both a feature and a nuisance. On one hand, it sometimes skips waveforms and at higher frequencies it gets extremely jittery, as you can see from the oscilloscope screenshots. On the other hand, instead of setting the sampling speed, you set the frequency of the custom waveform, which you can take as high as 5 MHz. At 40 MSps, that means 8 points per cycle, so your waveform is going to be extremely coarse, but that’s the trade off for higher frequency arbitrary waveforms. If it wouldn’t be able to skip data points, it would mean that the maximum frequency would be 40 MSps / nr_of_data_points.


This is a really nice mode, particularly useful when you want to isolate and analyze single waveforms going through a system, or when you need trigger events at specific intervals.
It allows you to set the burst duration in number of cycles, the burst rate (how often the burst gets generated) and the burst phase (compared to the trigger).
Additionally, you can have it automatically triggered, or gated using the input on the back.
Due to the UI, I found it very hard to make adjustments to any of the parameters. Each time you want to change something, you have to go into the menu (SHIFT + MENU), then you have to press down, in order to enter into the modulation menu (DOWN), then you have to scroll to the parameter you want to edit (ex: to Burst Phase), then you have to press (DOWN) again to select it, then you have to enter the number via the rotary encoder or the keypad and then you have to press ENTER, after which the change gets applied and you’ll end up back, outside of the menu tree. This means that you can’t make changes and see the results as you apply them by simply turning the rotary encoder for example. You have to go through these steps with each change you want to make.
Changing the burst phase.

Noise Waveform

The noise waveform, appears to have a single setting: the amplitude. On the newer, 33600 series, you can also control its bandwidth, which is very useful, if you want to insert it in RF ystems. Another difference is that the newer models also alow you to module the noise waveform. This one does not.
As you can tell from the spectrum plot, the noise distribution has a bit of a weird shape, but that’s probably due to the output filter.
When put on a power meter, as you would expect, the total power of the noise is what you set the output power to be.


All other functions work as you’d expect, hindered/helped in the same way by the UI.
The last two other things, that I think are worth mentioning, are the duty cycle, which can only go from 20% to 80% and the fact that the triangle wave doesn’t have a symmetry setting, so if you want anything other than an equilateral triangle, you’ll have to make your own arbitrary waveform.


All things considered, I think it’s a decent waveform generator, that’s only held back by its user interface.
Before buying one, you should probably consider newer models or different makes and see if those meet your performance requirements and also offer a friendlier UI.
comments powered by Disqus