PN sequences or Pseudo Noise sequence is a periodic binary code which is random in nature generated by the use of shift registers, but generated with taking into considerations some generator polynomials. For sequence to be a pseudo noise or pseudo random it should follow the following basic rules. The rules mentioned below are simply mentioned in brief:
- The relative frequency of 0′s and 1′s are each ½
- The run lengths of 0′s and 1′s are: ½ of all run lengths are of length 1; ¼ are of length 2; 1/8 are of length 3; and so on.
- If a PN sequence is shifted by any non zero number of elements, the resulting sequence will have an equal number of agreements and disagreements with respect to the original sequence.
These properties are known also known as balance property, run property, and correlation property respectively. This code is orthogonal in nature. PN sequence is also known as Maximal Length Sequences.
PN sequences are used in spread spectrum systems, like CDMA, WCDMA, and Radar etc. In CDMA IS 95, 64 ling PN sequence codes are used for the identification if the reverse link channels.
The matlab script for generating pn sequence is given below, and also can be downloaded from this link.
refer figure as a companion for the matlab file

block diagram of pn sequence generator
function [op_seq] = pnseq (a, b, c)
% a : no of fliflops; b = tapp _ function starting frm highest order; c = initial stae
%tapp functions or genrator polynomial
%e.g. no of flip flops 4 ==> a = 4
%generator polynomial x4+x+1 ==> b = [1 0 0 1]
%initial state [1 0 0 0] ==> c = [1 0 0 0]
%refere figure to set a relation between tap function and initial state
%
%
%
%
% <
% ———–X____________________________________
% | ___ | _____ ____ _____ |
% |> | | | | | | | | | ^|
% —–| |——–| |—| |——-| |————->o/p
% —– —– —– —-
% x1 + x2 + x3 + x4
%initial state
% 1 0 0 1
%
%take care of the reverse order of genrator polynomial and intiial states
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
close all;
clc;
x = a;
tap_ff =b;
int_stat= c;
for i = 1:1: length(int_stat)
old_stat(i) = int_stat(i);
gen_pol(i) = tap_ff(i);
end
len = (2 ^x)-1;
gen_pol(i+1)= 1;
gen_l = length(gen_pol);
old_l = length(old_stat);
for i1 = 1: 1:len
% feed back input genration
t = 1;
for i2 = 1:old_l
if gen_pol(i2)==1
stat_str(t) = old_stat(gen_l – i2);
i2 = i2+1;
t = t+1;
else
i2 = i2+1;
end
end
stat_l = length(stat_str);
feed_ip = stat_str(1);
for i3 = 1: stat_l-1
feed_ip = bitxor(feed_ip,stat_str(i3 + 1));
feed_ipmag(i1) = feed_ip;
i3 = i3+1;
end
% shifting elements
new_stat = feed_ip;
for i4 = 1:1:old_l
new_stat(i4+1) = old_stat(i4);
old_stat(i4)= new_stat(i4);
end
op_seq(i1) = new_stat(old_l +1);
end
%op_seq;
==============================
Author: Ashwini Patankar