??? 05/15/08 15:07 Modified: 05/15/08 15:16 Read: times Msg Score: 0 +1 Good Answer/Helpful -1 Answer is Wrong |
#154797 - LSB flickering Responding to: ???'s previous message |
I wonder why people so often recommend to mask/truncate the LSB in the hope to inhibit LSB flickering. This is of no help at all!
Assume you have a byte stream coming out of an ADC every 10msec and the LSB is flickering. First, you must realize that you will never be able to remove the flickering, because this is caused by the digitizing concept: There are always these damned thresholds within the ADC, which divide the world into two parts, "u" and "u" + LSB, where "u" is any ADC output signal. And you will have a lot of these thresholds within an ADC. Everytime when the signal is right at the threshold of "u" and "u" + LSB, you will have this nasty LSB flickering. Of course, you can truncate the LSB and can result in an improvement, when the output signal of ADC flickers arround "1010 0110" and "1010 0111", or "1001 0000" and "1001 0001", and so on. But what, if it flickers arround "0111 1111" and "1000 0000", or "1011 1111" and "1100 0000", and so on? What will you then see when truncating the LSB?? Even heavy low pass filtering cannot remove the LSB flickering. Just imagine what happens if the signal is right at the threshold and the output signal is flickering between "0111 1111" a "1000 0000". There's no time constant you could ever choose that would inhibit the LSB flickering. Of course, filtering can be helpful to minimize other noise, which is bigger than 1LSBpp and would result in an even "higher order LSB flickering". Ok, what about moving average? We assumed a data rate every 10msec. Moving average would take a handful of bytes in a row, let's say 8, add them together and divide the result by 8. Mostly you do "decimating" and the data rate also decreases by a factor of 8, means you get a new byte every 80msec. Is the LSB flickering removed? No! But you have to struggle with it only every 80msec instead of 10msec. Not really an improve. Of course, other noise can tremendously be decreased by averaging! In your situation I would use two variables of your pot reading, one "real", which is flickering and one "manipulated", which becomes only actualized, when the real changes by more than a certain hysteresis, let's say 4LSB or so. How big your hystersis should be chosen depends on your application: Midi hand setting changes of less than 1% are rather unrealistic, or am I wong? So, a moving average in combination with a hystersis of 4LSB could already do the trick. The first to remove system noise from the "real" and the second to "remove" LSB flickering from the "manipulated". Good luck, Kai PS.: Your calculation of corner frequency of analog low pass filter is correct. |