matlab生成m序列(数字图像水印相关)

embedded/2024/11/14 20:29:07/

m序列

定义

m序列是一种重要的伪随机序列(PN序列),它是由线性反馈移位寄存器产生的周期最长的序列,其规律性强,有很好的自相关性和较好的互相关特性。

周期由什么决定?

既然m序列是周期最长的序列(对于某一级数而言),那么如何寻找这种序列呢?实际上这与抽头的设计有关,抽头简单理解就是每一个线性反馈移位寄存器的反馈函数的线性系数,当这个线性系数恰好是对应级数本原多项式的时候,周期是最长的。(群论中的知识)

Matlab实现
抽头生成

m序列对应的抽头实际上是本原多项式的系数,假设我们生成7级的m序列:

matlab">primpoly(n,'all'); %n是级数

需要注意生成出来的是10进制、带多项式末尾1的数字,而抽头中不需要末尾1,并且需要翻转,注释在下节。

这里举一个例子,比如要生成6阶m序列,首先调用primpoly(6,'all')

image-20241110125428451

如果选择 D 6 + D 1 + 1 D^6+D^1+1 D6+D1+1,调用dec2bin(67),得到1000011,手动去除末尾1,并翻转,得到100001,这样我们传入下一节mseq函数的参数就是100001

img

m序列生成
matlab">function mseq = mseq(fbconnection)%fbconnection就是抽头% 这里是按照从左到右寄存器序号递增的顺序,所以右边对应高阶,左边对应低阶n=length(fbconnection);N=2^n-1;register=[zeros(1,n-1) 1]; %移位寄存器的初始状态mseq(1)=register(n);       %m序列的第一个输出码元for i=2:Nnewregister(1)=mod(sum(fbconnection.*register),2);%输入由反馈函数得到for j=2:nnewregister(j)=register(j-1);%移位endregister=newregister;%移位寄存器状态更新mseq(i)=register(n);%输出end
end
参考链接

[1] https://www.zhihu.com/question/591327469/answer/2987694053

[2] https://www.cnblogs.com/xytang-mini-juan/p/17153103.html


http://www.ppmy.cn/embedded/137587.html

相关文章

C#封装EPPlus库为Excel导出工具

1&#xff0c;添加NUGet包 2&#xff0c;封装工具类 using OfficeOpenXml; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection;namespace GMWPF.utils {public class ExcelUtil<T>{/// <summary>///…

什么是 ISP:了解互联网服务提供商的作用

一、ISP 基础知识 从本质上讲&#xff0c;ISP 提供两项主要服务&#xff1a;互联网接入和互联网传输。互联网接入是指使用户能够连接到互联网的物理和逻辑连接&#xff0c;通常通过调制解调器、路由器或其他网络设备。此连接可以是有线的&#xff08;例如通过 DSL、光纤或电缆…

使用element UI实现表格行/列合并

前言 本文代码使用vue2element UI&#xff0c;通过给table传入span-method方法实现合并行或列 效果图 示例代码 后端返回数据格式如下 {"total": 12,"records": [[{"id": 1,"project": "田径","subitem": &qu…

探索Scala编程:图书管理系统实战

在这篇文章中&#xff0c;我们将通过一个简单的图书管理系统项目来深入理解Scala编程。这个项目不仅会帮助你掌握Scala的基本操作&#xff0c;还会让你了解如何使用Scala来处理实际问题。准备好了吗&#xff1f;让我们开始吧&#xff01; 项目目标 我们的目标是创建一个图书管…

1.2 数据结构的分类与应用

1.2 数据结构的分类与应用 数据结构&#xff0c;就是字面意思&#xff0c;一门用来研究数据如何高效的在计算机中进行存储和查询的学科。几乎所有的数据结构&#xff0c;也都是从生活中和数学理论中&#xff0c;衍生而来。 下表列出了常见的数据结构&#xff0c;我们先来熟悉一…

七大经典基于比较排序算法【Java实现】

七种基于比较的排序算法 一.直接插入排序:1.1插入排序1.2希尔排序&#xff08;缩小增量排序法&#xff09; 二.选择排序2.1选择排序2.2堆排序&#xff08;基于树&#xff08;堆&#xff09;的数据结构&#xff09; 三.交换排序3.1冒泡排序3.1快速排序(大致分三种partition方法)…

MySQL第九章,数据访问和DAO模式

一、数据访问与Properties配置文件 数据访问是应用程序与数据库之间的交互过程。在Java开发中&#xff0c;我们通常使用JDBC&#xff08;Java Database Connectivity&#xff09;来实现数据访问。然而&#xff0c;直接编写JDBC代码可能会导致代码冗长、难以维护&#xff0c;并…

Springboot整合xxl-job

拉取xxl-job xxl-job: 一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 配置项目 执行sql语句 更改配置 启动 访问 任务调度中心http://127.0.0.1:8081/xxl-job-…