2017-05-31 6 views
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 
+0

AWGNChannelは、入力と同じ出力の複雑さを提供する必要があります。それは信号に複雑さを加えることはできません。 AWGNChannelの前にデータをチェックする必要があります。 – Navan

答えて

0

が間違いを発見!今は修正されています。

modData = step(qamModulator, encData); 
chnData = step(awgnChannel, encData); // Should have been modData 
関連する問題