matlab - 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 中做到这一点吗?以及如何做到这一点?
先感谢您。
解决方案
你的问题不是很清楚。我认为您可能需要考虑您想要的定点格式是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)
推荐阅读
- php - 如何从 GoDaddy 服务器连接到 Google Cloud SQL 数据库
- c# - system.net.webclient.DownloadFile 方法无法识别“#”之后的字符
- python - 石头、纸、剪刀和重启选项
- web-services - 是否有任何公共 Web 服务将检查 MTLS 证书并使用 application/json 响应
- javascript - 如何在 testcafe 中执行 X 次按键?
- r - 我无法使用 ggplot2 重现小提琴情节
- angular - Angular Component调用调用服务的Service:两者都需要对结果做一些事情
- android - 如何在 chaquopy python 中使用路径名?
- java - 如何覆盖环境条目?
- kotlin - 如何使用 Kotlin 在 for 循环中创建变量