u = conj(misochan_b') * inv(abs(misochan_b)^2);解释这行代码
时间: 2024-03-03 14:52:26 浏览: 113
这行代码的作用是计算 MISO 系统中的接收信号的加权系数,即 $u$。具体来说,该行代码的实现步骤如下:
1. `misochan_b'` 取 `misochan_b` 的共轭转置(即 Hermitian 转置),得到新的矩阵。
2. `abs(misochan_b)^2` 计算 `misochan_b` 的模长的平方,得到一个标量。
3. `inv(abs(misochan_b)^2)` 计算 `abs(misochan_b)^2` 的倒数,即模长的平方的倒数,得到一个标量。
4. `conj(misochan_b') * inv(abs(misochan_b)^2)` 将步骤 1 和步骤 3 的结果相乘,得到一个标量。
5. 将步骤 4 的结果赋值给变量 `u`,即 $u = \frac{\bar{h}}{|h|^2}$,其中 $\bar{h}$ 表示 $h$ 的共轭转置,$|h|$ 表示 $h$ 的模长。
因此,该行代码的作用是计算 MISO 系统中的接收信号的加权系数,用于接收信号的合成。
相关问题
u = conj(misochan_b')/abs(misochan_b);错误使用 / , 矩阵维度不一致,该怎么改
在 MATLAB 中,`/` 是矩阵左除运算符,要求左边的矩阵维度必须和右边矩阵维度一致,而且左边矩阵的列数必须等于右边矩阵的行数。在该行代码中,`misochan_b` 是一个矩阵,因此不能直接使用 `/` 运算符。您可以使用逆矩阵和乘法来实现左除。将该行代码改为以下代码即可:
```
u = conj(misochan_b') * inv(abs(misochan_b)^2);
```
这里使用了逆矩阵 `inv(abs(misochan_b)^2)`,并使用矩阵乘法 `*` 将其与 `conj(misochan_b')` 相乘,得到左除的结果。
c = 3e8; fc = 60e9; lambda = c/fc; rng(6466); txcenter = [0;0;0]; rxcenter_b = [1500;500;0]; rxcenter_e = [1500;-500;0]; [~,txang_b] = rangeangle(rxcenter_b,txcenter); [~,txang_e] = rangeangle(rxcenter_e,txcenter); [~,rxang_b] = rangeangle(txcenter,rxcenter_b); [~,rxang_e] = rangeangle(txcenter,rxcenter_e); rxsopos_b = [0;0;0]; rxsopos_e = [0;0;0]; g = 1; Nsamp = 1e6; ebn0_param = -10:2:10; Nsnr = numel(ebn0_param); txarray = phased.ULA('NumElements',4,'ElementSpacing',lambda/2); txmipos = getElementPosition(txarray)/lambda; misochan_b = scatteringchanmtx(txmipos,rxsopos_b,txang,rxang_b,g); misochan_e = scatteringchanmtx(txmipos,rxsopos_e,txang,rxang_e,g); txarraystv = phased.SteeringVector('SensorArray',txarray,... 'PropagationSpeed',c); p = 2; theta = 0.8; wt= txarraystv(fc,txang)'; u = conj(misochan_b)/abs(misochan_b); s = randi([0 1],Nsamp,1); Z = null(misochan_b, 'r'); v = randn(Nsamp, 1); v = v * sqrt(theta * p / 3) / std(v); W = Z .* v; z = randn(Nsamp, 1); x = u * s + W * z; ber_miso_b = helperMIMOBER(misochan_b,x,ebn0_param,wt,1)/Nsamp; ber_miso_e= helperMIMOBER(misochan_e,x,ebn0_param,wt,1)/Nsamp; sigma = 0.5; numerator_b = abs(misochan_b)^2 * (1-theta) * p; denominator_b = sigma^2; gamma_b = numerator_b/ denominator_b; numerator_e = abs(misochan_e * u)^2 * (1-theta) * p; denominator_e = norm(misochan_e * W)^2 * theta * p + sigma^2; gamma_e = numerator_e / denominator_e;以上代码中u,s,W和z分别是什么
在上述代码中:
- 变量 "u" 是 misochan_b 的共轭转置除以其模长,即 u = conj(misochan_b) / abs(misochan_b),表示计算 misochan_b 的逆矩阵。在接下来的代码中,u 用来计算 x 的值。
- 变量 "s" 是一个随机的二进制序列,表示待传输的信息序列。
- 变量 "W" 是一个与 Z 维度相同的矩阵,用来表示添加到信号上的噪声。其中,Z 是 misochan_b 的零空间矩阵,即 null(misochan_b, 'r'),表示与 misochan_b 正交的列向量矩阵。变量 "v" 是一个随机的高斯白噪声序列,通过标准化后,用来生成 W 的值。
- 变量 "z" 是一个随机的高斯白噪声序列,用来表示信道噪声。
在上述代码中,u、s、W 和 z 都是用来计算 x 的值的,具体来说,x = u * s + W * z。
阅读全文