DSPRelated.com
Forums

Analog error correction codes

Started by Unknown August 25, 2015
There are 2 versions of analog error correction codes that I found. 
One is from the biological sciences: 
https://clm.utexas.edu/fietelab/Papers/nn.2901.pdf 
It uses simple mapping onto phase space to do error correction. 

The second uses chaos theory to expand the state space: 
http://arxiv.org/abs/1105.1561 

Neither of them give a really clear description of the decoding algorithm used.  I would say it was rather messy in both cases. 

I also have a third method myself using random projections, but I'm not sure whether it works better than other 2 ideas.  I used a version of it to improve some neural net code.  But after reading the other papers I have a better understanding of how to improve it.
  
For the first phase space based method I think using the the golden ratio would be a smart move.  In light of what wiki has to say about additive recurrences here: 
https://en.wikipedia.org/wiki/Low-discrepancy_sequence
On Tue, 25 Aug 2015 15:12:16 -0700, sean.c4s.vn wrote:

> There are 2 versions of analog error correction codes that I found. > One is from the biological sciences: > https://clm.utexas.edu/fietelab/Papers/nn.2901.pdf It uses simple > mapping onto phase space to do error correction. > > The second uses chaos theory to expand the state space: > http://arxiv.org/abs/1105.1561 > > Neither of them give a really clear description of the decoding > algorithm used. I would say it was rather messy in both cases. > > I also have a third method myself using random projections, but I'm not > sure whether it works better than other 2 ideas. I used a version of it > to improve some neural net code. But after reading the other papers I > have a better understanding of how to improve it. > > For the first phase space based method I think using the the golden > ratio would be a smart move. In light of what wiki has to say about > additive recurrences here: > https://en.wikipedia.org/wiki/Low-discrepancy_sequence
Wide-band frequency modulation. -- Tim Wescott Wescott Design Services http://www.wescottdesign.com
"Wide band frequency modulation?", now there's a question.  Is FM demodulation an averaging process or actual error correction?  It was pointed out in the first paper that there is a big difference between the two. Error correction will give you a much better than a sqrt(n) improvement.
sean.c4s.vn@gmail.com wrote:
> "Wide band frequency modulation?", now there's a question. > Is FM demodulation an averaging process or actual error correction? > It was pointed out in the first paper that there is a big > difference between the two. > Error correction will give you a much better than a sqrt(n) improvement.
Averaging statistically independent values gives sqrt(N). I am not so sure what you mean by "error correction", but if the signals being averaged are not statistically independent, it could be different. Physics uses coherent vs. incoherent for a similar question. -- glen
It's the same idea as error correction in the digital domain.  You can do much better than averaging up to a certain signal to noise ratio. 
On Tue, 25 Aug 2015 21:13:00 -0700, sean.c4s.vn wrote:

> "Wide band frequency modulation?", now there's a question. Is FM > demodulation an averaging process or actual error correction? It was > pointed out in the first paper that there is a big difference between > the two. Error correction will give you a much better than a sqrt(n) > improvement.
Google Groups is being Google Groups again. Could you please figure out how to properly include context, and to reply to actual posts? Or, use www.dsprelated.com. FM demodulation is an actual error correction process, with the characteristic knee in the output SNR vs. input SNR graph. Shannon mentions it in his foundation paper on communications theory. -- www.wescottdesign.com
It is useful to know that FM demodulation is an error correction code too.  I'll more or less leave it there. 
Here is a crude try out of the analog error correction code in the biological paper: 

package ec;

import java.util.Random;

public class Test {

    static float mul=3.6184848f;
    static float add=.23647478f;
    
    public static void main(String[] args) {
        Random r=new Random();
        float[] ec=new float[4];
        float y=55;
        make(y,ec);
        for(int i=0;i<ec.length;i++){
            ec[i]+=(float)r.nextGaussian()*.1f;
        }
        float max=Float.POSITIVE_INFINITY;
        float pos=0;
        for(float x=0;x<256;x++){
            float t=compare(x,ec);
            System.out.println(t);
            if(t<max){
                max=t;
                pos=x;
            }     
        }
        System.out.println("Min:"+pos+"    "+max);
    }
    
    public static void make(float x,float[] ec){
        for(int i=0;i<ec.length;i++){
            x=(x*mul+add)%1f;
            ec[i]=x;
        }
    }
    
    public static float compare(float x,float[] ec){
        float res=0f;
        for(int i=0;i<ec.length;i++){
            x=(x*mul+add)%1f; 
            res+=Math.abs(x-ec[i]);
        }
        return res;
    }
    
}
Here is a crude try out of the analog error correction code in the biological paper:
// Sean O'Connor
package ec;

import java.util.Random;

public class Test {

    static float mul=3.6184848f;
    static float add=.23647478f;
    
    public static void main(String[] args) {
        Random r=new Random();
        float[] ec=new float[4];
        float y=55;
        make(y,ec);
        for(int i=0;i<ec.length;i++){
            ec[i]+=(float)r.nextGaussian()*.1f;
        }
        float max=Float.POSITIVE_INFINITY;
        float pos=0;
        for(float x=0;x<256;x++){
            float t=compare(x,ec);
            System.out.println(t);
            if(t<max){
                max=t;
                pos=x;
            }     
        }
        System.out.println("Min:"+pos+"    "+max);
    }
    
    public static void make(float x,float[] ec){
        for(int i=0;i<ec.length;i++){
            x=(x*mul+add)%1f;
            ec[i]=x;
        }
    }
    
    public static float compare(float x,float[] ec){
        float res=0f;
        for(int i=0;i<ec.length;i++){
            x=(x*mul+add)%1f; 
            res+=Math.abs(x-ec[i]);
        }
        return res;
    }
    
}
On August 25, sean....@gmail.com wrote:
> There are 2 versions of analog error correction codes that I found. > One is from the biological sciences: > https://clm.utexas.edu/fietelab/Papers/nn.2901.pdf > It uses simple mapping onto phase space to do error correction. > The second uses chaos theory to expand the state space: > http://arxiv.org/abs/1105.1561
I don't grok analog error correction; I thought error correction applied only to digital sequences? For an analog waveform, noise reduction is sensible Explication? -- Rich