5.3 Proposed Quantization Algorithm
5.3.1 Pre-quantization Works
Before executing the proposed quantization algorithm on our MIMO-OFDM system, some pre-quantization works need to be operated first.
1. Separate all blocks into quantization-related and quantization-irrelevant blocks, and find out the performance-dominated data flow path
In order to convert floating-point MATLAB code into fixed-point MATLAB code, first we need to separate all MIMO-OFDM function blocks into two groups, e.g., quantization-related blocks and quantization-irrelevant blocks:
z Quantization-related blocks:
Function blocks are called quantization-related as long as there are DSP
operations, such as the four fundamental operations of arithmetic, FFT/IFFT and so on, between input signals and output signals. When we are dealing with fixed-point variables without truncation, these DSP operations will always make variable’s word length become longer and longer, and therefore we must face quantization issues. In our MIMO-OFDM system, the following function blocks are distributed into the quantization-related group:
¾ IFFT/FFT
¾ RRC filter
¾ Timing synchronizer
¾ Channel estimator
¾ Phase estimator
¾ STBC detector
¾ VBLAST detector
z Quantization-irrelevant blocks:
The definition of quantization-irrelevant blocks is right opposite to quantization-related blocks. Besides the quantization-related blocks shown above, the rest of blocks in our MIMO-OFDM system are categorized into quantization-irrelevant blocks. When we are dealing with the floating-point to fixed-point conversion, these blocks will remain the same because they will suffer neither rounding nor truncation issues.
Figure 5.3 shows the distribution of quantization-related and quantization-irrelevant blocks in our system, and shows two data flow paths in the system. The first data flow path, named major data flow path, starts from convolutional encoder and ends to Viterbi decoder; the second data flow path, named minor data flow path, starts from convolutional encoder and ends to timing synchronizer. Since quantization will cause additional error, called quantization error, it can be easily observed that the quantization errors along major data flow path will dominate the system performance much more severely than what along the minor data flow path; therefore our further works will focus on determining the word lengths of the coefficients or variables in the quantization-related function blocks along the major data flow path.
BER : Quantization-related blocks
: Quantization-irrelevant blocks
: Major data flow path : Minor data flow path
Figure 5.3: Data flow paths and distribution of quantization-related blocks and quantization-irrelevant blocks in MIMO-OFDM system
2. Find out the variables which need to be quantized in quantization-related blocks along the main data flow path
Here we list the variables whose word lengths are required to be determined in the function blocks along the major data flow path:
¾ IFFT output data
¾ RRC coefficients
¾ AD/DA length
¾ Word length of RRC output data in receiver side
¾ FFT output data
¾ Post-FFT long preamble chips embedded in channel estimator block
¾ Channel estimator output data
¾ Phase estimator output data
Note that although AD and DA are not quantization-related blocks, there available word lengths are inherently limited by hardware circuit design to be 10 bits therefore AD and DA’s word length also needs to be taken into consideration as we convert floating-point codes into fixed-point codes.
3. Parameters settings and definitions
To concentrate on dealing with quantization issues purely, channel effects such as multipath, AWGN noise, Rayleigh fading and so on are all neglected.
Furthermore, the detected constellation of floating-point case is regard as the basis, where the difference between the output vectors for the original floating-point and the fixed-point MATLAB code is regarded as error vector, denoted by e.
e = outdatafloat – outdatafixed (5.1) We next define an error metric (EM) using the following definition:
EM = norm(e)/norm(outdatafloat)×100 (5.2) where the vector norm is defined by
2 1/ 2
( ) i
i
norm e =⎛⎜⎜⎜⎜⎝
∑
e ⎞⎟⎟⎟⎟⎠ (5.3) After that, we define the following terms that are used in the algorithm¾ fl_dt: floating-point detected constellation
¾ fx_dt: fixed-point detected constellation
¾ maxi: range of the ith variable
¾ pi: the ith precision (fraction length)
¾ mi: the ith integer length (including sign bit)
¾ qi: the ith quantizer
¾ wi: the ith hardware resource weighting
¾ R: total hardware resource requirement
Additionally, in spite of some special variables, signed fixed-point value with truncation and wrapping quantization methods are carried out. However, since we try to operate this quantization algorithm on our MIMO-OFDM system, some communication characteristics require to be taken into account and therefore the following quantization settings should be modified:
z IFFT: In order to mitigate PAPR problem, we choose saturation method to quantize the output signals of IFFT.
z AD/DA: With limit of the circuit design of AD/DA module, the available bit-widths is constrained, e.g., ten bits in our system. Moreover, the signals fed into DA and fed out from AD are limited to unsigned values, therefore quantization method must be unsigned too. Furthermore, quantization methods are also constrained, where truncation and wrapping are adopted by DA; truncation and saturation are adopted by AD.
Here we list all quantizers and their quantization settings in Table 5.1.
Table 5.1: Quantizers and their settings in MIMO-OFDM system Parameters and Quantizers Variables
qDA= quantizer(‘ufixed’, ‘floor’, ‘wrap’,[mDA+pDA, pDA]) DA output data
qph= quantizer(‘fixed’, ‘floor’, ‘wrap’,[mph+pph, pph]) Phase estimator output data
qch= quantizer(‘fixed’, ‘floor’, ‘wrap’,[mch+pch, pch]) Channel estimator output data
qlnfft= quantizer(‘fixed’, ‘floor’, ‘wrap’,[mlnfft+plnfft, plnfft]) Post-FFT long preamble chips
qfft= quantizer(‘fixed’, ‘floor’, ‘wrap’,[mfft+pfft, pfft]) FFT output data
qrxRRC= quantizer(‘fixed’, ‘floor’, ‘wrap’,[mrxRRC+prxRRC, prxRRC]) RRC output data in receiver
qAD= quantizer(‘ufixed’, ‘floor’, ‘sat’,[mAD+pAD, pAD]) AD output data
qRRC= quantizer(‘fixed’, ‘floor’, ‘wrap’,[mRRC+pRRC, pRRC]) RRC coefficients
qifft= quantizer(‘fixed’, ‘floor’, ‘sat’,[mifft+pifft, pifft]) IFFT output data
Parameters and Quantizers Variables
qDA= quantizer(‘ufixed’, ‘floor’, ‘wrap’,[mDA+pDA, pDA]) DA output data
qph= quantizer(‘fixed’, ‘floor’, ‘wrap’,[mph+pph, pph]) Phase estimator output data
qch= quantizer(‘fixed’, ‘floor’, ‘wrap’,[mch+pch, pch]) Channel estimator output data
qlnfft= quantizer(‘fixed’, ‘floor’, ‘wrap’,[mlnfft+plnfft, plnfft]) Post-FFT long preamble chips
qfft= quantizer(‘fixed’, ‘floor’, ‘wrap’,[mfft+pfft, pfft]) FFT output data
qrxRRC= quantizer(‘fixed’, ‘floor’, ‘wrap’,[mrxRRC+prxRRC, prxRRC]) RRC output data in receiver
qAD= quantizer(‘ufixed’, ‘floor’, ‘sat’,[mAD+pAD, pAD]) AD output data
qRRC= quantizer(‘fixed’, ‘floor’, ‘wrap’,[mRRC+pRRC, pRRC]) RRC coefficients
qifft= quantizer(‘fixed’, ‘floor’, ‘sat’,[mifft+pifft, pifft]) IFFT output data