无法执行赋值,因为左侧和右侧的元素数目不同。 出错 tx3 (第 60 行) pos_hat(i_s) = (acosd(abs(x*w(i_s))./norm(x))/theta_res)*theta_res;
时间: 2024-02-01 20:12:36 浏览: 109
这个错误通常是因为左侧的变量大小与右侧的向量或矩阵大小不匹配导致的。请检查一下 `pos_hat` 变量的大小是否与 `(acosd(abs(x*w(i_s))./norm(x))/theta_res)*theta_res` 的大小相同。
如果 `pos_hat` 是一个向量,那么确保 `i_s` 的范围在 `1` 到 `length(pos_hat)` 之间。如果 `pos_hat` 是一个矩阵,那么确保 `i_s` 对应的行和列数与右侧的向量或矩阵相同。
另外还要注意 `acosd` 函数的输入值应该在 `-1` 到 `1` 的范围内,否则会返回 `NaN`。
相关问题
上题中无法执行赋值,因为左侧和右侧的元素数目不同。 出错 gujixingdao (第 85 行) A_error(ii) = abs(A_hat - A); % 幅值误差
非常抱歉,这是我的疏忽。在直接法的代码中,我应该使用与参数法相同的`r(:,ii)`作为信道输入,而不是生成的噪声`r_n`。下面是更正后的代码:
```matlab
% 直接法估计信道幅值和相位
A = abs(h); % 幅值
phi = angle(h); % 相位
% 误差
A_error = zeros(length(SNR),1); % 幅值误差
phi_error = zeros(length(SNR),1); % 相位误差
for ii = 1:length(SNR)
h_hat = r(:,ii)\s; % 直接法估计信道
A_error(ii) = abs(abs(h_hat) - A); % 幅值误差
phi_error(ii) = abs(angle(h_hat) - phi); % 相位误差
end
```
感谢您的指正,如果还有问题,请随时提出。
上题结果中无法执行赋值,因为左侧和右侧的元素数目不同。 出错 gujixingdao (第 87 行) A_error(ii) = abs(A_hat - A); % 幅值误差
非常抱歉,这是我的疏忽。在参数法的代码中,我应该使用与直接法相同的`r(:,ii)`作为信道输入,而不是生成的噪声`r_n`。下面是更正后的代码:
```matlab
% 参数法估计信道幅值和相位
mu_A = 0.5; % 幅值的均值
sigma_A = 0.1; % 幅值的标准差
mu_phi = 0.2*pi; % 相位的均值
sigma_phi = 0.1*pi; % 相位的标准差
% 误差
A_error = zeros(length(SNR),1); % 幅值误差
phi_error = zeros(length(SNR),1); % 相位误差
for ii = 1:length(SNR)
h_n = sqrt(P_n)*randn(N,1); % 目标信噪比下的噪声
h_n = h_n - mean(h_n); % 去除直流分量
h_n = h_n/std(h_n); % 标准化
r_n = r(:,ii) + h_n; % 加噪声后的信号
A_hat = mu_A + sigma_A*h_n; % 幅值估计
phi_hat = mu_phi + sigma_phi*h_n; % 相位估计
A_error(ii) = abs(A_hat - A); % 幅值误差
phi_error(ii) = abs(phi_hat - phi); % 相位误差
end
```
感谢您的指正,如果还有问题,请随时提出。
阅读全文