伪随机序列——m序列及MATLAB仿真

简介: 伪随机序列——m序列及MATLAB仿真

前言

通信系统中的随机噪声会使模拟信号产生失真和使数字信号出现误码,并且,它还是限制信道容量的一个重要因素。因此人们经常希望消除或减小通信系统中的随机噪声。

另外,有时人们会希望获得随机噪声。例如,在实验室中对通信设备或系统性能进行测试时,可能要故意加人一定的随机噪声。

伪随机噪声具有类似于随机噪声的某些统计特性,同时又能够重复产生。由于它具有随机噪声的优点,又避免了随机噪声的缺点,因此获得了日益广泛的实际应用。目前广泛应用的伪随机噪声都是由周期性数字序列经过滤波等处理后得出的。在后面我们将这种周期性数字序列称为伪随机序列。它有时又称为伪随机信号和伪随机码。


一、m 序列

1、m 序列的产生

m 序列是最长线性反馈移位寄存器序列的简称。它是由带线性反馈的移存器产生的周期最长的序列。现在,我们先给出一个 m 序列的例子。在下图中示出一个 4 级线性反馈移存器。

m 序列的产生


image.png

2、m 序列的性质

①、均衡性

在 m 序列的一个周期中,“1” 和 “0” 的数目基本相等。准确地说,“1” 的个数比 “0” 的个数多一个。

②、游程分布

我们把一个序列中取值相同的那些相继的(连在一起的)元素合称为一个 “游程(run)”。在一个游程中元素的个数称为游程长度。例如,在上图中给出的 m 序列可以重写为:

image.png

③、移位相加特性

image.png

④、自相关函数


image.png

m 序列的自相关函数

由上述可知,m 序列的自相关函数只有两种取值:0 和 (1/m)。有时我们把这类自相关函数只有两种取值的序列称为双值自相关序列。

⑤、功率谱密度

对 m 序列的自相关函数做傅里叶变换可以得到其功率谱密度。

m 序列的功率谱密度

⑥、伪噪声特性

由于 m 序列的均衡性、游程分布和自相关特性与随机序列的基本性质极相似所以通常将 m 序列称为伪噪声(PN)序列,或称为伪随机序列。

二、M 序列

非线性反馈移存器产生的周期最长的序列称为 M 序列。它和上述 m 序列不同,后者是由线性反馈移存器产生的周期最长的序列。

image.png

1、m 序列的产生

参考上面 m 序列的产生 图,它是一个 n=4 级的 m 序列产生器。图中给出了它的 15 种状态。若使它增加一个 “000”状态,就可变成 M 序列产生器了。因为移存器中后级状态必须是由其前级状态移入而得,故此 “0000” 状态必须处于初始状态 “1000” 之前和 “0001” 状态之后。这就是说,我们需要将其递推方程修改为非线性方程,使 “0001” 状态代入新的递推方程后,产生状态 “0000”(而不是“1000”),并且在 “0000” 状态代入后产生状态 “1000”(而不是保持“0000”不变)。

2、m 序列的性质

M 序列与 m 序列类似,也在一定程度上具有噪声特性。它满足 m 序列的前两个:

image.png

4 级 M 序列产生器

M 序列与 m 序列相比,最主要的优点是数量大,即同样级数 n 的移存器能够产生的平移不等价 M 序列总数比 m 序列的大得多,且随 n 的增大迅速增加。在下表中给出了级数 n 与可能产生的两种序列数目的比较。

三、MATLAB 中 m 序列

1、m 序列生成函数的 MATLAB 代码

mseq.m

function [mout] = mseq(n, taps, inidata, num)
% ****************************************************************
% n         : m序列的阶数n
% taps      : 反馈寄存器的连接位置
% inidata   : 寄存器的初始值序列 
% num       : 输出的m序列的个数
% mout      : 输出的m序列,如果num>1,则每一行为一个m序列
% ****************************************************************
mout = zeros(num,2^n-1);
fpos = zeros(n,1);
fpos(taps) = 1;
for ii=1:2^n-1
    
    mout(1,ii) = inidata(n);                        % 寄存器的输出值
    temp        = mod(inidata*fpos,2);              % 计算反馈数据 
    
    inidata(2:n) = inidata(1:n-1);                  % 寄存器移位一次
    inidata(1)     = temp;                          % 更新第1个寄存器的值 
    
end
if num > 1                                          %如果要输出多个m序列,生成其他m序列
    for ii=2:num
        mout(ii,:) = shift(mout(ii-1,:),1);
    end
end

2、MATLAB 仿真

function code = mseq(n, taps, init, len)

code = mseq(3,[1 3],[1 1 1],52);
disp(code);
  • 参数 n 代表 m 序列的阶数,即序列的长度为 2n1。输入参数 n 必须是一个正整数。
  • 参数 taps 是一个一维向量,指定用于生成 m 序列的反馈多项式的系数。这些系数表示了多项式中的项是否参与反馈。例如,如果taps为[1 3],则反馈多项式为1+z3,其中 z 表示序列的延迟操作。
  • 参数 init 是一个一维向量,指定 m 序列的初始状态。该向量的长度必须小于或等于 n。如果 init 的长度小于n,则在其前面填充零。
  • 参数 len 表示要生成的 m 序列的长度。

可以看到如下结果:

生成的 code 是一个 52 × 7 double 类型:

1     1     1     0     1     0     0
     0     1     1     1     0     1     0
     0     0     1     1     1     0     1
     1     0     0     1     1     1     0
     0     1     0     0     1     1     1
     1     0     1     0     0     1     1
     1     1     0     1     0     0     1
     1     1     1     0     1     0     0
     0     1     1     1     0     1     0
     0     0     1     1     1     0     1
     1     0     0     1     1     1     0
     0     1     0     0     1     1     1
     1     0     1     0     0     1     1
     1     1     0     1     0     0     1
     1     1     1     0     1     0     0
     0     1     1     1     0     1     0
     0     0     1     1     1     0     1
     1     0     0     1     1     1     0
     0     1     0     0     1     1     1
     1     0     1     0     0     1     1
     1     1     0     1     0     0     1
     1     1     1     0     1     0     0
     0     1     1     1     0     1     0
     0     0     1     1     1     0     1
     1     0     0     1     1     1     0
     0     1     0     0     1     1     1
     1     0     1     0     0     1     1
     1     1     0     1     0     0     1
     1     1     1     0     1     0     0
     0     1     1     1     0     1     0
     0     0     1     1     1     0     1
     1     0     0     1     1     1     0
     0     1     0     0     1     1     1
     1     0     1     0     0     1     1
     1     1     0     1     0     0     1
     1     1     1     0     1     0     0
     0     1     1     1     0     1     0
     0     0     1     1     1     0     1
     1     0     0     1     1     1     0
     0     1     0     0     1     1     1
     1     0     1     0     0     1     1
     1     1     0     1     0     0     1
     1     1     1     0     1     0     0
     0     1     1     1     0     1     0
     0     0     1     1     1     0     1
     1     0     0     1     1     1     0
     0     1     0     0     1     1     1
     1     0     1     0     0     1     1
     1     1     0     1     0     0     1
     1     1     1     0     1     0     0
     0     1     1     1     0     1     0
     0     0     1     1     1     0     1


目录
相关文章
|
2天前
|
算法
基于大爆炸优化算法的PID控制器参数寻优matlab仿真
本研究基于大爆炸优化算法对PID控制器参数进行寻优,并通过Matlab仿真对比优化前后PID控制效果。使用MATLAB2022a实现核心程序,展示了算法迭代过程及最优PID参数的求解。大爆炸优化算法通过模拟宇宙大爆炸和大收缩过程,在搜索空间中迭代寻找全局最优解,特别适用于PID参数优化,提升控制系统性能。
|
2天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-GRU网络的数据分类识别算法matlab仿真
本项目展示了使用MATLAB2022a实现的贝叶斯优化、CNN和GRU算法优化效果。优化前后对比显著,完整代码附带中文注释及操作视频。贝叶斯优化适用于黑盒函数,CNN用于时间序列特征提取,GRU改进了RNN的长序列处理能力。
|
1天前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。
|
2天前
|
算法 数据安全/隐私保护 索引
索引OFDM调制解调系统的matlab性能仿真
本文对m索引OFDM调制解调系统性能进行了仿真分析,增加了仿真图并配有语音讲解视频,使用Matlab2022a完成仿真,代码无水印。研究了OFDM-IM技术,通过激活不同子载波组合传输额外信息,提高频谱效率和降低PAPR。提出了OFDM联合子块索引调制技术(OFDM-JS-IM)和OFDM全索引方法(OFDM-AIM),并通过遗传算法优化子块查找表,有效提升系统性能。提供了核心MATLAB程序示例。
22 3
|
22天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
23天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
21天前
|
算法
基于HASM模型的高精度建模matlab仿真
本课题使用HASM进行高精度建模,介绍HASM模型及其简化实现方法。HASM模型基于层次化与自适应统计思想,通过多层结构捕捉不同尺度特征,自适应调整参数,适用于大规模、高维度数据的分析与预测。MATLAB2022A版本运行测试,展示运行结果。
|
22天前
|
运维 算法
基于Lipschitz李式指数的随机信号特征识别和故障检测matlab仿真
本程序基于Lipschitz李式指数进行随机信号特征识别和故障检测。使用MATLAB2013B版本运行,核心功能包括计算Lipschitz指数、绘制指数曲线、检测故障信号并标记异常区域。Lipschitz指数能够反映信号的局部动态行为,适用于机械振动分析等领域的故障诊断。
|
23天前
|
机器学习/深度学习 算法 芯片
基于GSP工具箱的NILM算法matlab仿真
基于GSP工具箱的NILM算法Matlab仿真,利用图信号处理技术解析家庭或建筑内各电器的独立功耗。GSPBox通过图的节点、边和权重矩阵表示电气系统,实现对未知数据的有效分类。系统使用MATLAB2022a版本,通过滤波或分解技术从全局能耗信号中提取子设备的功耗信息。
|
23天前
|
机器学习/深度学习 算法 5G
基于MIMO系统的SDR-AltMin混合预编码算法matlab性能仿真
基于MIMO系统的SDR-AltMin混合预编码算法通过结合半定松弛和交替最小化技术,优化大规模MIMO系统的预编码矩阵,提高信号质量。Matlab 2022a仿真结果显示,该算法能有效提升系统性能并降低计算复杂度。核心程序包括预编码和接收矩阵的设计,以及不同信噪比下的性能评估。
42 3

热门文章

最新文章