0
Matlabでコードを実行するとこのエラーが発生します。しかし、リンクhttps://www.mathworks.com/help/comm/ref/comm.rsencoder-class.htmlの「RS符号化された256-QAM変調シンボルストリームをAWGNチャネル経由で送信する」の例を問題なく実行することができます。AWGNチャネルは複合体の代わりに実数を出力します
私のコードで変数chnDataの値をチェックすると、実数が表示されます。サンプルコードで変数chanの値をチェックすると、複素数が表示されます。私のコードに何が問題なのですか?
PS:私はR2012bで作業しており、Communication Toolboxのバージョンは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
AWGNChannelは、入力と同じ出力の複雑さを提供する必要があります。それは信号に複雑さを加えることはできません。 AWGNChannelの前にデータをチェックする必要があります。 – Navan