十进制有符号小数转换成二进制数的实现_Matlab实现_归一化处理

在一些数据处理过程中,需要将一组十进制小数转换成二进制数存储或者计算,这种操作在FPGA的使用中会经常遇到。本文分析了十进制小数转换成二进制数的方法。

1.N位二进制数的取值范围

N位无符号型(unsigned)取值范围:2^N - 1 ~ 0;(可以表示2^N个数)

N位有符号型(signed)取值范围:-2^(N-1) ~ 2^(N-1) - 1;(可以表示2^N个数)

举例:N=10

无符号取值范围:1023~0;(2^10 - 1~0)

有符号取值范围:-512 ~ 511;(-2^9 ~ 2^9 - 1

2.十进制有符号小数量化为二进制数

第一步:确认需要量化的二进制数的位数;

第二步:将一组十进制数据进行归一化处理;

第三步:将归一化后的数据扩大2^(N-1) - 1 倍并进行取整;

第四步:判断数据大小,如果是正数也保持不变,如果是复数取其补码;

第五步:可以按照2进制或者16进制进行存储或者显示;

3.Matlab仿真代码

clear all
clc
% Step1:Quantization Widths(bits)
width = 12;
% Generate decimal fraction
N = 128;
for k = 1:N
    Data(k,1) = exp(-k/N) - 0.5;
end
% Step2:Normalize the Data
Nor_Data = Data/abs(max(Data)); 
% Step3:Multiply by 2^N-1 and Round numbers
Round_Data = fix(Nor_Data * ((2^(width - 1)) - 1));
% Step4:Judge Round_Data
for k = 1:length(Round_Data)
    if(Round_Data(k) >= 0)
        Round_Data(k) = Round_Data(k); 
    else
        Round_Data(k) = Round_Data(k) + 2^(width);
    end
end
% Step5:Display bin and hex
% Round_Data_bin = double(dec2bin(Round_Data,12)) - double('0');
Round_Data_bin = dec2bin(Round_Data,12);
for k = 1:length(Round_Data_bin(:,1))
    fprintf('Data(%d) = %.4f\t二进制显示 = ',k,Data(k));
    for j = 1:length(Round_Data_bin(1,:))
        fprintf('%c',Round_Data_bin(k,j));
    end
    fprintf('\t十六进制显示 = %03X\n',Round_Data(k))
end

仿真结果:

 

  • 22
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值