基于FPGA的Lorenz混沌系统verilog开发,含testbench和matlab辅助测试程序

举报
简简单单做算法 发表于 2023/11/04 19:19:32 2023/11/04
【摘要】 1.算法运行效果图预览  将vivado的仿真结果导入到matlab显示三维混沌效果: 2.算法运行软件版本vivado2019.2 matlab2022a 3.算法理论概述       洛伦兹混沌系统是一种非线性动力系统,最初由爱德华·洛伦兹(Edward Lorenz)于1963年引入,它的简单方程组引发了混沌理论的开创性研究。该系统是混沌现象的典型范例,展示了复杂、不可预测的行为,即使...

1.算法运行效果图预览

 

 

vivado的仿真结果导入到matlab显示三维混沌效果:

 

2.算法运行软件版本

vivado2019.2

 

matlab2022a

 

3.算法理论概述

       洛伦兹混沌系统是一种非线性动力系统,最初由爱德华·洛伦兹(Edward Lorenz)于1963年引入,它的简单方程组引发了混沌理论的开创性研究。该系统是混沌现象的典型范例,展示了复杂、不可预测的行为,即使在简单的数学方程下也可以观察到这种行为。

       洛伦兹混沌系统由三个耦合的一阶常微分方程组组成,这三个方程描述了三个状态变量(或者说是维度)之间的关系。这些状态变量表示系统在空间中的位置,从而形成一个三维相空间,该相空间中的轨迹表现出异常的复杂性和混沌特性。

 

洛伦兹方程组描述如下:

 

 

       其中,xy z 是状态变量,t是时间,而 \sigmaσ、\rhoρ 和 \betaβ 则是系统的参数。这些参数的取值会影响洛伦兹系统的动态行为。 

 

 

 

 

系统特点:

 

        敏感依赖于初始条件: 洛伦兹系统展现出敏感依赖于初始条件的特点,即微小的初始条件变化可能导致长时间内的轨迹发生巨大的分离。

        奇异吸引子: 洛伦兹系统的相空间中,轨迹围绕着一个被称为“奇异吸引子”的复杂结构。这个吸引子是一个分形结构,展现了无规则且不可重复的形态。

周期性和混沌性共存: 洛伦兹系统在参数空间内可以存在周期性行为和混沌行为,这种现象被称为“周期倍增路线到混沌”。

       混沌的产生原理: 洛伦兹混沌系统的混沌行为来源于非线性项的存在。当参数取值在一定范围内,非线性项的影响会导致相空间中的轨迹错综复杂地交织在一起,这使得系统的演化变得高度不可预测。

 

        洛伦兹混沌系统是混沌现象的经典范例,它揭示了非线性系统的复杂行为和对初始条件的敏感性。通过简单的数学方程,洛伦兹系统展现出了无法预测的、高度不稳定的轨迹,这一发现在混沌理论的发展中具有重要地位,深刻影响了许多领域,包括天气预测、物理学、生物学等。

 

 

 

 

4.部分核心程序

testbench如下所示:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/08/25 21:50:23
// Design Name: 
// Module Name: TEST
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//
 
 
module TEST();
reg i_clk;
reg i_rst;
wire signed[31:0]o_xn;
wire signed[31:0]o_yn;
wire signed[31:0]o_zn;
    
tops uut(
.i_clk (i_clk),
.i_rst (i_rst),
.o_xn  (o_xn),
.o_yn  (o_yn),
.o_zn  (o_zn)
);
    
initial 
begin
i_clk=1'b1;
i_rst=1'b1;
#1000
i_rst=1'b0;
end
always #5 i_clk=~i_clk;
    
    
    
integer fout1;
integer fout2;
integer fout3;
initial begin
 fout1 = $fopen("X.txt","w");
 fout2 = $fopen("Y.txt","w"); 
 fout3 = $fopen("Z.txt","w"); 
end
always @ (posedge i_clk or posedge i_rst)
 begin
     if(i_rst==1'b0)
     begin
	 $fwrite(fout1,"%d\n",o_xn);
	 $fwrite(fout2,"%d\n",o_yn);
	 $fwrite(fout3,"%d\n",o_zn);
	 end
end 
endmodule
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。