主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

biterr

计算误码数和误码率 (BER)

说明

[number,ratio] = biterr(x,y)x 中的元素的无符号二进制表示与 y 中的元素进行比较。该函数返回 number(即比较中不同的比特数)和 ratio(即 number 与总比特数的比值)。该函数根据 xy 的大小确定比较顺序。有关详细信息,请参阅算法部分。

示例

[number,ratio] = biterr(x,y,k) 还指定 k,即 xy 中每个元素的最大比特数。如果 xy 中任一元素的无符号二进制表示超过 k 位,该函数将报错。

[number,ratio] = biterr(x,y,k,flag) 指定 flag 来覆盖函数如何比较元素和计算输出的默认设置。有关详细信息,请参阅算法部分。

示例

[number,ratio,individual] = biterr(___)xy 的二进制比较结果以矩阵 individual 形式返回。您可以指定上述语法中的任一输入参量组合。

示例

全部折叠

创建两个二值矩阵。

x = [0 0; 0 0; 0 0; 0 0]
x = 4×2

     0     0
     0     0
     0     0
     0     0

y = [0 0; 0 0; 0 0; 1 1]
y = 4×2

     0     0
     0     0
     0     0
     1     1

确定误码数。

numerrs = biterr(x,y)
numerrs = 
2

计算按列统计的误码数。

numerrs = biterr(x,y,[],'column-wise')
numerrs = 1×2

     1     1

计算按行统计的误码数。

numerrs = biterr(x,y,[],'row-wise')
numerrs = 4×1

     0
     0
     0
     2

计算总体误码数。行为与默认行为相同。

numerrs = biterr(x,y,[],'overall')
numerrs = 
2

解调含噪 64-QAM 信号,并估计一定范围内 Eb/No 值的误码率 (BER)。将 BER 估计值与理论值进行比较。

设置仿真参数。

M = 64;                 % Modulation order
k = log2(M);            % Bits per symbol
EbNoVec = (5:15);      % Eb/No values (dB)
numSymPerFrame = 100;   % Number of QAM symbols per frame

将 EbN0 值转换为 SNR。

snrdB =convertSNR(EbNoVec,"ebno","snr",BitsPerSymbol=k);

初始化结果向量。

berEst = zeros(size(EbNoVec));

主处理循环执行以下步骤。

  • 生成二进制数据并转换为 64 进制符号。

  • 对数据符号进行 QAM 调制。

  • 使调制信号通过 AWGN 信道。

  • 解调接收到的信号。

  • 将解调后的符号转换为二进制数据。

  • 计算误码数。

while 循环继续处理数据,直到遇到 200 个误码或传输 1e7 个比特。

for n = 1:length(snrdB)
    % Reset the error and bit counters
    numErrs = 0;
    numBits = 0;
    
    while numErrs < 200 && numBits < 1e7
        % Generate binary data and convert to symbols
        dataIn = randi([0 1],numSymPerFrame*k,1);
        dataSym = bit2int(dataIn,k);
        
        % QAM modulate using 'Gray' symbol mapping
        txSig = qammod(dataSym,M);
        
        % Pass through AWGN channel
        rxSig = awgn(txSig,snrdB(n),'measured');
        
        % Demodulate the noisy signal
        rxSym = qamdemod(rxSig,M);
        % Convert received symbols to bits
        dataOut = int2bit(rxSym,k);
        
        % Calculate the number of bit errors
        nErrors = biterr(dataIn,dataOut);
        
        % Increment the error and bit counters
        numErrs = numErrs + nErrors;
        numBits = numBits + numSymPerFrame*k;
    end
    
    % Estimate the BER
    berEst(n) = numErrs/numBits;
end

使用 berawgn 函数确定理论 BER 曲线。

berTheory = berawgn(EbNoVec,'qam',M);

绘制估计 BER 数据和理论 BER 数据。估计 BER 数据点与理论曲线良好吻合。

semilogy(EbNoVec,berEst,'*')
hold on
semilogy(EbNoVec,berTheory)
grid
legend('Estimated BER','Theoretical BER')
xlabel('Eb/No (dB)')
ylabel('Bit Error Rate')

Figure contains an axes object. The axes object with xlabel Eb/No (dB), ylabel Bit Error Rate contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Estimated BER, Theoretical BER.

输入参数

全部折叠

待比较的输入,指定为单独参量(以非负整数元素组成的向量或矩阵形式)。该函数将 xy 的每个元素转换为其无符号二进制表示以进行比较。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

xy 的输入元素的最大比特数,指定为正整数。如果 xy 中任一元素的二进制表示所需的比特数大于 k,该函数将报错。

如果您不设置 k,该函数会将其设置为 xy 中最大元素的二进制表示中的比特数。

数据类型: single | double

覆盖函数默认设置的标志,指定为 'overall''row-wise''column-wise'。标志指定函数如何比较输入 x,y 中的元素并计算输出。有关详细信息,请参阅算法部分。

数据类型: string | char

输出参量

全部折叠

误码数,以非负整数或整数向量形式返回。

数据类型: single | double

误码率,以标量形式返回。ratio 是误码数 number 与二进制表示中使用的总比特数的比值。总比特数是 k 乘以输入 x,y 中较小者中的条目数。

每个单独二进制比较的结果,以矩阵形式返回,其维度是输入 xy 中较大者的维度。每个元素指定对组中元素相差的比特数。有关详细信息,请参阅算法部分。

数据类型: single | double

算法

全部折叠

扩展功能

全部展开

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

版本历史记录

在 R2006a 之前推出

全部展开

另请参阅

| |