混沌系统在图像加密中的应用(二维离散Hénon混沌映射)
一、Hénon混沌映射
Hénon映射是一种二维离散时间动力系统,由美国数学家Michel Hénon在1976年引入。它是混沌动力系统中的经典模型之一,具有简单的形式和复杂的行为。
Hénon映射的函数表示为:
x n + 1 = 1 − a x n 2 + y n y n + 1 = b x n {{x}_{n+1}}=1-a{{x_{n}}^{2}}+y_{n}\,\\ {{y}_{n+1}}=bx_{n}\ xn+1=1−axn2+ynyn+1=bxn
其中参数a和b是映射的控制参数,可以用来调节系统的动力学特性。
Hénon映射经常被用作混沌动力系统的基本模型,它展现了许多典型的混沌特征。特别是,当参数a的值接近1.4时,系统显示出确定性混沌行为,包括敏感依赖于初始条件、奇异吸引子以及庞加莱截面等。
二、Hénon特性分析
1.时序图
通过N次迭代方程,描绘出每一步的轨迹,称之为时序图,这里我们迭代公式1000次,当a=1.4,b=0.3时,Hénon映射时序图如下,可以看出轨迹比较混乱,如若要判定是否是混沌状态,需要借助分岔图
代码如下:
import matplotlib.pyplot as plt
def sys(x, y, n):
for i in range(n):
x1 = 1 + y - a * x * x
y1 = b * x
y = y1
x = x1
listx.append(x)
listy.append(y)
list.append(i)
if __name__ == '__main__':
listx = [] # 创建列表存放混沌序列 x
listy = [] # 创建列表存放混沌序列 y
list = [] # 创建列表存放时间序列
a = 1.4
b = 0.3
N = 1000 # 迭代次数
x0 = 0.32 # 初值设定
y0 = 0.32 # 初值设定
sys(x0, y0, N) # 初值和迭代次数
# ----------------------------时序图----------------------------------
plt.figure(1) # 创建画布
plt.subplot(2, 1, 1)
plt.plot(list, listx)
plt.ylabel("x")
plt.xlabel("t")
plt.subplot(2, 1, 2)
plt.plot(list, listy)
plt.ylabel("y")
plt.xlabel("t")
plt.show()
2.相图
和时序图类似,当把X轴的时间t改成 x,就形成了x-y的相图,如下
由于随机初始条件和混沌动力系统的特性,每次运行时得到的相图可能稍有不同。因此,多次运行并观察结果有助于更全面地理解和分析Hénon映射的相图特征
3.功率谱
在分析混沌系统时,功率谱是一种用于研究信号频率特性的工具。混沌系统产生的信号通常具有非常复杂的频谱结构,功率谱可以帮助我们理解信号的频域分布情况。可以看出Hénon映射的频谱分布较为广泛。其中
横坐标:横坐标表示频率,以赫兹(Hz)或者角频率(rad/s)作为单位。频率表示信号中不同频率分量的存在。低频信号的频率较低,高频信号的频率较高。
纵坐标:纵坐标表示功率或能量。功率谱表示了信号在不同频率上的功率或能量分布。
4.分岔图
混沌系统的分岔图(Bifurcation diagram)是一种用于可视化系统演化过程中的稳定性和周期性的工具。在混沌系统中,微小的参数变化可能会导致系统的行为发生显著变化,从而产生分岔现象。
混沌系统的分岔图通常使用系统参数作为横坐标,而系统状态、稳定点或周期轨道的值作为纵坐标。通过系统参数的逐步改变,我们可以观察到纵坐标上的分岔现象。每一个参数值对应一个系统状态,而分岔图显示了这些状态的演化。
在Hénon分岔图中,我们会看到分岔形成。当参数a处于[1.02,1.4]这个范围内时,系统状态突然分叉,导致系统同时存在多个稳定状态或周期状态。这些分支以分岔的方式延伸,形成了分岔图上的特征结构。
分岔图可以提供对混沌系统行为的直观理解。它展示了系统状态随参数变化而发生的相变现象,包括稳定状态、周期状态和混沌状态。通过观察分岔图,我们可以研究系统的动力学行为,如周期倍增、周期减半和混沌吸引子的特征。
5.指数图
李亚普洛夫指数和分岔图是对应的,当分岔图出现混沌时,李亚普洛夫指数会大于0,当分岔图没出现混沌时,李亚普洛夫指数会小于0。李亚普洛夫指数通常用 λ 表示。一个动力系统可能存在多个李亚普洛夫指数,每个指数对应系统在不同方向上的指数增长或指数衰减。
对于Hénon混沌映射,我们需要按照以下步骤计算李亚普洛夫指数:
(1)选择一个初始点 (x0, y0) ,该点将作为Hénon映射迭代的起始值。
(2)通过Henon映射的迭代公式进行迭代计算,直到达到足够的迭代次数或达到一个稳定的状态。在每一步迭代中,计算Jacobi矩阵,然后计算Jacobi矩阵的特征值,得到两个特征值 λ1 和 λ2。
(3)通过Lyapunov指数的定义求得Lyapunov指数 λ:
λ
=
(
1
/
n
)
∗
l
o
g
(
a
b
s
(
λ
1
∗
λ
2
)
)
\lambda =(1/n)*log(abs({{\lambda }_{1}}*{{\lambda }_{2}}))\
λ=(1/n)∗log(abs(λ1∗λ2))
其中,n 是迭代的总次数。
注意:由于Hénon映射的性质,理论上需要对每个初始点进行多次迭代并计算平均值来获得更准确的Lyapunov指数。此外,如果 λ1 或 λ2 的乘积为负数,则需要取绝对值。
可以看出,指数图和分岔图是对应的, λ1在[1.02,1.4]这个范围大于0