2021-05-31 matlab进制转换

matlab进制转换


最近在做一个关于编码的算法,用到了进制转换关系。查了一下,matlab中好像没有对整个数组进行进制转换的可调函数,所以自己编写了一个。原理比较简单,也没有很奇怪的坑,这里就不详述啦。

主函数如下:

clear all;
clc;

M = 8;
number = 17;
bits = randi([0,1],1,number)         %产生二进制比特流
% 2 -- M
[s0] = B2M(bits,M);
% M -- 2
final_bits = M2B(s0,M);

final_bits = final_bits(1:number);                  %去掉补充的零元素
error_num = length(find(final_bits~=bits))/number   %误码率计算

两个调用函数分别如下:

function [s0] = B2M(bits,M)
% func: 2进制数组bits向M进制的转换,不丢失末尾信息
% bits: 2进制数组;
% M: 转换进制;
% s0: 转换后的M进制数据;
    number = length(bits);
    d = ceil(number/log2(M));
    zero_num = d*log2(M) - number;
    sy = [bits,zeros(1,zero_num)];       %补零:避免丢失信息
    s0 = zeros(1,d);
    for ii = 1:d
        for jj = 1:log2(M)
        s0(ii) = s0(ii) + sy(ii*log2(M)-(jj-1))*2^(jj-1);    
        end       
    end 
end
function [final_bits] = M2B(s0,M)
% func: 多进制数组bits向2进制的转换
% s0: 多进制数组;
% M: 多进制;
% final_bits: 转换后的二进制数据;
    for jj = 1:log2(M)
        layer(jj) = 2^(log2(M)-jj);
    end
    final_bits = zeros(1,length(s0)*log2(M));
    for ii = 1:length(s0)
        for jj = 1:log2(M)
            final_bits((ii-1)*log2(M)+jj) = floor(s0(ii)/layer(jj));
            s0(ii) = s0(ii) - final_bits((ii-1)*log2(M)+jj)*layer(jj);
        end
    end 
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值