# PRBS array C code generator

Needed an 11 bit PRBS (Pseudo Random Binary Sequence) for use in a project. After some searching online, I came across this sweet wikipedia article on Linear Feedback Shift Registers (LFSRs). This article includes some sample C code to generate a PRBS sequence so I modified this code to generate a sequence that is 2048 bits in length.

```// taken from the prbs wikipedia page and modified to make an 11 bit prbs and print to file
// wattnotions april 18th 2015
# include &amp;lt;stdint.h&amp;gt;
# include &amp;lt;stdio.h&amp;gt;
# include &amp;lt;stdbool.h&amp;gt;

bool prbs;

int main(void)
{
uint16_t start_state = 0x7D0;  /* Any nonzero start state will work. */
uint16_t lfsr = start_state;
bool bit;
unsigned period = 0;

FILE *fp;
fp=fopen(&quot;test.txt&quot;, &quot;w&quot;);

fflush( stdout );
do
{
/* taps: 11 and 9; feedback polynomial: x^11 +x^9 + 1 */
bit  = ((lfsr &amp;gt;&amp;gt; 0) ^ (lfsr &amp;gt;&amp;gt; 2) ) &amp;amp; 1;
fprintf(fp, &quot;%d&quot;, bit);
lfsr =  (lfsr &amp;gt;&amp;gt; 1) | (bit &amp;lt;&amp;lt; 10);
++period;
} while (lfsr != start_state);

}

```

This 2048 bit sequence in printed as a sequence of 1s and 0s to a .txt file. It looks something like this:
0010010001110110101101011000110001110111101101010010110000110011100111111011110000101001100100011111101……you get the idea

Fairly useless in its current state so some Python magic is required to convert this in to C code.

```# opens file containg prbs sequence, parses it into an array of bytes in C code
f = open('Cgen.h', 'w')  # open the file that will hold the generated C code

with open (&quot;test.txt&quot;, &quot;r&quot;) as myfile:   # open the file containing the prbs 1s and 0s

num = 0

f.write('int prbs[] = {\n')
for i in range( ((len(data))//8)  ):

f.write(&quot;'0b&quot; + data[i:i+8] +&quot;'&quot;)
if( i != (((len(data))//8) -1) ):
f.write(&quot;, &quot;)
num = num + 1
if (num == 7):        # print a newline after every 7th element to keep things pretty
f.write(&quot;\n&quot;)
num = 0

f.write(&quot;);&quot;)

```

The output from this python script is saved in a file called Cgen.h . It looks like this:
int prbs[] = {
‘0b00100100’, ‘0b01001000’, ‘0b10010001’, ‘0b00100011’, ‘0b01000111’, ‘0b10001110’, ‘0b00011101’,
‘0b00111011’, ‘0b01110110’, ‘0b11101101’, ‘0b11011010’, ‘0b10110101’, ‘0b01101011’, ‘0b11010110’,
‘0b10101101’, ‘0b01011010’, ‘0b10110101’, ‘0b01101011’, ‘0b11010110’, ‘0b10101100’, ‘0b01011000’,
‘0b10110001’, ‘0b01100011’, ‘0b11000110’, ‘0b10001100’, ‘0b00011000’, ‘0b00110001’, ‘0b01100011’,
‘0b11000111’, ‘0b10001110’, ‘0b00011101’, ‘0b00111011’, ‘0b01110111’, ‘0b11101111’, ‘0b11011110’,

….and so on, then near the end it looks like this:

‘0b10011001’, ‘0b00110010’, ‘0b01100101’, ‘0b11001010’, ‘0b10010101’, ‘0b00101011’, ‘0b01010111’,
‘0b10101111’, ‘0b01011111’, ‘0b10111111’, ‘0b01111110’, ‘0b11111100’, ‘0b11111000’, ‘0b11110000’,
‘0b11100001’, ‘0b11000010’, ‘0b10000100’);

So its just an array definition that can be conveniently hidden away in a header file. There’s a github repo called prbs_C_gen with all of the source files and example output files if you fancy taking a peek.