⼗进制有符号⼩数转换成⼆进制数的实现_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
仿真结果:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论