1.3. Mathematical Representation of Digital Frequencies
The notation in Equation 1.4 gives us a valid method to represent digital frequencies using a pencil and paper, but it doesn’t help us when it comes to the generation of a digital sinusoidal waveform in hardware or software. In Equation 1.4, we explicitly included the sample rate represented by the term fS. This is fine for mathematical computations on paper but the sample rate is a fixed entity that is already implicit in the operation of the digital hardware. It does not make sense to include the fS term in frequency synthesis because it is already present due to the fact that each digital computation takes place at the sample rate.
In addition, Equation 1.4 provides us with a single value for any particular frequency—something that we can write down on paper like the value 16 Hz or 48 Hz. This is not appropriate for the actual synthesis of a complete period of a sinusoidal frequency in hardware. In hardware or software, we need to generate all N samples of a sinusoid at the sample rate fS. To do that, we need to take into account the sample index n of the generated sinusoid, and we need to normalize the sample frequency to 1. We normalize the frequency by dividing the frequency expression by fS. In doing so, we can rewrite Equation 1.4 to include these changes and produce
In Equation 1.5 we have normalized the sample frequency to 1. The normalized frequency of a digital waveform is usually expressed as a fraction given by k/N. To convert a normalized frequency back to an unnormalized frequency, we simply multiply by the sample rate, or
Remember the sample rate is implicit in a hardware or software implementation. It is the rate at which the computations are performed (i.e., the rate at which the phasor advances between black dots on the unit circle).
For example, if our sample frequency fS = 256 KHz, k = 16, and N = 128, then the normalized frequency would be expressed as follows: fK = k/N = 16/128 = 0.125. The actual frequency in Hz can be determined by multiplying the fraction k/N by the actual sample frequency fS or
The function of the sample index n in Equation 1.5 is to index successive samples and to advance the phasor around the unit circle by acting as an incrementing multiplier to the fixed value k/N. The term nk/N can be thought of as an infinite series given by
The correct way to generate a digital sinusoid waveform of unity magnitude and normalized frequency k/N is given by
It is important to remember that the term is a radian chunk. The term is a k multiple of a radian chunk. Since the sample rate is implicit to the hardware and since we are dealing with normalized values of frequency, we can now drop the index notation nT as illustrated in Figure 1.1 and simply refer to the index as n as we did in Equation 1.5 and Equation 1.6. The phasor C(n) will rotate around the unit circle at the sample clock rate in increments of 2π k/N radian chunks. This means that the phasor sine and cosine components A(n) and B(n) will take on discrete values at each kth radian chunk and will do so at the clock rate.
Nothing is stopping us from writing down on a sheet of paper that the radian frequency associated with this radian chunk is (2πk/N)fS, but keep in mind that this is just a number on a sheet of paper; it is not the sine or cosine argument that will trace out a sinusoidal waveform. This is where the sample index n comes into play. The index increments by one every sample clock so the argument takes on incremental k radian chunk values with each clock period. This means that ωK = (2πnk/N) will take on successive values of 0,2πk/N, 4πk/N, 6πk/N, ··· at the sample rate. This is the dynamic argument of the sine and cosine function. If we plot A(n) and B(n) for this dynamic argument as n = 0,1,2,3,···, we will trace out a sine and a cosine waveform at the radian frequency (2πk/N)fS.
For example, suppose we let k = 1, N = 8, and fS = 32 KHz. The sine argument would be implemented as
The sine waveform for the first eight values of the sample index n is illustrated in Figure 1.3. The fundamental frequency of this sinusoid is computed by
Figure 1.3. Mapped sine wave using a dynamic argument
The fundamental frequency is generated when k = 1. Multiples of the fundamental frequency are referred to as harmonic frequencies. Frequencies generated for k = 2,3,4,···, N/2 are harmonics of the fundamental. When the multiplier k = 0, we end up with a frequency of 0 Hz, or DC.
We can represent the phase offset in a digital sinusoid by the expression
The phase offset can only take on values equal to p radian chunks.
When implementing a digital sinusoidal generator in hardware, it is of paramount importance to remember the following seven points:
- Since Equation 1.6 is computed every T seconds, it implicitly includes the sample rate term fS. This is because the index n increments at the sample rate.
- In normalized notation, the frequency of the sinusoid in Equation 1.6 is given by the ratio of k/N, where 0 ≤ k/N ≤ 0.5.
- The frequency resolution of the digital sinusoid waveforms A(n) and B(n) is determined by the size of N.
- The phase resolution of the digital sinusoid waveforms A(n) and B(n) is determined by the size of N.
- The precision of the amplitude of the sinusoidal waveform is determined by the bit width of the samples used to represent both A(n) and B(n).
- The base or fundamental frequency of the sinusoids in Equation 1.6 is equal to 1/N normalized and fS/N unnormalized.
- The set of discrete frequencies that can be output by a programmable oscillator is given by k/N for k = 0,1,2,···, N/2, which equates to a normalized frequency range of 0 to 0.5 in steps of 1/N, or an actual frequency range of 0 Hz to fS/2 Hz in steps of fS/N.
We will show in Chapter 8, “Digital Frequency Synthesis,” that the value of k in item 7 can take on fractional values, which allows the engineer to design synthesizers that have much finer frequency resolution.