2017-05-31 48 views
0

我在Matlab中運行我的代碼時出現此錯誤。但我可以在鏈接https://www.mathworks.com/help/comm/ref/comm.rsencoder-class.html上運行示例「通過AWGN通道發送縮短的RS編碼的256-QAM調製符號流」,而沒有任何問題。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 
相關問題