·本课题,将浮点运算转换为大位宽的二进制计算,这样不仅可以简化计算过程,同时保证了算法的精度。
·通过查看相关资料,混沌加密友三种方式,叠加,相乘以及线性运算,但是没有异或,所以,这里,我们使用混沌叠加的方式进行加密。
·有些模块,在设计上的需要,没法单独写成模块,所以我们在说明文档中尽量给你写清楚怎么设计的。
本系统的基本结构,我们遵循你所提供的结构进行,整个框图如下所示:
首先实现使用MATLAB进行算法的仿真,我们得到的仿真结果如下所示:
这个是混沌模型的基本仿真,说明公式以及初始值选取的正确性。
这个程序是混沌加密调制解调系统的MATLAB浮点仿真结果图,说明上面的结果是正确的。
从上面的仿真结果可知,以定点进行仿真,只要量化宽度满足一定要求之后,其完全不影响系统的精度。
根据上面的介绍,我们可以编写了如下的程序:
自上而下,依次为:
系统顶层文件
——加密调制模块
————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。
——解密解调模块
————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。
下面对各个模块进行介绍。
系统顶层文件 ——加密调制模块 ————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。 ——解密解调模块 ————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。 |
接口含义分别为:
系统时钟
系统复位
测试并行信号的产生使能信号
测试并行信号
加密模块的使能信号
串行输出
串行信号组帧输出
加密输出
解密输出
解密输出信号的符号判决
搜帧模块的相关峰输出
搜帧模块的使能输出
搜帧模块的数据输出
最后串并转化的使能
最后串并转化的数据输出
顶层模块,主要功能就是产生测试数据,16位宽的并行数据:
然后是分别调用加密调制模块和解密解调模块:
具体的接口含义,我们在介绍这些子模块的时候进行说明。
系统顶层文件 ——加密调制模块 ————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。 ——解密解调模块 ————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。 |
加密模块的接口含义是
时钟,复位,输入并行信号的使能信号,输入并行信号,串行输出,组帧后的输出,加密信号:
其中:
加密输出信号o_T_signal反馈给lorenz混沌模块进行迭代,迭代后的yn输出进行加密。
系统顶层文件 ——加密调制模块 ————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。 ——解密解调模块 ————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。 |
分别为系统时钟,复位,数据输入,混沌y输出,加密信号输出。
其基本原理,是通过信号和混沌信号的叠加来实现的。
系统顶层文件 ——加密调制模块 ————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。 ——解密解调模块 ————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。 |
其接口是
系统时钟,复位,加密反馈信号,混沌xyz输出。
注意,这里我们采用的是基于浮点原理的定点计算方法,由于在FPGA中直接采用浮点计算算法比较复杂,而且比较耗资源,而传统的定点计算精度不够,因此,这里我们采用的是基于浮点的定点计算,即进行位宽扩展,相乘之后进行截位的方法。
通过这个思想,lorenz算法可以转换为:
//y(n+1) = 0.028*x(n) - 0.001*x(n)*z(n) + 0.999*y(n);
//x(n+1) = 0.99*x(n) + 0.01*y(n);
//z(n+1) = 0.001*x(n)*y(n) + 0.9973333*z(n);
//y(n+1) = 1835*x(n) - 66*x(n)*z(n) + 65470*y(n);
//x(n+1) = 64881*x(n) + 655*y(n);
//z(n+1) = 66*x(n)*y(n) + 65361*z(n);
系统顶层文件 ——加密调制模块 ————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。 ——解密解调模块 ————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。 |
接口分别为,系统时钟,复位,输入串行数据,数据使能,输出数据,输出数据使能。
这里加入组帧模块的主要功能就是
在接收端,当解调出正确的信号的时候,我们无法知道何时进行串并转化才能够得到正确的并行信号,即我们无法知道数据哪位是起始位置。
所以加入帧头之后,在接收端进行帧头搜索,我们就可以得到数据的起始位置。
这里,我们的做法是在数据头部加入连续的训练序列。组帧后的数据格式如下所示:
其中前面的h就是多个训练序列,后面的data就是实际的信号数据。
系统顶层文件 ——加密调制模块 ————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。 ——解密解调模块 ————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。 |
分别为系统时钟,复位,数据使能,并行数据,串行数据使能,串行数据。
其基本原理是通过计数器的方式进行的。这里就不多做介绍了。
系统顶层文件 ——加密调制模块 ————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。 ——解密解调模块 ————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。 |
其接口分别为
系统时钟
复位
接收到的加密信号
解密输出
解密输出的判决信号
搜帧模块的相关峰输出
搜帧模块的使能输出
搜帧模块的数据输出
最后串并转化的使能
最后串并转化的数据输出
系统顶层文件 ——加密调制模块 ————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。 ——解密解调模块 ————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。 |
接口为时钟,复位,输入信号,混沌信号yn,解密输出。
其基本原理为想减计算。
系统顶层文件 ——加密调制模块 ————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。 ——解密解调模块 ————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。 |
这个模块和发送端的相同。
系统顶层文件 ——加密调制模块 ————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。 ——解密解调模块 ————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。 |
接口为时钟,复位,输入解密后的数据,搜帧模块的相关峰输出,
搜帧模块的使能输出,
搜帧模块的数据输出,
其基本原理就是伪码匹配滤波的原理。
系统顶层文件 ——加密调制模块 ————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。 ——解密解调模块 ————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。 |
接口为时钟,复位,搜索到帧头后的使能信号,输入搜索到帧头以后的解密数据,输出并行使能,输出并行信号。
整个系统的综合结果如下所示
仿真结果如下所示:
四、如何下载到硬件
最后你要下载到板子上,你只需配置其管脚即可。
其顶层的文件的管脚为:
1 |
i_clk |
系统时钟,就是接到硬件板子上的晶振位置。 |
2 |
i_rst |
系统复位,随便接到板子上的key数字按键上。 |
3 |
o_signal_enable |
测试并行信号的产生使能信号,不用接板子, |
4 |
o_signal |
测试并行信号,这个信号为了验证,你可以接signaltapII上 |
5 |
o_enable |
加密模块的使能信号,不用接板子 |
6 |
o_serial_dout |
串行输出,接板子上的测试脚或者signaltapII上 |
7 |
o_serial_frame |
串行信号组帧输出,接板子上的测试脚或者signaltapII上 |
8 |
o_T_signal |
加密输出,这个信号为了验证,你可以接signaltapII上 |
9 |
o_dout |
解密输出,可以接signaltapII上 |
10 |
o_dout_sign |
解密输出信号的符号判决,接板子上的测试脚或者signaltapII上 |
11 |
o_peak |
搜帧模块的相关峰输出,不用接板子 |
12 |
o_peak_enable, |
搜帧模块的使能输出,不用接板子 |
13 |
o_peak_dout |
搜帧模块的数据输出,接板子上的测试脚或者signaltapII上 |
14 |
o_enable2 |
最后串并转化的使能,不用接板子 |
15 |
o_voice_dout |
最后串并转化的数据输出,接板子上的测试脚或者signaltapII上 |