Reply by April 1, 20172017-04-01
hi 
please help me quickly 
i need LFSR program in java 
Reply by Sudan-Boy February 16, 20132013-02-16
> >Now, after verifying the sequences as gold-codes sequences (using the >cross-correlation function), I can say confidently that we have a Java
code
>for the m-sequences generator and the gold code generator .. > >thank you all >
one thing about the cross correlation. I used the Matlab function: "xcorr". Applying the cross correlation on a single gold-code sequence (i.e.: Auto-correlation) will give you the "common-known" graphs of the cross correlation with many small peaks (having the three values of the gold-code cross-correlation values) and one high peak. however, for better graph that shows only the exact three values that verify the gold-codes sequences, circular-shifting the second sequence while keeping the first reference sequence fixed will generate a clear graphs.
Reply by Sudan-Boy February 15, 20132013-02-15
Now, after verifying the sequences as gold-codes sequences (using the
cross-correlation function), I can say confidently that we have a Java code
for the m-sequences generator and the gold code generator .. 

thank you all
Reply by robert bristow-johnson February 14, 20132013-02-14
On 2/14/13 12:47 PM, Tim Wescott wrote:
> On Thu, 14 Feb 2013 05:00:17 -0600, SudanBoy wrote: > >>> On Tue, 05 Feb 2013 13:04:48 -0600, SudanBoy wrote: >>> >>> don't think you're going to get any takers. >>> >>> I'm pretty sure that the "m-sequence" in your title means the output of >>> an LFSR. If this is the case, then actually generating the sequence >>> should be pretty straight forward. My inclination is to think that if >>> you cannot generate the sequence, then you cannot use it -- so it's a >>> very good exercise to keep working at this until you can generate the >>> sequence. >> >> thanks for your advice (and for the steps), now I am actually generating >> the PN sequence (i.e: the m-sequence or the LFSR output). >> >>> And, of course, no one is going to write you the code for free. >> >> I wasn't looking for the code for the sake of copying it, I was just >> looking for the algorithm. BTW, I don't mind pasting my code if that >> will help other engineers as well. >> >>> Alternately, if you can point to the specific area where you're having >>> problems then let us know and we'll help with just those areas. But >>> keep >> >>> in mind that it really helps if you already have a firm grasp of how to >>> generate these sequences. >> >> as I mentioned in my main post, I want to generate the gold codes. My >> real problem now is how to verify the gold sequences that I got from the >> two LFSR. I mean calculating the cross-correlation between the >> sequences. >> >> anyhow, thank you for your help, I really appreciate the steps you >> mentioned above which helped me generating the m-sequences. > > Verifying cross-correlation should be easy. Take the two samples that > you want to cross-correlate, and do a bitwise XOR (I'm assuming you have > these stored as bit streams, or have a way of pretending that they are). > Now count the ones. If the number of ones is exactly 1/2 the number of > bits, then the cross-correlation is zero for those two samples. If the > result is all ones then you have a correlation coefficient of -1; if the > result is all zeros then you have a correlation coefficient of +1.
remember that the shift register state of all 0s cannot be in the sequence (otherwise you will get nothing but zeros coming out). that means, for a "maximum length sequence" (another name for this "m-sequence", "PN sequence", "LFSR sequence" or whatever), there will always be exactly one more 1 than there are 0s. if the sequence is long, that difference will seem rather small. -- r b-j rbj@audioimagination.com "Imagination is more important than knowledge."
Reply by Tim Wescott February 14, 20132013-02-14
On Thu, 14 Feb 2013 05:00:17 -0600, SudanBoy wrote:

>>On Tue, 05 Feb 2013 13:04:48 -0600, SudanBoy wrote: >> >>don't think you're going to get any takers. >> >>I'm pretty sure that the "m-sequence" in your title means the output of >>an LFSR. If this is the case, then actually generating the sequence >>should be pretty straight forward. My inclination is to think that if >>you cannot generate the sequence, then you cannot use it -- so it's a >>very good exercise to keep working at this until you can generate the >>sequence. > > thanks for your advice (and for the steps), now I am actually generating > the PN sequence (i.e: the m-sequence or the LFSR output). > >>And, of course, no one is going to write you the code for free. > > I wasn't looking for the code for the sake of copying it, I was just > looking for the algorithm. BTW, I don't mind pasting my code if that > will help other engineers as well. > >>Alternately, if you can point to the specific area where you're having >>problems then let us know and we'll help with just those areas. But >>keep > >>in mind that it really helps if you already have a firm grasp of how to >>generate these sequences. > > as I mentioned in my main post, I want to generate the gold codes. My > real problem now is how to verify the gold sequences that I got from the > two LFSR. I mean calculating the cross-correlation between the > sequences. > > anyhow, thank you for your help, I really appreciate the steps you > mentioned above which helped me generating the m-sequences.
Verifying cross-correlation should be easy. Take the two samples that you want to cross-correlate, and do a bitwise XOR (I'm assuming you have these stored as bit streams, or have a way of pretending that they are). Now count the ones. If the number of ones is exactly 1/2 the number of bits, then the cross-correlation is zero for those two samples. If the result is all ones then you have a correlation coefficient of -1; if the result is all zeros then you have a correlation coefficient of +1. -- My liberal friends think I'm a conservative kook. My conservative friends think I'm a liberal kook. Why am I not happy that they have found common ground? Tim Wescott, Communications, Control, Circuits & Software http://www.wescottdesign.com
Reply by SudanBoy February 14, 20132013-02-14
>................
>And, of course, no one is going to write you the code for free.
here is my java code, please verify if it works properly or not. I know it is very simple programming algorithm but hey it works. package WorkSpace; public class mainSpace { public static void main(String args[]){ int poly_deg = 5; // you can only put 6 and 7. int seq_length = mSeqlength.seq_length(poly_deg); System.out.println("The Sequences length is: "+seq_length); // Initialising the shift registers int [] init_state = new int[poly_deg]; init_state[poly_deg-1] = 1; // Generating the two m-sequences int [] seqA = mSeqGenA.PNseq(poly_deg, seq_length, init_state); int [] seqB = mSeqGenB.PNseq(poly_deg, seq_length, init_state); System.out.println(""); // Generating the Gold Code int [] gold = goldCodeGen.gold(seq_length, seqA, seqB); } } // calculating the sequences length public class mSeqlength { public static int seq_length (int deg){ int length = (int)(Math.pow(2,deg) - 1); System.out.println(""); return length; } } // generating the first m-sequence (make sure to XOR the right taps) public class mSeqGenA { public static int []PNseq (int poly_deg, int seq_length, int []taps_seed){ int i,j; int xor1, xor2; int [] PNseq = new int[seq_length]; int [] temp = new int[poly_deg]; temp = taps_seed; System.out.println("the first m-sequence is: "); if (seq_length<32){ for (i=0; i<seq_length; i++){ xor2 = taps_seed[3] ^ taps_seed[poly_deg-1]; xor2 = xor2 ^ taps_seed[2]; xor1 = xor2 ^ taps_seed[1]; //shifting the taps for (j=(poly_deg-1); j>0; j--){ temp[j]= taps_seed[j-1]; } j=0; temp[j] = xor1; PNseq[i] = taps_seed[poly_deg-1]; taps_seed = temp; } for (i=seq_length; i>0; i--){ System.out.print(PNseq[i-1]);} System.out.println(""); } else if(seq_length>32){ if (seq_length<64){ for (i=0; i<seq_length; i++){ xor2 = taps_seed[4] ^ taps_seed[poly_deg-1]; xor2 = xor2 ^ taps_seed[1]; xor1 = xor2 ^ taps_seed[0]; //shifting the sequence for (j=(poly_deg-1); j>0; j--){ temp[j]= taps_seed[j-1]; } j=0; temp[j] = xor1; PNseq[i] = taps_seed[poly_deg-1]; taps_seed = temp; } for (i=0; i<seq_length; i++){ System.out.print(PNseq[i]);} System.out.println(""); } else if (seq_length>64){ for (i=0; i<seq_length; i++){ xor2 = taps_seed[5] ^ taps_seed[poly_deg-1]; xor2 = xor2 ^ taps_seed[4]; xor1 = xor2 ^ taps_seed[3]; //shifting the sequence for (j=(poly_deg-1); j>0; j--){ temp[j]= taps_seed[j-1]; } j=0; temp[j] = xor1; PNseq[i] = taps_seed[poly_deg-1]; taps_seed = temp; } for (i=0; i<seq_length; i++){ System.out.print(PNseq[i]);} System.out.println(""); } } return PNseq; } } // generating the second m-sequence (make sure to XOR the right taps) public class mSeqGenB { public static int [] PNseq (int poly_deg, int seq_length, int []taps_seed){ int i, j; int xor1; int [] PNseq = new int[seq_length]; int [] temp = new int[poly_deg]; temp = taps_seed; System.out.println("the second m-sequence is: "); if (seq_length<=32){ for (i=0; i<seq_length; i++){ xor1 = taps_seed[2] ^ taps_seed[poly_deg-1]; //shifting the taps for (j=(poly_deg-1); j>0; j--){ temp[j]= taps_seed[j-1]; } j=0; temp[j] = xor1; PNseq[i] = taps_seed[poly_deg-1]; taps_seed = temp; } for (i=seq_length; i>0; i--){ System.out.print(PNseq[i-1]);} System.out.println(""); } else if (seq_length>31){ if (seq_length<=64){ for (i=0; i<seq_length; i++){ xor1 = taps_seed[0] ^ taps_seed[poly_deg-1]; for (j=(poly_deg-1); j>0; j--){ temp[j]= taps_seed[j-1]; } j=0; temp[j] = xor1; PNseq[i] = taps_seed[poly_deg-1]; taps_seed = temp; } for (i=0; i<seq_length; i++){ System.out.print(PNseq[i]);} System.out.println(""); } else if (seq_length>64){ for (i=0; i<seq_length; i++){ xor1 = taps_seed[3] ^ taps_seed[poly_deg-1]; for (j=(poly_deg-1); j>0; j--){ temp[j]= taps_seed[j-1]; } j=0; temp[j] = xor1; PNseq[i] = taps_seed[poly_deg-1]; taps_seed = temp; } for (i=0; i<seq_length; i++){ System.out.print(PNseq[i]);} System.out.println(""); } } return PNseq; } } // where gold codes are generated public class goldCodeGen { public static int [] gold (int seq_length, int []seqA, int []seqB) { int i, j, d; int []gold_code = new int[seq_length]; for (d=0; d<seq_length; d++){ int []temp = new int[seq_length]; // generating the gold code for (i=0; i<seq_length; i++){ gold_code[i] = seqA[i] ^ seqB[i];} // showing the gold code for (i=seq_length; i>0; i--){ System.out.print(gold_code[i-1]); } //checking if the gold sequence is balanced int zeros=0, ones=0; for (i=0; i<seq_length; i++){ if (gold_code[i]==0){ zeros= zeros+1;} else {ones= ones+1;} } if ((zeros==ones) || (zeros==(ones-1))) {System.out.println(" 'Balanced'");} else { System.out.println(" 'NOT balanced'"); } //shifting the second m-sequence for (j=(seq_length-1); j>0; j--){ temp[j] = seqB[j-1]; } j=0; temp[j] = seqB[(seq_length-1)]; seqB = temp; } return gold_code; } } as I said above it's simple and straight forward .. please check if it generate the correct m-sequence and gold codes
Reply by SudanBoy February 14, 20132013-02-14
>.............
>Fortunately, if the feedback polynomial is a primitive >polynomial, so is its reverse (e.g. 11001 instead of >Tim's 10011), and so as long as one uses the same >convention throughout, it does not matter which polynomial >bit goes on which end, >
in fact it matters and I generated different sequences of gold codes. it is preferred, from my experience, to reverse the seeds in the two LFSR gnerators
Reply by SudanBoy February 14, 20132013-02-14
>On Tue, 05 Feb 2013 13:04:48 -0600, SudanBoy wrote: > >don't think you're going to get any takers. > >I'm pretty sure that the "m-sequence" in your title means the output of >an LFSR. If this is the case, then actually generating the sequence >should be pretty straight forward. My inclination is to think that if >you cannot generate the sequence, then you cannot use it -- so it's a >very good exercise to keep working at this until you can generate the >sequence.
thanks for your advice (and for the steps), now I am actually generating the PN sequence (i.e: the m-sequence or the LFSR output).
>And, of course, no one is going to write you the code for free.
I wasn't looking for the code for the sake of copying it, I was just looking for the algorithm. BTW, I don't mind pasting my code if that will help other engineers as well.
>Alternately, if you can point to the specific area where you're having >problems then let us know and we'll help with just those areas. But keep
>in mind that it really helps if you already have a firm grasp of how to >generate these sequences.
as I mentioned in my main post, I want to generate the gold codes. My real problem now is how to verify the gold sequences that I got from the two LFSR. I mean calculating the cross-correlation between the sequences. anyhow, thank you for your help, I really appreciate the steps you mentioned above which helped me generating the m-sequences.
Reply by Tim Wescott February 8, 20132013-02-08
On Thu, 07 Feb 2013 16:09:36 -0800, dvsarwate wrote:

> On Wednesday, February 6, 2013 9:43:53 PM UTC-6, glen herrmannsfeldt > wrote: > > >> But if you are trying to implement a standard, such as the >> >> ethernet CRC generator, you have to do it the right way. >> >> >> >> Also, initialize it right. I believe ethernet initializes >> >> to all 1's. >> >> > True, though as r b-j points out, what one has to do is follow the > convention used in the standard in order to maintain compatibility, > regardless of whether one thinks it is the right way or not. > I am sure all left-handed people feel that the Latin word describing > their condition is poorly chosen, and that they are just as dextrous as > the right-handed folks and not at all sinister, that is, right-handed is > not necessarily the same as right-minded....
I had an ardently left-handed friend who referred to people who were equally facile with both hands as "ambisinster". -- Tim Wescott Control system and signal processing consulting www.wescottdesign.com
Reply by dvsarwate February 7, 20132013-02-07
On Wednesday, February 6, 2013 9:43:53 PM UTC-6, glen herrmannsfeldt wrote:

> > But if you are trying to implement a standard, such as the > > ethernet CRC generator, you have to do it the right way. > > > > Also, initialize it right. I believe ethernet initializes > > to all 1's. >
True, though as r b-j points out, what one has to do is follow the convention used in the standard in order to maintain compatibility, regardless of whether one thinks it is the right way or not. I am sure all left-handed people feel that the Latin word describing their condition is poorly chosen, and that they are just as dextrous as the right-handed folks and not at all sinister, that is, right-handed is not necessarily the same as right-minded.... Dilip Sarwate