bits和real之间的转换系统函数

bits, real, shortreal之间的转换

系统函数说明
$bitstoreal64bit的整数转换为双精度浮点数
$bitstoshortreal把64bit的整数转换为单精度浮点数
$realtobits双精度浮点数据转换为63bit整数
$shortrealtobits单精度浮点数据转换为63bit整数

例如:

	localparam [31:0] test = 32'h3fb0d05d;
	localparam [63:0] test2 = 64'h3fb0d05d;
	localparam [63:0] test3 = 64'hc00e35603fb0d05d;
	localparam [63:0] test_long = 64'h_3FF61A0BE5109071;
	real rr = 3.14;

	initial begin
		$display("$bitstoreal(test) = %h = %f", test, $bitstoreal(test));
    	$display("$bitstoreal(test3) = %h = %f", test3, $bitstoreal(test3));
		$display("$bitstoreal(test_long) = %h = %f", test_long, $bitstoreal(test_long));
    	
		$display("$bitstoshortreal(test) = %h = %f", test, $bitstoshortreal(test));
    	$display("$bitstoshortreal(test2) = %h = %f", test2, $bitstoshortreal(test2));

		$display("$realtobits(rr)		= %f = %h ", rr, $realtobits(rr)	);
		$display("$shortrealtobits(rr)  = %f = %h ", rr, $shortrealtobits(rr)	);
	end

打印结果:

# $bitstoreal(test) = 3fb0d05d = 0.000000
# $bitstoreal(test3) = c00e35603fb0d05d = -3.776062
# $bitstoreal(test_long) = 3ff61a0be5109071 = 1.381359
# $bitstoshortreal(test) = 3fb0d05d = 1.381359
# $bitstoshortreal(test2) = 000000003fb0d05d = 1.381359
# $realtobits(rr)		= 3.140000 = 40091eb851eb851f 
# $shortrealtobits(rr)  = 3.140000 = 4048f5c3 
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果不使用 `qammod` 函数实现 8QAM 调制,可以按照以下步骤进行: 1. 将原始数据转化为 8QAM 调制符号。 根据 8QAM 调制的定义,需要将每个原始数据映射到一个复平面上的点,然后对这些点进行调制。具体方法为:将原始数据分别转化为 3 位二进制数,然后将这些二进制数分别映射到复平面上的一个点,如下表所示: | 二进制数 | 映射点 | | :---: | :---: | | 000 | -3-3i | | 001 | -3-i | | 010 | -3+3i | | 011 | -3+i | | 100 | -1-3i | | 101 | -1-i | | 110 | -1+3i | | 111 | -1+i | 将原始数据转化为 8QAM 调制符号的代码如下: ```matlab % 将原始数据转换为 3 位二进制数 bits = dec2bin(data, 3) - '0'; % 将二进制数映射到复平面上的点 map = [-3-3i, -3-i, -3+3i, -3+i, -1-3i, -1-i, -1+3i, -1+i]; symbols = map(bi2de(bits)+1); ``` 首先,使用 `dec2bin` 函数将原始数据转换为 3 位二进制数,并将结果减去字符 '0' 的 ASCII 码,得到 0 或 1 的矩阵。 接着,根据上表将二进制数映射到复平面上的点,形成映射表 `map`,然后使用 `bi2de` 函数将 3 位二进制数转换为十进制数,并将结果加 1,得到 0-7 的整数,作为映射表的下标,从而得到对应的 8QAM 调制符号。 2. 对调制符号进行 I/Q 分量调制。 对于 8QAM 调制,需要分别对每个符号的实部和虚部进行调制。可以使用正弦和余弦函数生成基带信号,然后将基带信号与调制符号相乘,得到调制信号。 具体实现代码如下: ```matlab % 生成基带信号 t = linspace(0, 1, numBits); % 时间序列 fc = 10; % 载波频率 I = cos(2*pi*fc*t); % I 分量 Q = sin(2*pi*fc*t); % Q 分量 % 进行调制 txSig = zeros(numBits, 1); % 调制信号 for i = 1:numBits txSig(i) = real(symbols(i))*I(i) - imag(symbols(i))*Q(i); end ``` 首先,生成时间序列 `t`,然后指定载波频率 `fc`,生成 I/Q 分量的正弦和余弦信号。 接着,使用 `for` 循环对每个符号的实部和虚部进行调制,具体计算方式为:实部乘以 I 分量,虚部乘以 Q 分量,然后相减,得到调制信号。 需要注意的是,在进行调制前,需要对原始数据进行正交编码,以避免 I/Q 分量之间的干扰。正交编码可以使用 Walsh-Hadamard 码或其他码,具体方法根据需要进行确定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值