最近的一个客户需求,客户想看一下我们的产品产生的prbs并进行一些分析。
我在“”豆包“”这里找到了一个pbs的matlab的生成程序,效果就是连续生成prbs7,然后每次都在原来的基础之上添加。
生成的matlab的PRBS7代码修改如下:
% 初始化寄存器
registers = zeros(1, 7);
registers(1) = 1;
registers(2) = 1;
registers(3) = 1;
registers(4) = 1;
registers(5) = 1;
registers(6) = 1;
registers(7) = 1;
% 生成 PRBS7 序列
output = zeros(1, 127);
for i = 1:127
output(i) = registers(7);
temp = registers(6);
for j = 7:-1:2
registers(j) = registers(j - 1);
end
registers(1) = xor(output(i), temp);
end
% 将二进制序列转换为十六进制字符串
% 这里存在几个问题:
% 1. num2str() 函数会在数字之间添加空格,这会导致 bin2dec() 无法正确解析
% 2. bin2dec() 函数只能处理最多 52 位的二进制数,而我们有 127 位
% 3. 直接将整个序列转换为十进制再转十六进制可能会导致精度损失
% 正确的方法应该是每 4 位二进制数转换为一个十六进制字符
hexOutput = '';
for i = 1:4:length(output)
chunk = output(i:min(i+3, end));
if length(chunk) < 4
chunk = [chunk, zeros(1, 4-length(chunk))]; % 补零
end
hexDigit = dec2hex(bin2dec(num2str(chunk, '%d')));
hexOutput = [hexOutput, hexDigit];
end
% 将十六进制内容保存到 txt 文件
fid = fopen('PRBS7_hex_output.txt', 'a+');
fprintf(fid, '%s\n', hexOutput);
fclose(fid);
效果:
分析:
1.从生成的数据可知,每次Prbs7生成的内容都是一样的。