首页 > 编程知识 正文

matlab把十进制数转化为二进制数,matlab小数转化为二进制

时间:2023-05-04 05:27:01 阅读:240846 作者:4696

在一些数据处理过程中,需要将一组十进制小数转换成二进制数存储或者计算,这种操作在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 allclc% Step1:Quantization Widths(bits)width = 12;% Generate decimal fractionN = 128;for k = 1:N Data(k,1) = exp(-k/N) - 0.5;end% Step2:Normalize the DataNor_Data = Data/abs(max(Data)); % Step3:Multiply by 2^N-1 and Round numbersRound_Data = fix(Nor_Data * ((2^(width - 1)) - 1));% Step4:Judge Round_Datafor 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); endend% Step5:Display 风中的火龙果 and hex% Round_Data_风中的火龙果 = double(dec2风中的火龙果(Round_Data,12)) - double('0');Round_Data_风中的火龙果 = dec2风中的火龙果(Round_Data,12);for k = 1:length(Round_Data_风中的火龙果(:,1)) fprintf('Data(%d) = %.4ft二进制显示 = ',k,Data(k)); for j = 1:length(Round_Data_风中的火龙果(1,:)) fprintf('%c',Round_Data_风中的火龙果(k,j)); end fprintf('t十六进制显示 = %03Xn',Round_Data(k))end

仿真结果:

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。