首页 > 解决方案 > matlab定点二元运算

问题描述

我有这些十进制值:

x1=-43.00488
x4=11.5048
y1=-11.5048
y4=-43.004  

我将它们转换为相等的二进制值,格式为 Q7.10

所以,这些是二进制值:

% 所有的二进制值都是有符号的并采用 Q7.10 格式。

x1=1010100_1111111011   
x4=0001011_1000000101
y1=1110100_0111111011
y4=1010100_1111111011

我想在 matlab 中使用二进制值执行此操作:

% 这一行等于将 "((x1-x4) / (y1-y4))" 乘以 2^10;

 x1x4_div_y1y4 = ((x1-x4) / (y1-y4)) << 10  

在尝试执行此操作时,我遇到了一些困难,

首先,我不能在 Matlab 中声明负二进制值。其次,我们是否允许对二进制值进行数学运算,还是应该对十进制值进行运算然后将它们转换为二进制值?

但是我需要用二进制操作来做这个操作,这样我就可以在verilog hdl中实现它。

  a= ((-43.00488-11.5048) / (-11.5048+43.00488))*(2^10)

a =

  -1.7720e+03

我不确定这些陈述是否得到了真正的答案。我应该将它乘以 2^10 左右吗?

我想用二进制值做同样的操作。我可以在 Matlab 中做到这一点吗?以及如何做到这一点?

先感谢您。

标签: matlabmathbinaryfixed-point

解决方案


你的问题不是很清楚。我认为您可能需要考虑您想要的定点格式是x1x4_div_y1y4什么。我不确定您是否真的想乘以 2^10,或者您只是因为您认为需要而这样做。

但是,既然你说这是你想要做的操作,我会假设你真的想乘以 2^10。

下面的代码将二进制数转换为定点,进行所需的计算,然后将结果转换回二进制。

您的十进制结果(-1772)是正确的。您只需要将其转换回签名的二进制文件。但是要小心,因为这个数字不能用 Q7.10 格式表示(因为你乘以 2^10,所以现在它太大了)。

在下面的代码中,我只是假设您想要有符号 Q16.8 格式的结果(我将其解释为 1 个符号位 + 16 个整数位 + 8 个小数位)。如果你想要不同的东西,你可以改变这些数字。

close all; clear all; clc;

% All of  the binary values are signed and in Q7.10 format.
x1 = '10101001111111011';
x4 = '00010111000000101';
y1 = '11101000111111011';
y4 = '10101001111111011';

% Convert to signed integers
x1 = -bin2dec(x1(1))*2^16 + bin2dec(x1(2:end));
x4 = -bin2dec(x4(1))*2^16 + bin2dec(x4(2:end));
y1 = -bin2dec(y1(1))*2^16 + bin2dec(y1(2:end));
y4 = -bin2dec(y4(1))*2^16 + bin2dec(y4(2:end));

% Convert from integer to fixed point values
x1 = x1 / 2^10;
x4 = x4 / 2^10;
y1 = y1 / 2^10;
y4 = y4 / 2^10;

% The operation I want to do
x1x4_div_y1y4 = ((x1-x4) / (y1-y4)) * 2^10; % << 10

% Convert back to binary...

% Let's assume we want signed Q16.8 output
INTEGER_BITS = 16;
FRACTIONAL_BITS = 8;

% Convert from fixed-point to integer
x1x4_div_y1y4 = round(x1x4_div_y1y4 * 2^FRACTIONAL_BITS);

% Handle the sign bit
if x1x4_div_y1y4 < 0
    x1x4_div_y1y4 = x1x4_div_y1y4 + 2*2^(INTEGER_BITS + FRACTIONAL_BITS);
end

% Convert to binary
x1x4_div_y1y4 = dec2bin(x1x4_div_y1y4, 1+INTEGER_BITS+FRACTIONAL_BITS)

推荐阅读