(4)MATLAB生成CRC校验码

文章目录

  • 前言
  • [6. 使用MATLAB生成CRC校验码](#6. 使用MATLAB生成CRC校验码)
    • [6.1 使用MATLAB库函数实现CRC](#6.1 使用MATLAB库函数实现CRC)
    • [6.2 不用库函数,按校验原理实现CRC](#6.2 不用库函数,按校验原理实现CRC)
  • 总结

前言

承接前面几篇文章介绍的CRC校验码原理,本文给出CRC校验码的MATLAB仿真代码。


6. 使用MATLAB生成CRC校验码

6.1 使用MATLAB库函数实现CRC

代码如下(示例):

c 复制代码
% 本文件以实例形式说明CRC校验码的生成原理。
% 使用CRC8生成多项式 x^8 + x^2 + x + 1对原始信息序列进行CRC8校验编码,
% 得到8为CRC码,附加到原始信息序列后面,形成发送比特序列。
poly = [1 0 0 0 0 0 1 1 1];         % 生成多项式
n = length(poly) - 1;
 
% 原始信息序列
msg = [1 1 0 1 0 0 1 1];
 
msg_length = length(msg);
 
% 消息比特序列左移8位
msg1 = [msg zeros(1, n)];
 
% 使用多项式除法求CRC校验码,q为商,r为余数
[q,r] = deconv(msg1, poly);
 
% 余数模2处理
r = mod(abs(r),2);
 
% CRC校验码
crc = r(msg_length+1:end);
 
% 将CRC校验码附加到原始信息序列后面
msg_and_crc = [msg, crc];

6.2 不用库函数,按校验原理实现CRC

代码如下(示例):

c 复制代码
% 输入数据
data_width = 8;                 % 数据位宽。进行CRC校验的源数据按字节排列
data_num = 4;                   % 数据个数。进行CRC校验的源数据包含的字节数
msg0 = randi(2,data_width,data_num) - 1;         % 生成源数据

crc = [0 0 0 0 0 0 0 0]';         % crc初值
length = data_num;                % 输入数据个数。输入数据按字节格式存储
cnt = 1;                          % 输入数据索引
 
msg = msg0;                       % CRC输入的原始信息序列
 
% CRC8生成多项式 x^8 + x^2 + x + 1
poly = [0 0 0 0 0 1 1 1];         % 省略最高位
 
while length > 0
    crc = xor(crc,msg(:,cnt));
    
    for C = 1:8
        if  0 ~= crc(1)
            crc_shift = [crc(2:8);0];
            crc = xor(crc_shift , poly');
        else
            crc = [crc(2:8);0];
        end
    end
    
    cnt = cnt + 1;
    length = length - 1;
end
 
% 将CRC校验码附加到原始信息序列后面
msg_and_crc_2 = [msg, crc];         % 每列代表一个字节

总结

暂无后加。

后续介绍奇偶校验码和汉明码等。


相关推荐
Wyc724094 分钟前
数据结构1
数据结构
szial12 分钟前
Python Click 教程:从函数到专业命令行工具
开发语言·python
Karle_12 分钟前
为AI编辑器准备c++编译环境,onnxruntime、cmake、cl,网上坑太多备份记录后续方便使用。
开发语言·c++·编辑器
Dxy123931021612 分钟前
JavaScript 字符串转数值(小数)
开发语言·javascript·ecmascript
lcj251115 分钟前
【数据结构精讲】堆与二叉树从底层原理到代码落地:堆的构建 / 调整 / 排序 + 二叉树遍历 / 操作(附完整 C++ 源码 + LeetCode 题解)
数据结构·c++·leetcode
努力努力再努力wz16 分钟前
【MySQL 进阶系列】C/C++ 如何通过客户端库访问 MySQL?从连接原理到 API 调用流程详解(附完整demo代码)
服务器·c语言·数据结构·数据库·c++·b树·mysql
yu859395817 分钟前
matlab实现ARMA(自回归移动平均)模型
开发语言·matlab·回归
xuhaoyu_cpp_java17 分钟前
单调栈(算法)
java·数据结构·经验分享·笔记·学习·算法
lbb 小魔仙21 分钟前
Ollama 本地部署大模型 + Python API 集成开发完整教程(2026最新版,含 GPU 加速配置)
开发语言·python
民乐团扒谱机39 分钟前
【微实验】平滑轨迹的数学基石:二次贝塞尔曲线原理、插值逻辑、形态控制与MATLAB全解析
开发语言·matlab