出现了矩阵维度不一致的情况
时间: 2023-11-29 11:04:22 浏览: 129
谢谢指出错误。可能是因为在计算误码率时,使用了解调后的输出进行计算,而解调后的输出是一个行向量,而应该是一个列向量。修改代码如下:
```matlab
clc; clear all;
a = load('D:\bin\optisystem\imagPart.txt');
b = load('D:\bin\optisystem\realPart.txt');
for i=1:4096
a1(i)=a(i*16);
b1(i)=b(i*16);
end
S = a1 + 1i * b1;
S = S.';
qam_max = max(abs(S(:))); % 计算16QAM数组的最大值
qam_min = min(abs(S(:))); % 计算16QAM数组的最小值
Eb = 1; % 符号能量为1
N0 = 0.1; % 噪声功率谱密度为0.1
sigma = sqrt(N0/2); % 噪声标准差
M = 16; % 16QAM调制
bps = comm.BPSKDemodulator(); % 创建BPS解调器对象
demod_out = reshape(step(bps, S), [], 1); % 对16QAM数组进行BPS解调
errors = sum(demod_out ~= (0:M-1).'); % 统计误码数
BER = errors / numel(demod_out); % 计算误码率
linewidths = logspace(-4, 2, 100); % 生成100个对数间距的线宽值
for i = 1:length(linewidths)
linew = linewidths(i);
SNR = qam_max^2 / (2 * sigma^2 * linew^2); % 计算信噪比
ber(i) = berawgn(SNR, 'qam', M); % 计算误码率
end
semilogx(linewidths, ber, 'LineWidth', 2); % 绘制线宽容忍度曲线图
xlabel('线宽'); % 设置x轴标签
ylabel('误码率'); % 设置y轴标签
title('16QAM使用BPS算法的线宽容忍度曲线图'); % 设置标题
grid on; % 打开网格线
```
在第13行,我们使用reshape函数将BPS解调器的输出转换为列向量。
阅读全文