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