Digital Signal Processing Reference
In-Depth Information
f(MHz)
0 5
15
25
40
50
60
70
80
90
-90
-70
-50
-30
-10
0
10
30
50
70
90
(a)
(b)
Figure 8.4 Example of bandpass sampling. (a) Spectrum of a 20MHz signal centered at an IF of
80MHz. (b) Spectrumof bandpass sampled signal for f s of 65MHz (only spectrumon positive frequencies
are shown)
converter should also be a band-pass filtered and must clean the unused part of the original spectrum
for intentional aliasing for band-pass sampling.
Example: Consider a signal at the front end of a digital communication receiver occupying
a bandwidth of 20MHz and centered at 80MHz IF. To sample the signal at Nyquist rate requires an
A/D to sample the signal at a frequency greater than 180MHz and the front end to process these
samples every second. The band-pass sampling technique can relax this stringent constraint by
sampling the signal at a much lower rate. Using expressions (8.1) and (8.2), many options can be
evaluated for feasible band-pass sampling. The signal is sampled at 65MHz for intentional aliasing
in a non-overlapping band of the spectrum. A spectrumof the hypothetical original signal centered at
80MHz and spectrum of its sampled version are given in Figure 8.4.
8.4 Unfolding Techniques
8.4.1 Loop Unrolling
In the software context, unfolding transformation is the process of 'unrolling' a loop so that several
iterations of the loop are executed in one unrolled iteration. For this reason, unfolding is also called
'loop unrolling'. It is a technique widely used by compilers for reducing the loop overhead in code
written in high-level languages. For hardware design, unfolding corresponds to applying a
mathematical transformation on a dataflow graph to replicate its functionality for computing
multiple output samples for given relevant multiple input samples. The concept can also be exploited
while performing SW to HW mapping of an application written in a high-level language. Loop
unrolling gives more flexibility to the HW designer to optimize the mapping. Often the loop is not
completely unrolled, but unfolding is performed to best use the HW resources, retiming and
pipelining.
Loop unrolling can be explained using a dot-product example. The following code depicts a dot-
product computation of two linear arrays of size N:
sum=0;
for (i=0; i<N; i++)
sum += a[i]*b[i];
For computing each MAC (multiplication and accumulation) operation, the program executes a
number of cycles to maintain the loop; this is known as the loop overhead. This overhead includes
incrementing the counter variable i and comparing the incremented value with N, and then taking a
branch decision to execute or not to execute the loop iteration.
 
Search WWH ::




Custom Search