十进制数转为有符号定点数

本文介绍了一个用于在FPGA算法中进行有符号定点数转换的自定义函数,包括10进制整数和小数部分的二进制补码表示,以及如何配合用户界面实现数据转化,特别提及了-1.25转为fix16_12的示例。
摘要由CSDN通过智能技术生成

做FPGA算法经常用到有符号定点数,万能的百度竟然没找到好用的工具,有的竟然还要收费?为方便使用写了一个10进制转二进制的小函数,基于该函数可以添加一个UI,实现整个文件的数据转化。

function binaryComplement=decgetbin(N_inter,N_fract,decimalNumber)
% 输入任意十进制数   
% N_inter%有符号二进制整数位宽
% N_fract%小数位宽
% decimalNumber%输入数据
% 将十进制数拆分为整数部分和小数部分
integerPart = fix(decimalNumber);
fractionalPart = abs(decimalNumber - integerPart);         
% 转换整数部分为二进制补码形式
if integerPart >=0 && decimalNumber >=0
    integerBinary = dec2bin(integerPart, N_inter);
elseif integerPart < 0 && fractionalPart == 0
    integerBinary = dec2bin(abs(integerPart), N_inter);
elseif integerPart < 0 && fractionalPart ~= 0
    integerBinary = dec2bin(abs(integerPart), N_inter);
    for i = 1:numel(integerBinary)
        if integerBinary(i) == '0'
            integerBinary(i) = '1';
        else
            integerBinary(i) = '0';
        end
    end
    else
        for i = 1:N_inter
            integerBinary(i) = '1';
        end
end
integerBinary=num2str(integerBinary(:));
% 转换小数部分为二进制补码形式
fractionalBinary = '';
for i = 1:N_fract
    fractionalPart = fractionalPart * 2;
    bit = fix(fractionalPart);
    fractionalBinary = [fractionalBinary, num2str(bit)];
    fractionalPart = fractionalPart - bit;
end
%%%%%%%%
   % 将字符串转换为数字数组
    bits = str2num(fractionalBinary(:));
  if decimalNumber <0
    % 取反
    bits = ~bits;
    % 加1
    carry = 1;
    for i = length(bits):-1:1
        if bits(i) + carry == 2
            bits(i) = 0;
        else
            bits(i) = 1;
            carry = 0;
            break;
        end
    end
  end
% 将数字数组转换为字符串
fractionalBinary = num2str(bits);
%%%%%
% 显示结果
binaryComplement = [integerBinary;fractionalBinary]';
%disp(binaryComplement);
end

使用举例

-1.25转为fix16_12为:

使用时注意位宽问题,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值