source: svn/newcon3bcm2_21bu/dst/dhl/src/devices/dtqs22ddp101b/MxL601_TunerCfg.c

Last change on this file was 76, checked in by megakiss, 10 years ago

1W 대기전력을 만족시키기 위하여 POWEROFF시 튜너를 Standby 상태로 함

  • Property svn:executable set to *
File size: 15.5 KB
Line 
1/*******************************************************************************
2 *
3 * FILE NAME          : MxL601_TunerCfg.cpp
4 *
5 * AUTHOR             : Sunghoon Park
6 *                      Dong Liu                 
7 *
8 * DATE CREATED       : 11/16/2011
9 *                      11/20/2011 - MK
10 *
11 * DESCRIPTION        : This file contains demod and RF control parameters.
12 *                      add a new function named Ctrl_WriteRegField
13 *                             
14 *******************************************************************************
15 *                Copyright (c) 2011, MaxLinear, Inc.
16 ******************************************************************************/
17
18#include "MxL601_TunerCfg.h"
19#include "MxL_Debug.h"
20#include <math.h>
21
22REG_CTRL_INFO_T MxL_OverwriteDefaults[] = 
23{
24  {0x00, 0xFF, 0x01},
25  {0x96, 0xFF, 0x00},
26  {0x00, 0xFF, 0x00},
27  {0x14, 0xFF, 0x13},
28  {0x6D, 0xFF, 0x8A},
29  {0x6D, 0xFF, 0x0A},
30  {0xDF, 0xFF, 0x19},
31  {0x45, 0xFF, 0x1B},
32  {0xA9, 0xFF, 0x59},
33  {0xAA, 0xFF, 0x6A},
34  {0xBE, 0xFF, 0x4C},
35  {0xCF, 0xFF, 0x25},
36  {0xD0, 0xFF, 0x34},
37  {0x77, 0xFF, 0xE7},
38  {0x78, 0xFF, 0xE3},
39  {0x6F, 0xFF, 0x51},
40  {0x7B, 0xFF, 0x84},
41  {0x7C, 0xFF, 0x9F},
42  {0x56, 0xFF, 0x41},
43  {0xCD, 0xFF, 0x64},
44  {0xC3, 0xFF, 0x2C},
45  {0x9D, 0xFF, 0x61},
46  {0xF7, 0xFF, 0x52},
47  {0x58, 0xFF, 0x81},
48  {0xB1, 0xFF, 0x30}, 
49  {0,    0,    0}
50};
51
52// Analog NTSC application mode setting
53REG_CTRL_INFO_T AnalogNtsc[] = 
54{
55  {0x0C, 0xFF, 0x08},
56  {0x13, 0xFF, 0x00},
57  {0x53, 0xFF, 0x7E},
58  {0x57, 0xFF, 0x91},
59  {0x5C, 0xFF, 0xB1},
60  {0x62, 0xFF, 0xC2},
61  {0x6E, 0xFF, 0x01},
62  {0x6F, 0xFF, 0x51},
63  {0x87, 0xFF, 0x56},
64  {0x88, 0xFF, 0x44},
65  {0x93, 0xFF, 0x33},
66  {0x97, 0xFF, 0xA3},
67  {0xBA, 0xFF, 0x40},
68  {0x98, 0xFF, 0xA5},
69  {0x9B, 0xFF, 0x20},
70  {0x9C, 0xFF, 0x20},
71  {0xA0, 0xFF, 0x10},
72  {0xA5, 0xFF, 0x0F},
73  {0xC2, 0xFF, 0xAB},
74  {0xC5, 0xFF, 0x7C},
75  {0xCD, 0xFF, 0x64}, // dfe_agc_rssi_cnt_thld = 100
76  {0xCE, 0xFF, 0x7C},
77  {0xD5, 0xFF, 0x05},
78  {0xD9, 0xFF, 0x00},
79  {0xEA, 0xFF, 0x00},
80  {0xDC, 0xFF, 0x1C},
81  {0,    0,    0}
82};
83
84// DFE_RFLUT_DIV_IN_SWP for NTSC HIF mode
85REG_CTRL_INFO_T Ntsc_RfLutSwpHIF[] = 
86{
87  {0x4A, 0xFF, 0x1B},
88  {0x4B, 0xFF, 0x1A},
89  {0x4C, 0xFF, 0x19},
90  {0x4D, 0xFF, 0x16},
91  {0x4E, 0xFF, 0x15},
92  {0x4F, 0xFF, 0x14},
93  {0x50, 0xFF, 0x13},
94  {0x51, 0xFF, 0x12},
95  {0x52, 0xFF, 0x17},
96  {0,    0,    0}
97};
98
99// DFE_RFLUT_DIV_IN_SWP for NTSC - 16 MHz XTAL LIF mode
100REG_CTRL_INFO_T Ntsc_16MHzRfLutSwpLIF[] = 
101{
102  {0x4A, 0xFF, 0x1B},
103  {0x4B, 0xFF, 0x1A},
104  {0x4C, 0xFF, 0x19},
105  {0x4D, 0xFF, 0x17},
106  {0x4E, 0xFF, 0x16},
107  {0x4F, 0xFF, 0x15},
108  {0x50, 0xFF, 0x14},
109  {0x51, 0xFF, 0x13},
110  {0x52, 0xFF, 0x12},
111  {0,    0,    0}
112};
113
114// DFE_RFLUT_DIV_IN_SWP for NTSC - 24 MHz XTAL LIF mode
115REG_CTRL_INFO_T Ntsc_24MHzRfLutSwpLIF[] = 
116{
117  {0x4A, 0xFF, 0x1C},
118  {0x4B, 0xFF, 0x1B},
119  {0x4C, 0xFF, 0x1A},
120  {0x4D, 0xFF, 0x19},
121  {0x4E, 0xFF, 0x17},
122  {0x4F, 0xFF, 0x16},
123  {0x50, 0xFF, 0x15},
124  {0x51, 0xFF, 0x14},
125  {0x52, 0xFF, 0x13},
126  {0,    0,    0}
127};
128
129// DFE_RFLUT_DIV_IN_SWP for NTSC - HRC mode
130REG_CTRL_INFO_T Ntsc_HRCRfLutSwpLIF[] = 
131{
132  {0x4A, 0xFF, 0x1C},
133  {0x4B, 0xFF, 0x1B},
134  {0x4C, 0xFF, 0x1A},
135  {0x4D, 0xFF, 0x19},
136  {0x4E, 0xFF, 0x17},
137  {0x4F, 0xFF, 0x16},
138  {0x50, 0xFF, 0x15},
139  {0x51, 0xFF, 0x14},
140  {0x52, 0xFF, 0x13},
141  {0xDD, 0xFF, 0x01},
142  {0,    0,    0}
143};
144
145// DFE_RFLUT_DIV_IN_SWP settings mode PAL LIF
146REG_CTRL_INFO_T Pal_RfLutSwpLIF[] = 
147{
148  {0x4B, 0xFF, 0x1B},
149  {0x4C, 0xFF, 0x1A},
150  {0x4D, 0xFF, 0x19},
151  {0x4E, 0xFF, 0x17},
152  {0x4F, 0xFF, 0x16},
153  {0x50, 0xFF, 0x15},
154  {0x51, 0xFF, 0x14},
155  {0x52, 0xFF, 0x13},
156  {0,    0,    0}
157};
158
159// DFE_RFLUT_DIV_IN_SWP settings mode PAL-D HIF
160REG_CTRL_INFO_T PalD_RfLutSwpHIF[] = 
161{
162  {0x4B, 0xFF, 0x14},
163  {0x4C, 0xFF, 0x13},
164  {0x4D, 0xFF, 0x15},
165  {0x4E, 0xFF, 0x1B},
166  {0x4F, 0xFF, 0x1E},
167  {0x50, 0xFF, 0x16},
168  {0x51, 0xFF, 0x1A},
169  {0x52, 0xFF, 0x19},
170  {0,    0,    0}
171};
172
173// DFE_RFLUT_DIV_IN_SWP settings mode PAL-I HIF
174REG_CTRL_INFO_T PalI_RfLutSwpHIF[] = 
175{
176  {0x4B, 0xFF, 0x16},
177  {0x4C, 0xFF, 0x15},
178  {0x4D, 0xFF, 0x14},
179  {0x4E, 0xFF, 0x13},
180  {0x4F, 0xFF, 0x1B},
181  {0x50, 0xFF, 0x19},
182  {0x51, 0xFF, 0x1A},
183  {0x52, 0xFF, 0x17},
184  {0,    0,    0}
185};
186
187// DFE_RFLUT_DIV_IN_SWP settings mode PAL-BG 8 MHz BW HIF
188REG_CTRL_INFO_T PalBG_8MHzBW_RfLutSwpHIF[] = 
189{
190  {0x4B, 0xFF, 0x1B},
191  {0x4C, 0xFF, 0x1A},
192  {0x4D, 0xFF, 0x19},
193  {0x4E, 0xFF, 0x17},
194  {0x4F, 0xFF, 0x16},
195  {0x50, 0xFF, 0x15},
196  {0x51, 0xFF, 0x14},
197  {0x52, 0xFF, 0x13},
198  {0,    0,    0}
199};
200
201// DFE_RFLUT_DIV_IN_SWP settings mode PAL-BG 7 MHz BW HIF
202REG_CTRL_INFO_T PalBG_7MHzBW_RfLutSwpHIF[] = 
203{
204  {0x4B, 0xFF, 0x1B},
205  {0x4C, 0xFF, 0x1A},
206  {0x4D, 0xFF, 0x15},
207  {0x4E, 0xFF, 0x14},
208  {0x4F, 0xFF, 0x13},
209  {0x50, 0xFF, 0x16},
210  {0x51, 0xFF, 0x17},
211  {0x52, 0xFF, 0x19},
212  {0,    0,    0}
213};
214
215// Analog PAL application mode setting
216REG_CTRL_INFO_T AnalogPal[] = 
217{
218  {0x13, 0xFF, 0x00},
219  {0x53, 0xFF, 0x7E},
220  {0x57, 0xFF, 0x91},
221  {0x5C, 0xFF, 0xB1},
222  {0x62, 0xFF, 0xC2},
223  {0x6E, 0xFF, 0x01},
224  {0x6F, 0xFF, 0x51},
225  {0x87, 0xFF, 0x56},
226  {0x88, 0xFF, 0x44},
227  {0x93, 0xFF, 0x33},
228  {0x97, 0xFF, 0xA3},
229  {0xBA, 0xFF, 0x40},
230  {0x98, 0xFF, 0xA5},
231  {0x9B, 0xFF, 0x20},
232  {0x9C, 0xFF, 0x20},
233  {0xA0, 0xFF, 0x00},
234  {0xA5, 0xFF, 0x0F},
235  {0xC2, 0xFF, 0xAB},
236  {0xC5, 0xFF, 0x7C},
237  {0xCD, 0xFF, 0x64}, // dfe_agc_rssi_cnt_thld = 100
238  {0xCE, 0xFF, 0x7C},
239  {0xD5, 0xFF, 0x05},
240  {0xD9, 0xFF, 0x00},
241  {0xEA, 0xFF, 0x00},
242  {0x49, 0xFF, 0x1D},
243  {0x4A, 0xFF, 0x1C},
244  {0xDD, 0xFF, 0x06},
245  {0xDC, 0xFF, 0x1C},
246  {0,    0,    0}
247};
248
249// Analog SECAM application mode setting
250REG_CTRL_INFO_T AnalogSecam[] = 
251{
252  {0x13, 0xFF, 0x00},
253  {0x53, 0xFF, 0x7E},
254  {0x57, 0xFF, 0x91},
255  {0x5C, 0xFF, 0xB1},
256  {0x62, 0xFF, 0xC2},
257  {0x6E, 0xFF, 0x01},
258  {0x6F, 0xFF, 0x51},
259  {0x87, 0xFF, 0x56},
260  {0x88, 0xFF, 0x44},
261  {0x93, 0xFF, 0x33},
262  {0x97, 0xFF, 0xA3},
263  {0xBA, 0xFF, 0x40},
264  {0x98, 0xFF, 0x95},
265  {0x9B, 0xFF, 0x66},
266  {0x9C, 0xFF, 0x1F},
267  {0xA0, 0xFF, 0x10},
268  {0xA5, 0xFF, 0x0F},
269  {0xC2, 0xFF, 0xA8},
270  {0xC5, 0xFF, 0xBD},
271  {0xCD, 0xFF, 0x64}, // dfe_agc_rssi_cnt_thld = 100
272  {0xCE, 0xFF, 0x7C},
273  {0xD5, 0xFF, 0x05},
274  {0xD9, 0xFF, 0x00},
275  {0xEA, 0xFF, 0x00},
276  {0x49, 0xFF, 0x1D},
277  {0x4A, 0xFF, 0x1C},
278  {0x4B, 0xFF, 0x1B},
279  {0x4C, 0xFF, 0x1A},
280  {0x4D, 0xFF, 0x19},
281  {0x4E, 0xFF, 0x17},
282  {0x4F, 0xFF, 0x16},
283  {0x50, 0xFF, 0x15},
284  {0x51, 0xFF, 0x14},
285  {0x52, 0xFF, 0x13},
286  {0xDD, 0xFF, 0x06},
287  {0xDC, 0xFF, 0x1C},
288  {0,    0,    0}
289};
290
291// Digital DVB-C application mode setting
292REG_CTRL_INFO_T DigitalDvbc[] = 
293{
294  {0x0C, 0xFF, 0x00},
295  {0x13, 0xFF, 0x04},
296  {0x53, 0xFF, 0x7E},
297  {0x57, 0xFF, 0x91},
298  {0x5C, 0xFF, 0xB1},
299  {0x62, 0xFF, 0xF2},
300  {0x6E, 0xFF, 0x03},
301  {0x6F, 0xFF, 0xD1},
302  {0x87, 0xFF, 0x77},
303  {0x88, 0xFF, 0x55},
304  {0x93, 0xFF, 0x33},
305  {0x97, 0xFF, 0x03},
306  {0xBA, 0xFF, 0x40},
307  {0x98, 0xFF, 0xAF},
308  {0x9B, 0xFF, 0x20},
309  {0x9C, 0xFF, 0x1E},
310  {0xA0, 0xFF, 0x18},
311  {0xA5, 0xFF, 0x09},
312  {0xC2, 0xFF, 0xA9},
313  {0xCD, 0xFF, 0x64}, // dfe_agc_rssi_cnt_thld = 100
314  {0xCE, 0xFF, 0x7C},
315  {0xC5, 0xFF, 0x7C},
316  {0xD5, 0xFF, 0x05},
317  {0xD9, 0xFF, 0x00},
318  {0xEA, 0xFF, 0x00},
319  {0xDC, 0xFF, 0x1C},
320  {0,    0,    0}
321};
322
323// Digital ISDBT & ATSC application mode setting
324REG_CTRL_INFO_T DigitalIsdbtAtsc[] = 
325{
326  {0x0C, 0xFF, 0x00},
327  {0x13, 0xFF, 0x04},
328  {0x53, 0xFF, 0xFE},
329  {0x57, 0xFF, 0x91}, // dig_ana_dnx_lna_bias = 0
330  {0x62, 0xFF, 0xC2},
331  {0x6E, 0xFF, 0x01},
332  {0x6F, 0xFF, 0x51},
333  {0x87, 0xFF, 0x77},
334#ifdef CUSTOMER_SPECIFIC_SETTING_1
335  {0x88, 0xFF, 0x77},
336#else
337  {0x88, 0xFF, 0x55},
338#endif
339  {0x93, 0xFF, 0x22},
340  {0x97, 0xFF, 0x02},
341  {0xBA, 0xFF, 0x30},
342  {0x98, 0xFF, 0xAF},
343  {0x9B, 0xFF, 0x20},
344  {0x9C, 0xFF, 0x1E},
345  {0xA0, 0xFF, 0x18},
346  {0xA5, 0xFF, 0x09},
347  {0xC2, 0xFF, 0xA9},
348  {0xC5, 0xFF, 0x7C},
349  {0xCD, 0xFF, 0xE8}, // dfe_agc_rssi_cnt_thld = 1000
350  {0xCE, 0xFF, 0x7F},
351  {0xD5, 0xFF, 0x03},
352  {0xD9, 0xFF, 0x04},
353  {0,    0,    0}
354};
355
356// Digital DVB-T 6MHz application mode setting
357REG_CTRL_INFO_T DigitalDvbt[] = 
358{
359  {0x13, 0xFF, 0x04},
360  {0x0C, 0xFF, 0x00},
361  {0x53, 0xFF, 0xFE},
362  {0x57, 0xFF, 0x91}, // dig_ana_dnx_lna_bias = 0
363  {0x62, 0xFF, 0xC2},
364  {0x6E, 0xFF, 0x01},
365  {0x6F, 0xFF, 0x51},
366  {0x87, 0xFF, 0x77},
367  {0x88, 0xFF, 0x55},
368  {0x93, 0xFF, 0x22},
369  {0x97, 0xFF, 0x02},
370  {0xBA, 0xFF, 0x30},
371  {0x98, 0xFF, 0xAF},
372  {0x9B, 0xFF, 0x20},
373  {0x9C, 0xFF, 0x1E},
374  {0xA0, 0xFF, 0x18},
375  {0xA5, 0xFF, 0x09},
376  {0xC2, 0xFF, 0xA9},
377  {0xC5, 0xFF, 0x7C},
378  {0xD5, 0xFF, 0x03},
379  {0xD9, 0xFF, 0x04},
380  {0,    0,    0}
381};
382
383/*------------------------------------------------------------------------------
384--| FUNCTION NAME : Ctrl_ProgramRegisters
385--|
386--| AUTHOR        : Dong Liu
387--|
388--| DATE CREATED  : 07/23/2010
389--|
390--| DESCRIPTION   : This function writes multiple registers with provided data array.
391--|
392--| RETURN VALUE  : None
393--|
394--|---------------------------------------------------------------------------*/
395
396MXL_STATUS Ctrl_ProgramRegisters(UINT8 I2cAddr, PREG_CTRL_INFO_T ctrlRegInfoPtr)
397{
398  MXL_STATUS status = MXL_TRUE;
399  UINT16 i = 0;
400  UINT8 tmp = 0;
401 
402  while (status == MXL_TRUE)
403  {
404    if ((ctrlRegInfoPtr[i].regAddr == 0) && (ctrlRegInfoPtr[i].mask == 0) && (ctrlRegInfoPtr[i].data == 0)) break;
405
406    // Check if partial bits of register were updated
407    if (ctrlRegInfoPtr[i].mask != 0xFF) 
408    {
409      status = Ctrl_ReadRegister(I2cAddr,ctrlRegInfoPtr[i].regAddr, &tmp);
410      if (status != MXL_TRUE) break;;
411    }
412   
413    tmp &= (UINT8) (~ctrlRegInfoPtr[i].mask);
414    tmp |= (UINT8) (ctrlRegInfoPtr[i].data);
415
416    status = Ctrl_WriteRegister(I2cAddr,ctrlRegInfoPtr[i].regAddr, tmp);
417    if (status != MXL_TRUE) break;
418
419    i++;
420  }
421
422  return status;
423}
424
425/*------------------------------------------------------------------------------
426--| FUNCTION NAME : Ctrl_WriteRegField
427--|
428--| AUTHOR        : Dong Liu
429--|
430--| DATE CREATED  : 11/3/2009
431--|
432--| DESCRIPTION   : This function writes registers field that defined by Mask
433--|                 and bit width. The write field position and width are defined
434--|                 by mask byte. For example, if want to write 0x02 to a
435--|                 register bit<5:4>, the input parameter shall be 
436--|                 ctrlRegInfoPtr struct:{ Reg_Addr, 0x30, (0x02)<<4 }
437--|                 after writing, RegAddr content is --10---- (Bin Format)
438--|                   
439--|---------------------------------------------------------------------------*/
440
441MXL_STATUS Ctrl_WriteRegField(UINT8 I2cAddr, PREG_CTRL_INFO_T ctrlRegInfoPtr)
442{
443  MXL_STATUS status;
444  UINT8 tmp = 0;
445 
446
447  if ((ctrlRegInfoPtr->regAddr == 0) && (ctrlRegInfoPtr->mask == 0) && (ctrlRegInfoPtr->data == 0)) return MXL_FALSE;
448
449  // Check if partial bits of register were updated
450  if (ctrlRegInfoPtr->mask != 0xFF) 
451  {
452      status = Ctrl_ReadRegister(I2cAddr, ctrlRegInfoPtr->regAddr, &tmp);
453
454      if (status != MXL_TRUE) return status;
455   }
456
457  // Clear the field that need to set value
458  tmp &= (UINT8) (~ctrlRegInfoPtr->mask); 
459  tmp |= ( ctrlRegInfoPtr->data & ctrlRegInfoPtr->mask ); 
460
461  status = Ctrl_WriteRegister(I2cAddr, ctrlRegInfoPtr->regAddr, tmp);
462
463  return status;
464}
465
466/*------------------------------------------------------------------------------
467--| FUNCTION NAME : Ctrl_SetRfFreqLutReg
468--|
469--| AUTHOR        : Dong Liu
470--|
471--| DATE CREATED  : 11/21/2011
472--|
473--| DESCRIPTION   : This function is called by MxL601_ConfigTunerChanTune,
474--|                 configure 0xDC, 0xDD, 0xF0 and 0xF1 registers when XTAL is
475--|                 16MHz and 24Hz case
476--| 
477--|---------------------------------------------------------------------------*/
478
479MXL_STATUS Ctrl_SetRfFreqLutReg(UINT8 i2cAddress, UINT32 FreqInHz, PCHAN_DEPENDENT_FREQ_TABLE_T freqLutPtr)
480{
481  UINT8 status = MXL_TRUE;
482  UINT8 idx = 0;
483  UINT8 regSetData[MAX_SPUR_REG_NUM] = {0, 0, 0, 0};
484   
485  if (freqLutPtr)
486  {
487    // Find and get default value firstly.
488    for (idx = 0; 0 != freqLutPtr->centerFreqHz; idx++, freqLutPtr++)
489    {
490      if (freqLutPtr->centerFreqHz == 1) 
491      {
492        // When center frequency is 1 means corresponding data is default value
493        regSetData[0] = freqLutPtr->rfLutSwp1Reg;
494        regSetData[1] = freqLutPtr->rfLutDivInBypReg;
495        regSetData[2] = freqLutPtr->refLutBypReg;
496        regSetData[3] = freqLutPtr->refIntModReg;
497       
498        break;
499      } // end of if ((freqLutPtr->centerFreqHz -
500    } // end of for (idx = 0;
501
502    // Check in LUT
503    for (idx = 0; 0 != freqLutPtr->centerFreqHz; idx++, freqLutPtr++)
504    {
505      if ((freqLutPtr->centerFreqHz - SPUR_SHIFT_FREQ_WINDOW) <= FreqInHz &&
506          (freqLutPtr->centerFreqHz + SPUR_SHIFT_FREQ_WINDOW) >= FreqInHz)
507      {
508        regSetData[0] = freqLutPtr->rfLutSwp1Reg;
509        regSetData[1] = freqLutPtr->rfLutDivInBypReg;
510        regSetData[2] = freqLutPtr->refLutBypReg;
511        regSetData[3] = freqLutPtr->refIntModReg;
512
513        break;
514      } // end of if ((freqLutPtr->centerFreqHz -
515    } // end of for (idx = 0;
516  }
517
518  // Program registers
519  for (idx = 0; idx < MxL601_SPUR_REGISTER.SpurRegNum; idx++)
520    status |= Ctrl_WriteRegister(i2cAddress, MxL601_SPUR_REGISTER.SpurRegAddr[idx], regSetData[idx]);
521
522  return(MXL_STATUS)status;
523}
524
525/*------------------------------------------------------------------------------
526--| FUNCTION NAME : MxL_GetTunerSignedBits
527--|
528--| AUTHOR        : Brenndon Lee
529--|
530--| DATE CREATED  : 12/16/2008
531--|
532--| DESCRIPTION   : Convert data format to signed floating point number
533--|                 
534--| RETURN VALUE  : None
535--|
536--|---------------------------------------------------------------------------*/
537
538REAL32 MxL_GetTunerSignedBits(UINT32 bits, UINT8 signedUnsigned, UINT8 numBits, UINT8 fractionBit)
539{
540  SINT32 ConvertedData, SignMask;
541  REAL32 result;
542
543  // Check if the number is signed or not
544  ConvertedData = 0;
545
546  if (signedUnsigned == 1)
547  {
548    // Signed number. Check if it is negative number
549    if ((bits >> (numBits - 1)) & 0x1)
550    {
551      // Negative number. Extend sign bit
552      SignMask = 0xFFFFFFFF;
553      SignMask <<= numBits;
554
555      ConvertedData = SignMask;
556    }
557  }
558
559  // Sign extented data
560  ConvertedData |= bits;
561 
562  // Convert Data type
563  // output = data / 2^(fractionBit)
564  result = (REAL32)((REAL32)ConvertedData / pow((REAL32)2,fractionBit));
565
566  MxL_DLL_DEBUG0("Sx = %lf \n", result);
567
568  return result;
569}
570
571/*------------------------------------------------------------------------------
572--| FUNCTION NAME : MxL_CalculateVariance
573--|
574--| AUTHOR        : Mahendra Kondur
575--|
576--| DATE CREATED  : March 06, 2012
577--|
578--| DESCRIPTION   : This function used to calculate variance.
579--|                 
580--| RETURN VALUE  : None
581--|
582--|---------------------------------------------------------------------------*/
583
584REAL64 MxL_CalculateVariance(REAL32 *dataPtr, UINT8 numOfItems)
585{
586  REAL64 variance = 0.0;
587  REAL64 mean = 0.0;
588  REAL64 tmp = 0.0;
589  UINT8 idx = 0;
590 
591  for (idx = 0; idx < numOfItems; idx++)
592  {
593    mean += (dataPtr[idx]);   
594  }
595
596  // Calculate mean value
597  mean = (mean/numOfItems);
598
599  for (idx = 0; idx < numOfItems; idx++)
600  {
601    tmp = (dataPtr[idx] - mean);   
602    variance += (tmp * tmp);   
603  }
604
605  // Calculate variance
606  variance = (variance/numOfItems);
607
608  return variance;
609}
610
Note: See TracBrowser for help on using the repository browser.