Here's a program for a Fourier analysis of multilevel periodic waveforms having
horizontal sections and vertical risers (*Fig.
1, a*).

Data entry to the program, FOURIER.BAS, consists of entering the starting
angle, ending angle, and the segment level between these two angles (*Fig.
1, b*). Data entry ends when a full cycle is covered (ending angle is
360°). Note that it's convenient to normalize the waveform to a
peak-to-peak value of 1.0, to aid in comparing harmonics.

The waveform can be expressed as (ignoring the dc component):

V_{n} (t) = a(n) × cos(2Πnf_{1}t) + b(n)
\[time sign\] sin(2\[PI sign\]nf_{1}t)

where f_{1} is the fundamental frequency. The phase angle of the harmonic
can be found from tan^{-1}(b(n)/a(n)).

The program (*Fig. 2*) calculates:

1. a(n) and b(n).

2. The peak magnitude of the harmonic \[ a(n)^{2} + b(n)^{2}\]^{0.5}

3. The level in decibels of the harmonic, relative to the level of the fundamental, for levels greater than -99.99 dB. If the level of a certain harmonic is smaller than -99.99 dB, the program skips that harmonic.

In the simple example given, all of the even harmonics are missing. In addition, the 3rd and 9th are down more than 99.99 dB relative to the fundamental.