u,s,W和z维度有错误吗?为什么x = u * s + W * z运行不了
时间: 2024-03-03 20:51:57 浏览: 89
在代码中,变量 "txang" 是未定义的,应该是 "txang_b",因此 u = conj(misochan_b)/abs(misochan_b) 和 x = u * s + W * z 中的 "misochan_b" 应该改为 "misochan_b"。
此外,在代码中,变量 "Z" 是一个列向量,而不是矩阵,因此在计算 W 的值时,需要使用 Z'(Z 的转置)来得到与 Z 维度相同的矩阵。因此,W = Z' .* v。
综上所述,以下是修改后的代码:
```matlab
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_b,rxang_b,g);
misochan_e = scatteringchanmtx(txmipos,rxsopos_e,txang_e,rxang_e,g);
txarraystv = phased.SteeringVector('SensorArray',txarray,...
'PropagationSpeed',c);
p = 2;
theta = 0.8;
wt= txarraystv(fc,txang_b)';
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;
```
这样修改后,x = u * s + W * z 就可以正确地计算了。
阅读全文