• m序列生成器


    function [m] = mserial_generator(tap_set) 
    % m序列产生器
    % 输出为m序列,未进行极性变换。
    L = 2^(length(tap_set)-1)-1;
    x = [zeros(1,(length(tap_set)-2)) 1];
    for i = 1:1:L
        m(i)=x(end);
        for j= 1:1:length(tap_set)-1
            sum_vector(j)=tap_set(j+1)*x(j);
        end
        sum_x = mod(sum(sum_vector),2);
        x=[sum_x x(1:end-1)];
    end
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    这段代码是一个用于生成m序列的函数。下面是代码的逐行解释:

    1. function [m] = mserial_generator(tap_set)

      • 这是函数声明,定义了一个名为 mserial_generator 的函数,它接受一个参数 tap_set,并返回一个值 m
    2. % m序列产生器

      • 这是一个注释,说明这个函数是用来生成m序列的。
    3. % 输出为m序列,未进行极性变换。

      • 这是一个注释,说明函数的输出是未进行极性变换的m序列。
    4. L = 2^(length(tap_set)-1)-1;

      • 这行代码计算了m序列的长度,length(tap_set) 返回 tap_set 中元素的个数,这个值减去1是用来表示状态寄存器的位数,然后计算出m序列的长度。
    5. x = [zeros(1,(length(tap_set)-2)) 1];

      • 这行代码初始化了状态寄存器,生成一个初始值为0的数组,其长度为 length(tap_set) - 1,然后在末尾添加了一个1,表示状态寄存器的初始状态。
    6. for i = 1:1:L

      • 这是一个循环语句,循环从1到 L,其中 L 是m序列的长度。
    7. m(i)=x(end);

      • 这行代码将当前状态寄存器的最后一个元素添加到m序列中。
    8. for j= 1:1:length(tap_set)-1

      • 这是一个内部循环,用来计算状态寄存器中每个位的下一个值。
    9. sum_vector(j)=tap_set(j+1)*x(j);

      • 这行代码计算了当前状态寄存器位 j 下一个状态的贡献,使用了 tap_set 中的元素与状态寄存器中相应位的值相乘。
    10. sum_x = mod(sum(sum_vector),2);

      • 这行代码计算了状态寄存器下一个状态的值,将所有贡献值相加后取模2,以确保结果为0或1。
    11. x=[sum_x x(1:end-1)];

      • 这行代码更新了状态寄存器的值,将新计算得到的状态添加到状态寄存器的最前面,然后移除原来状态寄存器的最后一个元素,以便在下一次迭代中更新。

    整体上,这段代码通过迭代更新状态寄存器的值,并根据特定的规则计算每个状态寄存器位的下一个状态,从而生成m序列。

  • 相关阅读:
    Git入门---简介,常用命令
    IMX6ULL学习记录——持续更新中......
    centos安装nexus3.x版本
    Linux | 进程
    “升级图片管理,优化工作流程——轻松将JPG转为PNG“
    Oracle数据库 sql优化
    【Verilog教程】4.3Verilog 时序控制
    如何写出好的文档
    多用途折叠式行李拉车设计
    Java 8 新特性 什么是 Lambda 表达式,它的语法格式是什么,怎么使用 Lambda 表达式?
  • 原文地址:https://blog.csdn.net/qq_45542321/article/details/136636066