You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中生成7位随机消息的CRC代码报错问题求助

解决MATLAB CRC代码中随机消息生成的维度不匹配问题

嘿,这个问题我太熟了!本质就是向量维度不匹配搞的鬼,咱们一步步来捋清楚:

问题根源

你原代码里的msg是行向量(比如[1 0 1 1 0 0 1 0 1]是1行9列的结构),但用randi([0, 1], 7,1)生成的是7行1列的列向量。当执行mseg=[msg zeros(1,N-1)]时,你试图把一个列向量和一个行向量做水平拼接(horzcat),MATLAB要求拼接的两个矩阵行数必须一致,这里7行≠1行,自然就抛出了Dimension mismatch的错误。

两种解决方案

方案1:直接生成行向量的随机消息

把randi的维度参数调换顺序,生成1行7列的行向量,和原代码的维度逻辑完全匹配:

% 生成7位行格式的随机消息
msg = randi([0, 1], 1, 7); 
poly = [1 0 1 1]; 
[M, N] = size(poly); 
mseg = [msg zeros(1,N-1)]; 
[q, r] = deconv(mseg,poly); 
r = abs(r); 
for i=1:length(r) 
    a=r(i); 
    if mod(a,2) == 0 
        r(i)=0; 
    else 
        r(i)=1; 
    end 
end 
crc = r(length(msg)+1:end);
frame = bitor(mseg,r);

方案2:将列向量转置为行向量

如果你一定要用列向量生成(比如其他逻辑依赖列向量结构),只需要加一行转置操作,把列向量转成行向量再执行后续代码:

% 生成列向量后转置为行向量
msg = randi([0, 1], 7, 1);
msg = msg'; % 关键:转置为1行7列的行向量
poly = [1 0 1 1]; 
[M, N] = size(poly); 
mseg = [msg zeros(1,N-1)]; 
[q, r] = deconv(mseg,poly); 
r = abs(r); 
for i=1:length(r) 
    a=r(i); 
    if mod(a,2) == 0 
        r(i)=0; 
    else 
        r(i)=1; 
    end 
end 
crc = r(length(msg)+1:end);
frame = bitor(mseg,r);

额外小优化

你那个循环判断奇偶的部分,可以用MATLAB的向量化操作简化,不用写for循环,效率更高:

% 替换原有的for循环
r = mod(abs(r), 2);

这一行代码就能实现和原循环完全一样的效果,把r里的元素都转成0或1的二进制值。

内容的提问来源于stack exchange,提问作者Masoum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:33:25