주요 콘텐츠

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

awgn

신호에 백색 가우스 잡음 추가

설명

Y = awgn(X,snr)은 벡터 신호 X에 백색 가우스 잡음을 추가합니다. 이 구문에서는 X의 전력을 0dBW로 간주합니다. 가산성 백색 가우스 잡음(AWGN)에 대한 자세한 내용은 AWGN이란? 항목을 참조하십시오.

Y = awgn(X,snr,signalpower)는 입력 신호 전력 값(단위: dBW)을 받습니다. 잡음을 추가하기 전에 X의 전력을 측정하려면 signalpower'measured'로 지정하십시오. 'measured' 옵션을 사용하면 페이딩으로 인해 입력 신호 전력이 시간에 따라 변하고 채널의 코히어런스 시간이 입력 지속 기간보다 큰 경우 루프에서 반복되는 awgn 함수 호출에 대해 요청된 평균 SNR이 생성되지 않습니다.

예제

Y = awgn(X,snr,signalpower,randobject)는 정규분포 랜덤 잡음 샘플을 생성하기 위해 추가로 난수 스트림 객체도 받습니다. 반복 가능한 잡음 샘플을 생성하는 방법에 대한 자세한 내용은 항목을 참조하십시오.

예제

Y = awgn(X,snr,signalpower,seed)는 입력 신호에 백색 가우스 잡음을 추가하는 데 사용되는 정규분포 난수 생성기를 초기화하기 위한 시드값을 지정합니다.

예제

Y = awgn(___,powertype)은 위에 열거된 구문에 나와 있는 입력 인수와 함께 신호 및 잡음 전력 유형을 'dB' 또는 'linear'로 지정합니다. SNR과 Es/N0Eb/N0과 같은 잡음의 상대 전력을 나타내는 척도 사이의 관계에 대한 자세한 내용은 AWGN 채널 잡음 수준 항목을 참조하십시오.

[Y,var] = awgn(___)은 랜덤 잡음 샘플을 생성하는 데 사용되는 총 잡음 분산도 선형 스케일로 반환합니다.

예제

모두 축소

이 예제에서는 채널 코딩을 사용하는 통신 링크에 대한 Eb/No(비트 에너지 대 잡음 밀도의 비)를 설정하는 방법을 보여줍니다.

리드-솔로몬 코드의 코드워드와 메시지 길이를 지정합니다. 변조 차수를 지정합니다.

N = 15;        % R-S codeword length in symbols
K = 9;         % R-S message length in symbols
M = 16;        % Modulation order
bps = log2(M); % Bits per symbol

(15,9) 리드-솔로몬 인코더와 16-PSK 변조기를 생성합니다. 비트 입력값을 받도록 객체를 지정합니다.

rsEncoder = comm.RSEncoder( ...
    CodewordLength=N, ...
    MessageLength=K, ...
    BitInput=true);

대응하는 리드-솔로몬 디코더와 16-PSK demodulator 객체를 만듭니다.

rsDecoder = comm.RSDecoder( ...
    CodewordLength=N, ...
    MessageLength=K, ...
    BitInput=true);

메시지 심볼 대 코드워드 길이의 비에 따라 리드-솔로몬 코드율을 계산합니다.

codeRate = K/N;

코딩되지 않은 Eb/No(단위: dB)를 지정합니다. 코드율과 심볼당 비트 수를 사용하여 코딩되지 않은 Eb/No를 대응하는 SNR로 변환합니다.

UncodedEbNo = 6;
SNR = convertSNR(UncodedEbNo,"ebno","SNR", ...
    BitsPerSymbol=bps, ...
    CodingRate=codeRate);

시뮬레이션에 대한 총 오류 수와 비트 수를 설정합니다. 정확성을 위해 비트 오류 개수가 충분히 발생할 때까지 시뮬레이션이 실행되어야 합니다. 총 비트 수는 시뮬레이션이 너무 오래 실행되지 않도록 하기 위해 사용됩니다.

totalErrors = 100;
totalBits = 1e6;

오류율 계산기 System object™를 생성하고 오류율 벡터를 초기화합니다.

errorRate = comm.ErrorRate;
errorVec = zeros(3,1);

BER을 확인하기 위해 시뮬레이션을 실행합니다.

while errorVec(2) < totalErrors && errorVec(3) < totalBits
    % Generate random bits
    dataIn = randi([0,1],360,1);
    % Add error correction capability by using the RS (15,9) encoder
    dataEnc = rsEncoder(dataIn);
    % Apply 16-PSK modulation
    txSig = pskmod(dataIn,M,InputType="bit");
    % Pass the modulated data through an AWGN channel
    rxSig = awgn(txSig,SNR);
    % Demodulate the received signal
    demodData = pskdemod(rxSig,M,OutputType="bit");
    % Decode the demodulated data with the RS (15,9) decoder
    dataOut = rsDecoder(demodData);
    % Collect error statistics
    errorVec = errorRate(dataIn,demodData);
end

결과로 생성된 비트 오류율을 표시합니다.

ber = errorVec(1)
ber = 
0.0935

톱니파를 만듭니다.

t = (0:0.1:60)';
x = sawtooth(t);

백색 가우스 잡음을 추가하고 결과를 플로팅합니다.

y = awgn(x,10,'measured');
plot(t,[x y])
legend('Original Signal','Signal with AWGN')

Plot of the original signal and the signal with AWGN.

가우스 잡음이 있는 상태에서 비사각형 16진 성상도를 사용하여 데이터를 송수신합니다. 잡음이 포함된 성상도의 산점도 플롯을 표시하고 두 개의 서로 다른 SNR에 대해 심볼 오류율(SER)을 추정합니다.

전화선 모뎀용 V.29 표준을 기반으로 16-QAM 성상도를 만듭니다.

c = [-5 -5i 5 5i -3 -3-3i -3i 3-3i 3 3+3i 3i -3+3i -1 -1i 1 1i];
sigpower = pow2db(mean(abs(c).^2));
M = length(c);

랜덤 심볼을 생성합니다.

data = randi([0 M-1],2000,1);

genqammod 함수를 사용하여 데이터를 변조합니다. 사용자 지정 성상도가 사각형이 아니므로 일반적인 QAM 변조가 필요합니다.

modData = genqammod(data,c);

신호를 SNR이 20dB인 AWGN 채널에 통과시킵니다.

rxSig = awgn(modData,20,sigpower);

수신된 신호와 기준 성상도 c의 산점도 플롯을 표시합니다.

h = scatterplot(rxSig);
hold on
scatterplot(c,[],[],'r*',h)
grid
hold off

Constellation diagram scatter plot of the reference signal and the modulated signal passed through an awgn channel.

genqamdemod 함수를 사용하여 수신된 신호를 복조합니다. 심볼 오류의 개수와 SER을 확인합니다.

demodData = genqamdemod(rxSig,c);
[numErrors,ser] = symerr(data,demodData)
numErrors = 
4
ser = 
0.0020

SNR이 10dB인 AWGN 채널을 사용하여 송신 및 복조 과정을 반복합니다. 감소된 SNR에 대한 SER을 확인합니다. 예상대로 SNR이 감소하면 성능이 저하됩니다.

rxSig = awgn(modData,10,sigpower);
demodData = genqamdemod(rxSig,c);
[numErrors,ser] = symerr(data,demodData)
numErrors = 
457
ser = 
0.2285

랜덤 데이터 심볼과 4-PSK 변조 신호를 생성합니다.

M = 4;
k = log2(M);
snr = 3;
data = randi([0 M-1],2000,1);
x = pskmod(data,M);

난수 생성기 시드값을 설정합니다.

seed = 12345;

awgn 함수를 호출하기 전에 rng 함수를 사용하여 반복 가능한 랜덤 잡음을 생성합니다.

rng(seed);
y = awgn(x,snr);

비트 오류를 계산합니다.

dataHat = pskdemod(y,M);
numErr1 = biterr(data,dataHat,k)
numErr1 = 
309

난수 생성기 시드값을 재설정합니다.

rng(seed);

PSK 신호를 복조하고 비트 오류를 계산합니다.

y = awgn(x,snr);
dataHat = pskdemod(y,M);
numErr2 = biterr(data,dataHat,k)
numErr2 = 
309

numErr1numErr2를 비교합니다. 난수 생성기 시드값을 재설정한 후에도 오류는 동일합니다.

isequal(numErr1, numErr2)
ans = logical
   1

RandStream 객체와 reset 객체 함수를 사용하여 백색 가우스 잡음을 더한 결과를 생성합니다.

입력 신호 전력을 0dBW로 지정하고, 잡음을 추가하여 10dB의 SNR을 생성하고, 로컬 난수 스트림을 사용합니다. sigin에 백색 가우스 잡음을 두 번 추가하여 sigout1sigout2를 만듭니다. isequal을 사용하여 sigout1sigout2를 비교합니다. 난수 스트림을 재설정하지 않으면 출력값이 동일하지 않습니다.

S = RandStream('mt19937ar',Seed=5489);
sigin = sqrt(2)*sin(0:pi/8:6*pi);
sigout1 = awgn(sigin,10,0,S);
sigout2 = awgn(sigin,10,0,S);
isequal(sigout1,sigout2)
ans = logical
   0

난수 스트림 객체를 재설정하여 sigout1에 AWGN을 추가하기 전의 상태로 객체를 되돌립니다. sigin에 AWGN을 추가하여 sigout3을 만든 다음 sigout1sigout3을 비교합니다. 난수 스트림을 재설정하면 출력값이 동일합니다.

reset(S);
sigout3 = awgn(sigin,10,0,S);
isequal(sigout1,sigout3)
ans = logical
   1

입력 인수

모두 축소

입력 신호로, 스칼라, 벡터, 숫자형 배열 또는 dlarray (Deep Learning Toolbox) 객체로 지정됩니다. 입력 신호의 전력은 0dBW로 간주됩니다. X가 복소수인 경우 awgn은 복소수 잡음을 추가합니다. 자세한 내용은 배열 지원 항목을 참조하십시오.

데이터형: double
복소수 지원 여부:

신호 대 잡음비(단위: dB)로, 다음으로 지정됩니다.

  • 입력 신호가 스칼라이거나 벡터인 경우 스칼라.

  • 입력 신호가 3차원 배열인 경우 스칼라 또는 벡터. 자세한 내용은 배열 지원 항목을 참조하십시오.

함수는 각 채널에 동일한 snr 값을 적용합니다. 입력 신호의 열은 다중채널 신호의 서로 다른 채널을 나타냅니다.

데이터형: double

신호 전력(단위: dBW)으로, 스칼라 또는 'measured'로 지정됩니다.

  • 스칼라 — 지정된 snr을 달성하는 데 필요한 잡음 수준을 결정하기 위해 이 값을 X의 신호 수준으로 사용합니다.

  • 'measured' — 지정된 snr을 달성하는 데 필요한 잡음 수준을 결정하기 위해 X의 신호 수준을 계산합니다. 입력 신호가 dlarray이거나 snr이 벡터인 경우에는 이 값을 사용할 수 없습니다.

입력 신호가 다중채널 신호인 경우 함수는 모든 채널의 signalpower 값을 하나의 값으로 계산합니다. 그런 다음 이 값을 사용하여 모든 채널의 잡음 수준을 계산합니다.

데이터형: double

난수 스트림 객체로, RandStream 객체로 지정됩니다. 난수 스트림 객체의 상태에 따라 randn 함수에 의해 생성되는 숫자의 시퀀스가 결정됩니다. reset (RandStream) 함수와 해당 속성을 사용하여 난수 스트림 객체를 구성합니다. 입력 신호가 dlarray인 경우 난수 스트림 객체를 지정할 수 없습니다.

반복 가능한 잡음 샘플을 생성하는 방법에 대한 자세한 내용은 항목을 참조하십시오.

난수 생성기 시드값으로, 스칼라로 지정됩니다. 입력 신호가 dlarray인 경우 시드값을 지정할 수 없습니다.

데이터형: double

신호 전력 단위로, 'dB' 또는 'linear'로 지정됩니다.

  • powertype'dB'일 때 snr은 dB로 측정되고 signalpower는 dBW로 측정됩니다.

  • powertype'linear'일 때 snr은 비율로 측정되고 signalpower는 1옴의 기준 부하를 가정하여 와트 단위로 측정됩니다.

powertype 인수를 설정하려면 snrsignalpower도 설정해야 합니다.

출력 인수

모두 축소

출력 신호로, 스칼라, 벡터 또는 dlarray (Deep Learning Toolbox) 객체로 반환됩니다. 반환되는 출력 신호는 백색 가우스 잡음이 추가된 입력 신호입니다. 입력 신호 Xdlarray이면 이 출력값 Ydlarray입니다. 자세한 내용은 배열 지원 항목을 참조하십시오.

선형 스케일의 총 잡음 분산으로, 양의 스칼라로 반환되거나 snr이 벡터인 경우 벡터로 반환됩니다. 함수는 잡음 분산을 사용하여 랜덤 잡음 샘플을 생성합니다.

세부 정보

모두 축소

  • SNR과 Es/N0Eb/N0과 같은 잡음의 상대 전력을 나타내는 척도 사이의 관계에 대한 자세한 내용은 AWGN 채널 잡음 수준 항목을 참조하십시오.

  • 반복 가능한 백색 가우스 잡음 샘플을 생성하려면 다음 중 하나를 수행하십시오.

    • awgn 함수를 호출하기 전에 rng(seed)를 사용하여 반복 가능한 랜덤 잡음을 생성합니다.

    • 입력값이 dlarray 객체인 경우를 제외하고 정적 seed 값을 awgn에 대한 입력값으로 제공합니다.

    • 입력값이 dlarray 객체인 경우를 제외하고 randobject에 대해 reset (RandStream) 함수를 사용한 후 awgn에 대한 입력값으로 전달합니다.

    • 입력값이 dlarray 객체인 경우를 제외하고 알려진 상태의 randobjectawgn에 대한 입력값으로 제공합니다. 자세한 내용은 RandStream 항목을 참조하십시오.

  • CPU 난수 스트림을 GPU에서 재현하려면 양쪽에서 사용하는 난수 생성기가 일치해야 합니다. 자세한 내용은 Random Number Streams on a GPU (Parallel Computing Toolbox) 항목을 참조하십시오.

확장 기능

모두 확장

버전 내역

R2006a 이전에 개발됨

모두 확장

참고 항목

함수

객체

블록