Main Content

biterr

비트 오류 개수 및 비트 오류율(BER)

설명

예제

[number,ratio] = biterr(x,y)x의 요소의 부호 없는 2진수 표현과 y의 요소의 부호 없는 2진수 표현을 비교합니다. 이 함수는 서로 다른 비트의 개수인 number와 함께 총 비트 수에 대한 number의 비율인 ratio를 비교 결과로 반환합니다. 이 함수는 xy의 크기를 기반으로 비교 순서를 결정합니다. 자세한 내용은 알고리즘 섹션을 참조하십시오.

또한 [number,ratio] = biterr(x,y,k)xy의 각 요소의 최대 비트 수인 k를 지정합니다. x 또는 y의 요소의 부호 없는 2진수 표현이 k자리보다 크면 함수가 오류를 발생시킵니다.

예제

[number,ratio] = biterr(x,y,k,flag)는 함수가 요소를 비교하고 출력값을 계산할 때 사용하는 방법에 대한 디폴트 설정을 재정의하는 flag를 지정합니다. 자세한 내용은 알고리즘 섹션을 참조하십시오.

[number,ratio,individual] = biterr(___)xy의 2진수 비교 결과를 행렬 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 채널에 통과시킵니다.

  • 수신된 신호를 복조합니다.

  • 복조된 심볼을 2진 데이터로 변환합니다.

  • 비트 오류 개수를 계산합니다.

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의 각 요소를 부호 없는 2진수 표현으로 변환합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

xy의 입력 요소의 최대 비트 수로, 양의 정수로 지정됩니다. x 또는 y의 요소의 2진수 표현에 필요한 비트의 수가 k보다 크면 함수 오류가 발생합니다.

k를 설정하지 않으면 함수는 xy의 요소 중 가장 큰 요소의 2진수 표현의 비트 수로 이 값을 설정합니다.

데이터형: single | double

디폴트 설정을 재정의하기 위한 플래그로, 'overall', 'row-wise' 또는 'column-wise'로 지정됩니다. 플래그는 함수가 입력 x,y의 요소를 비교하고 출력을 계산하는 방법을 지정합니다. 자세한 내용은 알고리즘 섹션을 참조하십시오.

데이터형: string | char

출력 인수

모두 축소

비트 오류 개수로, 음이 아닌 정수 또는 정수 벡터로 반환됩니다.

데이터형: single | double

비트 오류율로, 스칼라로 반환됩니다. ratio는 2진수 표현에 사용된 총 비트 수에 대한 비트 오류 개수 number의 비율입니다. 총 비트 수는 입력 x,y 중 더 작은 쪽 입력의 요소 개수에 k를 곱한 값입니다.

각 개별 2진수 비교의 결과로, 입력 xy 중 더 큰 쪽 입력의 차원과 동일한 차원의 행렬로 반환됩니다. 각 요소는 쌍의 두 요소 간 서로 다른 비트의 개수를 나타냅니다. 자세한 내용은 알고리즘 섹션을 참조하십시오.

데이터형: single | double

알고리즘

모두 축소

크기를 기반으로 입력 비교

함수는 xy의 크기를 사용하여 해당 요소를 비교하는 순서를 결정합니다.

  • 입력이 동일한 차원의 행렬인 경우, 함수는 입력값을 요소별로 비교합니다. 이 경우 number는 음이 아닌 정수입니다. 예를 들어 그림에서 (a)의 경우를 참조하십시오.

  • 한 입력이 행렬이고 다른 입력이 열 벡터인 경우, 함수는 행렬의 각 열을 요소별로 열 벡터와 비교합니다. 행렬의 행 개수는 열 벡터의 길이와 같아야 합니다. 즉, 행렬의 차원이 m×n인 경우 열 벡터의 차원은 m×1이어야 합니다. 예를 들어 그림에서 (b)의 경우를 참조하십시오.

  • 한 입력값이 행렬이고 다른 입력값이 행 벡터인 경우 함수는 행렬의 각 행을 요소별로 행 벡터와 비교합니다. 행렬의 열 개수는 행 벡터의 길이와 같아야 합니다. 즉, 행렬의 차원이 m×n인 경우 행 벡터의 차원은 1× n이어야 합니다. 예를 들어 그림에서 (c)의 경우를 참조하십시오.

Shows comparison based on two matrices, a matrix and column vector, or row vectors.

플래그를 기반으로 입력 비교

다음 표에는 다양한 flag 값을 기반으로 출력을 계산하는 방법이 나와 있습니다. 표에서 x는 행렬로 간주되며 y의 크기는 다양합니다.

y의 크기flag비교 유형number총 비트 수
행렬 'overall'(디폴트 값)요소별총 비트 오류 개수y의 요소 개수에 k를 곱한 값
'row-wise'x의 m번째 행과 y의 m번째 행각 행의 비트 오류를 나타내는 요소로 구성된 열 벡터 y의 요소 개수에 k를 곱한 값
'column-wise'x의 m번째 열과 y의 m번째 열 각 열의 비트 오류를 나타내는 요소로 구성된 행 벡터y의 요소 개수에 k를 곱한 값
행 벡터 'overall'yx의 각 행총 비트 오류 개수x의 요소 개수에 k를 곱한 값
'row-wise'(디폴트 값) yx의 각 행x의 각 행의 비트 오류를 나타내는 요소로 구성된 열 벡터y의 크기에 k를 곱한 값
열 벡터 'overall'yx의 각 열총 비트 오류 개수x의 요소 개수에 k를 곱한 값
'column-wise'(디폴트 값) yx의 각 열x의 각 열의 비트 오류를 나타내는 요소로 구성된 행 벡터y의 크기에 k를 곱한 값

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2006a 이전에 개발됨

모두 확장

참고 항목

| |