Matlab AWGN通道输出实数而不是复数

Matlab AWGN通道输出实数而不是复数,matlab,Matlab,当我在Matlab中运行我的代码时,我得到了这个错误。但我可以在链路上运行示例“通过AWGN信道传输缩短的RS编码、256 QAM调制的符号流”,而不会出现任何问题 当我在代码中检查变量chnData中的值时,我看到了实数。当我在示例代码中检查变量chan中的值时,我看到了复数。我的代码怎么了 PS:我正在研究R2012b,通讯工具箱版本是5.3 错误消息: Error using comm.RectangularQAMDemodulator/step Complexity mismatch w

当我在Matlab中运行我的代码时,我得到了这个错误。但我可以在链路上运行示例“通过AWGN信道传输缩短的RS编码、256 QAM调制的符号流”,而不会出现任何问题

当我在代码中检查变量chnData中的值时,我看到了实数。当我在示例代码中检查变量chan中的值时,我看到了复数。我的代码怎么了

PS:我正在研究R2012b,通讯工具箱版本是5.3

错误消息:

Error using comm.RectangularQAMDemodulator/step
Complexity mismatch with input 1; expected complex, got real.
Error in project (line 41)
            demData = step(qamDemodulator, chnData);
我的代码:

close all;
clear all;
clc;
enableRS = 1;
M = 16; % M-QAM
N = 15; % Reed-Solomon Coding : codelength
K = 11; % Reed-Solomon Coding : wordlength
EbNo = [-5:5]; % AWGN Channel : bit-to-noise energy
bps = log2(M); % AWGN Channel : bits per symbol
rsEncoder = comm.RSEncoder('CodewordLength', N, ...
                           'MessageLength',  K);
rsDecoder = comm.RSDecoder('CodewordLength', N, ...
                           'MessageLength',  K);
qamModulator = comm.RectangularQAMModulator('ModulationOrder', M, ...
                                            'NormalizationMethod', 'Average power');
qamDemodulator = comm.RectangularQAMDemodulator('ModulationOrder', M, ...
                                                'NormalizationMethod', 'Average power');
awgnChannel = comm.AWGNChannel('EbNo', EbNo, ...
                               'BitsPerSymbol', bps);
errorRate = comm.ErrorRate;
[H W] = size(EbNo);
errors = zeros(1,W);
for e = 1:W
    error = zeros(1,3);
    awgnChannel.EbNo = EbNo(e);
    if enableRS == 1
        while error(2) < 100 && error(3) < 1e7
             txData = randi([0 1], K, bps);
            encData = step(rsEncoder, bi2de(txData));
            modData = step(qamModulator, encData);
            chnData = step(awgnChannel, encData);
            demData = step(qamDemodulator, chnData);
            decData = step(rsDecoder, de2bi(demData));
             rxData = decData;
               error = step(errorRate, bi2de(txData), bi2de(rxData));
        end
    end
    errors(e) = error(1);
end
if enableRS == 1
    semilogy(EbNo, errors);
    grid;
    xlabel('Eb/No (db)');
    ylabel('Bit Error Rate');
    hold;
    uncoded = berawgn(EbNo, 'qam', M);
    semilogy(EbNo, uncoded);
end
全部关闭;
清除所有;
clc;
使能因素=1;
M=16;%M-QAM
N=15;%里德-所罗门编码:码长
K=11;%里德-所罗门编码:字长
EbNo=[-5:5];%AWGN信道:位到噪声能量
bps=log2(M);%AWGN信道:每符号位
rsEncoder=comm.rsEncoder('CodewordLength',N。。。
'MessageLength',K);
rsDecoder=comm.rsDecoder('CodewordLength',N。。。
'MessageLength',K);
qamModulator=comm.RectangularQAMModulator('ModulationOrder',M。。。
“归一化方法”、“平均功率”);
QamDemomodulator=comm.rectangularQamDemomodulator('ModulationOrder',M。。。
“归一化方法”、“平均功率”);
awgnChannel=comm.awgnChannel('EbNo',EbNo。。。
“BitsPerSymbol”,bps);
错误率=通信错误率;
[H W]=尺寸(EbNo);
误差=零(1,W);
对于e=1:W
误差=零(1,3);
awgnChannel.EbNo=EbNo(e);
如果启用码==1
错误(2)<100和错误(3)<1e7
txData=randi([01],K,bps);
encData=步长(rsEncoder,bi2de(txData));
modData=阶跃(qamModulator,encData);
chnData=步长(awgnChannel,encData);
demData=步长(QamDemomodulator,chnData);
decData=step(rsDecoder,de2bi(demData));
rxData=decData;
错误=步长(错误率、bi2de(txData)、bi2de(rxData));
结束
结束
误差(e)=误差(1);
结束
如果启用码==1
符号学(EbNo,错误);
网格;
xlabel(“Eb/No(db)”;
ylabel(‘误码率’);
持有
未编码=berawgn(EbNo,'qam',M);
符号学(EbNo,未编码);
结束

发现了错误!现在修好了

modData = step(qamModulator, encData);
chnData = step(awgnChannel, encData); // Should have been modData

AWGNChannel必须提供与其输入相同的输出复杂性。它不能增加信号的复杂性。您需要在AWGNChannel之前检查数据。