Markov Information Binary Sequences Based on Piecewise Linear Chaotic Maps

0. Note

1. Introduction

2. Piecewise Linear Chaotic Map

3. Binary Sequences

4. Conclusion

5. Source Code

close all
clear
clc
x = 0:.001:1;p1 = 0.9; p2 = 0.8;
c = p2/(p1+p2);
a = 1/(1-(p1+p2));
if p1+p2 < 1 %positive slope
c1 = c-(c/a);
c2 = c+((1-c)/a );
d1 = c1*(1-c); %(we chose negative slope)
d2 = 1-((1-c2)*c); %(we chose negative slope)

a1 = -c/(c1-d1); %slope a = y2 - y1 / x2 - x1 (we chose negative)
a2 = a; %positive slope
a3 = (c-1)/(d2-c2); % (we chose negative slope)

i = 0;

for i = 1:length(x)
if x(i) >= 0 && x(i) < c1
t(i) = (a1*(x(i)-d1))+c;
elseif x(i) >= c1 && x(i) < c2
t(i) = a2*(x(i)-c1);
else
t(i) = (a3*(x(i)-c2))+1;
end
end
figure
plot(x,x,x,t,0,c,c,0,d1,0,c1,0,c2,0,d2,0);
grid on;
%title('p1 = 0.1 and p2 = 0.8');
xlabel('x');
ylabel('t');
%legend('reference', 'plot', 'c', 'c', 'd1', 'c1', 'c2', 'd2');
ylim([0 1]);

N = 1000000;
X(1) = 0.3;

for i = 1:N
if X(i) >= 0 && X(i) < c1
X(i+1) = (a1*(X(i)-d1))+c;
elseif X(i) >= c1 && X(i) < c2
X(i+1) = a2*(X(i)-c1);
else
X(i+1) = (a3*(X(i)-c2))+1;
end
end
figure
plot(0:length(X)-1,X);
figure
hist(X,x,length(x));
%title('p1=0.1 p2=0.8 N=1000000');
xlim([0 1]);
ylim([0 2]);

P0_theory = c;
P1_theory = 1-c;
P1l0_theory = p1;
P0l1_theory = p2;
P0l0_theory = 1-p1;
P1l1_theory = 1-p2;
P01_theory = P0l1_theory*P1_theory;
P10_theory = P1l0_theory*P0_theory;
P00_theory = P0l0_theory*P0_theory;
P11_theory = P1l1_theory*P1_theory;
H_theory = ((p2/(p1+p2))*((-p1*log2(p1))-((1-p1)*log2(1-p1)))) + ((p1/(p1+p2))*((-p2*log2(p2))-((1-p2)*log2(1-p2))));

fprintf('P(0) in theory is %f\n', P0_theory);
fprintf('P(1) in theory is %f\n', P1_theory);
fprintf('P(00) in theory is %f\n', P00_theory);
fprintf('P(01) in theory is %f\n', P01_theory);
fprintf('P(10) in theory is %f\n', P10_theory);
fprintf('P(11) in theory is %f\n', P11_theory);
fprintf('P(0|0) in theory is %f\n', P0l0_theory);
fprintf('P(0|1) in theory is %f\n', P0l1_theory);
fprintf('P(1|0) in theory is %f\n', P1l0_theory);
fprintf('P(1|1) in theory is %f\n', P1l1_theory);
fprintf('Entropy in theory is %f\n\n', H_theory);
t = c;
binary = X >= t;
save("binary_sequence.dat", "binary");

P0_practical = P1_practical = P00_practical = P01_practical = P10_practical = P11_practical = 0;

for i = 1:length(binary)
if binary(i) == 0
P0_practical += 1;
else
P1_practical += 1;
end

if i == length(binary)
break;
end

if binary(i) == 0 && binary(i+1) == 0
P00_practical += 1;
elseif binary(i) == 0 && binary(i+1) == 1
P01_practical += 1;
elseif binary(i) == 1 && binary(i+1) == 0
P10_practical += 1;
else
P11_practical += 1;
end
end

P0l0_practical = ((P00_practical/length(binary))/(P0_practical/length(binary)));
P0l1_practical = ((P01_practical/length(binary))/(P1_practical/length(binary)));
P1l0_practical = ((P10_practical/length(binary))/(P0_practical/length(binary)));
P1l1_practical = ((P11_practical/length(binary))/(P1_practical/length(binary)));
H_pratical = ((P0l1_practical/(P1l0_practical+P0l1_practical))*((-P1l0_practical*log2(P1l0_practical))-((P0l0_practical)*log2(P0l0_practical)))) + ((P1l0_practical/(P1l0_practical+P0l1_practical))*((-P0l1_practical*log2(P0l1_practical))-((P1l1_practical)*log2(P1l1_practical))));

fprintf('The number of 0s = %d, P(0) in practice is %f\n', P0_practical, P0_practical/length(binary));
fprintf('The number of 1s = %d, P(1) in practice is %f\n', P1_practical, P1_practical/length(binary));
fprintf('The number of 00s = %d, P(00) in practice is %f\n', P00_practical, P00_practical/length(binary));
fprintf('The number of 01s = %d, P(01) in practice is %f\n', P01_practical, P01_practical/length(binary));
fprintf('The number of 10s = %d, P(10) in practice is %f\n', P10_practical, P10_practical/length(binary));
fprintf('The number of 11s = %d, P(11) in practice is %f\n', P11_practical, P11_practical/length(binary));
fprintf('P(0|0) in practice is %f\n', P0l0_practical);
fprintf('P(0|1) in practice is %f\n', P0l1_practical);
fprintf('P(1|0) in practice is %f\n', P1l0_practical);
fprintf('P(1|1) in practice is %f\n', P1l1_practical);
fprintf('Entropy in practice is %f\n\n', H_pratical);

elseif p1+p2 > 1 % negative lope
c1 = c-((c-1)/a);
c2 = c-(c/a);
d1 = c1*(1-c); % we chose negative slope
d2 = 1-((1-c2)*(1-c)); % we chose positive slope
a1 = -c/(c1-d1); %slope a = y2 - y1 / x2 - x1 (we chose negative)
a2 = a; % negative lope
a3 = c/(d2-c2); %(we chose negative)
for i = 1:length(x)
if x(i) >= 0 && x(i) < c1
t(i) = (a1*(x(i)-d1))+c;
elseif x(i) >= c1 && x(i) < c2
t(i) =(a2*(x(i)-c1))+1;
else
t(i) = a3*(x(i)-c2);
end
end
figure
plot(x,x,x,t,0,c,c,0,d1,0,c1,0,c2,0,d2,0);
grid on;
%title('p1 = 0.9 and p2 = 0.8');
xlabel('x');
ylabel('t');
%legend('reference', 'plot', 'c', 'c', 'd1', 'c1', 'c2', 'd2');
ylim([0 1]);

N = 1000000;
X(1) = 0.3;
for i = 1:N
if X(i) >= 0 && X(i) < c1
X(i+1) = (a1*(X(i)-d1))+c;
elseif X(i) >= c1 && X(i) < c2
X(i+1) =(a2*(X(i)-c1))+1;
else
X(i+1) = a3*(X(i)-c2);
end
end
figure
plot(0:length(X)-1,X);
figure
hist(X,x,length(x));
%title('p1=0.9 p2=0.8 N=1000000');
xlim([0 1]);
ylim([0 2]);

P0_theory = c;
P1_theory = 1-c;
P1l0_theory = p1;
P0l1_theory = p2;
P0l0_theory = 1-p1;
P1l1_theory = 1-p2;
P01_theory = P0l1_theory*P1_theory;
P10_theory = P1l0_theory*P0_theory;
P00_theory = P0l0_theory*P0_theory;
P11_theory = P1l1_theory*P1_theory;
H_theory = ((p2/(p1+p2))*((-p1*log2(p1))-((1-p1)*log2(1-p1)))) + ((p1/(p1+p2))*((-p2*log2(p2))-((1-p2)*log2(1-p2))));

fprintf('P(0) in theory is %f\n', P0_theory);
fprintf('P(1) in theory is %f\n', P1_theory);
fprintf('P(00) in theory is %f\n', P00_theory);
fprintf('P(01) in theory is %f\n', P01_theory);
fprintf('P(10) in theory is %f\n', P10_theory);
fprintf('P(11) in theory is %f\n', P11_theory);
fprintf('P(0|0) in theory is %f\n', P0l0_theory);
fprintf('P(0|1) in theory is %f\n', P0l1_theory);
fprintf('P(1|0) in theory is %f\n', P1l0_theory);
fprintf('P(1|1) in theory is %f\n', P1l1_theory);
fprintf('Entropy in theory is %f\n\n', H_theory);
t = c;
binary = X >= t;
save("binary_sequence.dat", "binary");

P0_practical = P1_practical = P00_practical = P01_practical = P10_practical = P11_practical = 0;

for i = 1:length(binary)
if binary(i) == 0
P0_practical += 1;
else
P1_practical += 1;
end

if i == length(binary)
break;
end

if binary(i) == 0 && binary(i+1) == 0
P00_practical += 1;
elseif binary(i) == 0 && binary(i+1) == 1
P01_practical += 1;
elseif binary(i) == 1 && binary(i+1) == 0
P10_practical += 1;
else
P11_practical += 1;
end
end

P0l0_practical = ((P00_practical/length(binary))/(P0_practical/length(binary)));
P0l1_practical = ((P01_practical/length(binary))/(P1_practical/length(binary)));
P1l0_practical = ((P10_practical/length(binary))/(P0_practical/length(binary)));
P1l1_practical = ((P11_practical/length(binary))/(P1_practical/length(binary)));
H_pratical = ((P0l1_practical/(P1l0_practical+P0l1_practical))*((-P1l0_practical*log2(P1l0_practical))-((P0l0_practical)*log2(P0l0_practical)))) + ((P1l0_practical/(P1l0_practical+P0l1_practical))*((-P0l1_practical*log2(P0l1_practical))-((P1l1_practical)*log2(P1l1_practical))));

fprintf('The number of 0s = %d, P(0) in practice is %f\n', P0_practical, P0_practical/length(binary));
fprintf('The number of 1s = %d, P(1) in practice is %f\n', P1_practical, P1_practical/length(binary));
fprintf('The number of 00s = %d, P(00) in practice is %f\n', P00_practical, P00_practical/length(binary));
fprintf('The number of 01s = %d, P(01) in practice is %f\n', P01_practical, P01_practical/length(binary));
fprintf('The number of 10s = %d, P(10) in practice is %f\n', P10_practical, P10_practical/length(binary));
fprintf('The number of 11s = %d, P(11) in practice is %f\n', P11_practical, P11_practical/length(binary));
fprintf('P(0|0) in practice is %f\n', P0l0_practical);
fprintf('P(0|1) in practice is %f\n', P0l1_practical);
fprintf('P(1|0) in practice is %f\n', P1l0_practical);
fprintf('P(1|1) in practice is %f\n', P1l1_practical);
fprintf('Entropy in practice is %f\n\n', H_pratical);
else
fprintf('you cannot do this');
end

Mirrors

this blog contains all my articles licensed under creative commons attribution customized sharealike (cc-by-sa) where you can sell but mention the open one here

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store