Logistic map混沌掩盖信号

  • 开学接触了一些有关混沌知识的学习,阅读量一些混沌通信的论文,对于混沌掩盖信号以确保加密通信有一定的兴趣。混沌的产生我选用的是logistic
    map映射产生混沌,主要就是一个递推公式:

在这里插入图片描述
对于这样一个式子,可以看出,每一个混沌的不同只与两个值有关,分别是a和x0.所以只要设置好这两组静态参数,就可以实现混沌同步,这样混沌掩盖的信号就能够通过同步复原出来。对于整体思路就是,设计一个程序,能够读取文本中的信息。通过信息的ascii码与产生的混沌直接相加来实现信息的加密。解密部分也是一样的混沌产生函数,这样同样的参数可以实现混沌同步。将加密的信息通过减法直接减去混沌,再通过ascii码的转化便可以实现信息的恢复。
接受部分如下:

import matplotlib.pyplot as plt
import numpy as np
import os
def chaos_generation(initial_chaos,a,length):
    chaos_value=float(initial_chaos)
    for item in range(length):
        anss.append(chaos_value)
        chaos_value=round(float(a)*chaos_value*(1-chaos_value),6)
        pass
    pass
data=open('text.txt')
strr=data.read()
a=input("请输入参数一的值:")
inital_chaos=input("请输入参数二的值:")
length=len(strr)
anss=[]
mapp=[]
chaos_generation(inital_chaos,a,length)
plt.plot(np.arange(length),anss)
plt.title('Logistic map')
plt.xlabel('n_value')
plt.ylabel('chaos_value')
plt.show()
for item in strr:
    mapp.append(ord(item))
    pass
key=[]
jtem=0
for inem in anss:
    value=inem+mapp[jtem]
    jtem+=1
    key.append(value)
    pass
final_value=','.join(str(i) for i in key)
value_print=open('123.txt',mode='w+')
value_print.write(final_value)

其中text文本中运用了一段网上的英文美文:
请添加图片描述
程序中的参数设置为a=4,x0=0.3。
请添加图片描述
产生的混沌如下图,混沌的长度即为文本文件中的文本的长度。
请添加图片描述
这样就实现了混沌对于文本的掩盖,掩盖后的数据存放于文本123.text中:
请添加图片描述
再通过输出部分处理,输出部分还是用logistic映射产生混沌,其中保证参数为a=4,x0=0.3来实现混沌同步,产生一段相同的混沌,之后利用减法,直接减去混沌实现滤除。代码如下;

import math
import matplotlib.pyplot as plt
import numpy as np
def chaos_generation(initial_chaos,a,length):
    chaos_value=float(initial_chaos)
    for item in range(length):
        anss.append(chaos_value)
        chaos_value=round(float(a)*chaos_value*(1-chaos_value),6)
        pass
    pass
data=open('123.txt')
str=data.read()
a=input("请输入参数一的值:")
inital_chaos=input("请输入参数二的值:")
flag=str.split(',')
receive=[]
for item in flag:
    receive.append(float(item))
    pass
anss=[]
length=len(receive)
chaos_generation(inital_chaos,a,length)
jtem=0
mapp=[]
for item in receive:
    numb=item-anss[jtem]
    #print("item-jtem=numb",item,"-",anss[jtem],"=",numb)
    jtem+=1
    mapp.append(math.ceil(numb))
    pass
#print(mapp)
for item in mapp:
    print(chr(item),end='')

在这里插入图片描述
最终可以实现混沌的滤除。
在输出部分时,浮点数的精度计算没有得到很好的计算,问题如下:
请添加图片描述
在第四行,空格的ascii码计算中,出现了错误,混沌与接受信号已经全部设置成为了六位小数,接受部分也是如此,对于这种情况很是不解,不知道问题出现在哪里,由于ascii码的计算错误,在强制转换成整数类型后会出现下图的错误,空格部分的输出有误:
请添加图片描述
最后采用了向上保留整数的方法才正常的输出,真个计算中只有空格出现了这种错误,而且只是部分空格,希望有大佬教一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

直接AC好吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值