This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Input response of SD16_A

Other Parts Discussed in Thread: DAC5687, TLV320AIC3104, COEFFICIENT-CALC

Hi,

 

I have a problem with measurement. I need to measure signals from 45Hz to 300Hz very accurately. So, at the beginning I thought it is good idea to choose OSR as 1024 because of higher SINAD. For my application, fm is 1.024Mhz. If we calculate input response H(f) of SD16_A for 45Hz while OSR=1024 by using given equation below:

H(45Hz) = 0.990050199385444

H(300Hz) = 0.632498843074136

H(45Hz)- H(300Hz) = 0.357551356311308 that means about 36% gain error because of the response of SD16_A itself. According to my product standard, it should be less than 12%.

 

How can I improve that error without changing sampling ratio or OSR of SD16_A ? For example, DC filter is a kind of high pass filter, maybe I can use it to make it more linear? But I don’t know the path I should follow.

 

10x

  • Where is TI support? :(

     

  • I also have an academic curiosity here, and would be very interested to see an answer to BasePointers Question.

    Hope an answer can be found.

    NJC

  • Hello BasePointer,

    Let me summarize your situation:

    You like to analyse input frequencies from 45 Hz to 300 Hz and use a sample rate of 1.024 MHz with an oversampling factor of 32. Your issue is the frequency response of the filter which is not linear in your target section.

    Your problem is a common problem in ADC / DAC area. The usual way is to add a FIR filter to compensate the frequency response and to cut off unwanted frequencies. As an additional benefit you get an improved signal to noise ratio or a higher resolution by a digital down conversion (DDC).

    Have a look on DAC5687. This TI component has a integrated x/sin(x) frequency correction and DDC. Just an example to learn from it.

    The nice thing on FIR filter is that you can easy transfer shape to factors with reverse FFT (I did it already in Excel). The disadvantage is that they need time to calculate and cause a delay. There is a source code example of an FIR on MSP430 in TI's source code library.

    Regards

    Guenther

  • Hi,

     

    Thanks for your suggestion. I used CIC compensator filter available in matlab. It gave excellent result but requires 10 tab FIR filter for each channels which is bad for me. For my application, 8 tab FIR result was acceptable. But I need somethink around 4 tab. I do not want to increase the MCU speed. Is it possible to do same thing with IIR filter instead of FIR? Matlab doesn't provide any support for this. Phase response of IIR filter is not important, because I will apply this filter to all channels. Only the important thing is synchronization between channels. 

     

    Thanks again,

    BP.

  • Hi BP,

    I know that TI's audio equalizer use a biquad-filter like TLV320AIC3104. You find a calculator at http://focus.ti.com/docs/toolsw/folders/print/coefficient-calc.html.

    Biquad filters are a special kind of IIR with a forward and backward chain.

    By the way the HW multipliers in MSP430 can be feed by DMA. So all multiplication do not cost CPU time.

    Regards

    Guenther

  • Pretty much all practical sigma delta converters behave in this way, because they use a similar kind of comb decimation filter. The details change, but they all have a response which droops across the band in a "sinc to the something" manner, nulling for the first time at the decimated sampling frequency. You have two ways to get to the performance you want.....

    • Change to OSR=256. This is probably the best solution. Most of the chips with an SD16A are built primarily for power/energy metering, and the vast majority of meters based on them use OSR=256. The signal delta converter gives excellent results at this rate, for power metering applications. Your 64% response at 300Hz will change to 97.4%, and your results will be well within your spec.
    • Use an FIR to post process the readings from the SD16A.

    I have used the second option in the past, to flatten the OSR=256 mode response to tighter limits, and a very simple FIR can often be used. My notes say that the following 3 tap FIR worked very well at OSR=256:

               history[0] = history[1];
               history[1] = history[2];
                history[2] = new_sample;
                z = history[1] + (history[1] << 3) - history[0] - history[2];
                corrected_value = z >> 3;

    The SD16A is 2.6% down at 300Hz, but with this FIR post processing the SD16A output, the signal is only 0.2% down. You can probably find a simple FIR that is quite effective at OSR=1024. Don't expect quite such nice results, though. 300Hz is a much bigger fraction of the band at OSR=1024. Also, beware that this kind of post processing will affect the phase as well as the gain.

    Steve

     

**Attention** This is a public forum