Typically, signals are real valued. But the programs in this chapter are for complex-valued signals. In order to use these programs, copy the real-valued signal into a complex array, where the signal goes into the real part of the complex numbers; the imaginary parts are then automatically set to zero.

There is no universally correct choice
of **scale factor** in Fourier transform:
choice of scale is a matter of convenience.
Equations (8) and (9) mimic the *Z*-transform,
so their scaling factors are
convenient for the convolution theorem--that
a product in the frequency domain is a convolution in the time domain.
Obviously, the scaling factors of
equations (8) and (9)
will need to be interchanged for the
complementary theorem
that a convolution in the frequency domain
is a product in the time domain.
I like to use a scale factor that keeps the sums of squares
the same in the time domain as in the frequency domain.
Since I almost never need the scale factor,
it simplifies life to omit it from the subroutine argument list.
When a scaling program is desired,
we can use a simple one like `scale()` .
Complex-valued data can be scaled with `scale()`
merely by doubling the value of `n`.

subroutine scale( factor, n, data) integer i, n real factor, data(n) do i= 1, n data(i) = factor * data(i) return; end

12/26/2000