Daqarta
Data AcQuisition And Real-Time Analysis
Scope - Spectrum - Spectrogram - Signal Generator
Software for Windows
The following is from the Daqarta Help system:

# Aliasing Demonstration

You can demonstrate the effects of sampled data aliasing using the Daqarta Generator. First Load the AliasDemo.GEN setup, toggle Spectrum display on, X-Axis eXpand off (if on), and click the Generator button to start the demo. Hit the F9 key to open the Volume/dB Slider Dialog dialog and adjust for a comfortable listening level.

This demo uses Arb_Sine4Square.DAT (created using the Sine Square Series code in the Arb_From_Equation macro mini-app) as an Arb wave generating the first 4 terms of a square wave... the fundamental plus the 3rd, 5th, and 7th harmonics. (See Making Waves via Sine Wave Synthesis for additional info.)

Over a 10 second interval, the fundamental sweeps from a Start frequency of 110 Hz to an End at 20000 Hz, then repeats. This means the 3rd harmonic should go from 330 to 60000, the 5th from 550 to 100000, and the 7th from 770 to 140000 Hz. But at the default sample rate of 48000 Hz the maximum possible output frequency is 24000 Hz, the Nyquist frequency; any frequencies beyond that will alias down to the 24000 Hz range.

As you watch and listen, you'll see the harmonics one-by-one sweep up to 24 kHz and "bounce off", heading back down toward 0. As each gets close to zero you'll hear a descending tone, which bounces off 0 and then rises again with an "oo-ee" sound, then the next-lower harmonic follows in its footsteps. (You can tell which harmonic is which because the higher harmonics have lower amplitudes.)

The higher harmonics move faster, so by the time the fundamental reaches 6857 Hz the 7th has bounced off 24 kHz and is just hitting 0, the alias of 48 kHz (7 * 6857). The 5th is supposed to be at 34286 Hz, but it is aliased to 13714 Hz (48000 - 34286) and going down, while the 3rd is at 20571 Hz and still going up. Thus you see the higher harmonics outrun the lower; by the time the fundamental hits 16000, the 3rd (which should be 3 * 16000 or 48000) has bounced off 24000 and is just hitting 0, while the 7th (which should be 7 * 16000 or 112000) has bounced off 24000, 0 (48000), 24000 again (72000), zero again (96000), and is just passing 16000 on its way up for the 3rd time.

Although this demonstration shows output aliasing, the same thing would happen to an input signal if not for the sound card's built-in anti-alias filter; a pure tone input of (say) 25000 Hz would become 48000 - 25000 = 23000 Hz, while a tone at 47000 Hz would become 1000 Hz. Note that there would be no way to tell from the sampled signal that the aliasing had happened; the result would look exactly the same as if the original really had been two tones at 23000 and 1000 Hz.

GO: