Main Content

pskdemod

M진 PSK 방식을 사용하여 복조

설명

Z = pskdemod(Y,M)은 입력 M-PSK 신호 Y를 복조합니다. M은 변조 차수를 지정합니다.

예제

Z = pskdemod(Y,M,phaseoffset)은 M-PSK 성상도의 위상 오프셋을 지정합니다.

예제

Z = pskdemod(Y,M,phaseoffset,symorder)는 M-PSK 성상도의 심볼 순서를 지정합니다.

Z = pskdemod(___,Name=Value)는 위에 열거된 구문 중 하나를 사용하여 선택적 이름-값 인수를 지정합니다. 예를 들어, pskdemod(Y,M,PlotConstellation=true)는 변조 차수 M을 사용하여 복조를 수행하고 성상도를 플로팅합니다. 이름-값 인수는 다른 모든 입력 인수 다음에 지정하십시오.

예제

모두 축소

PSK 변조 방식과 PAM 변조 방식을 비교하여 PSK가 위상 잡음에 더 민감하다는 것을 보여줍니다. PSK 성상도는 원형이고 PAM 성상도는 선형이기 때문에 PSK가 위상 잡음에 더 민감합니다.

심볼 개수 및 변조 차수 파라미터를 지정합니다. 랜덤 데이터 심볼을 생성합니다.

len = 10000;                
M = 16;                     
msg = randi([0 M-1],len,1);

위상 잡음 System object™를 만들고 구성된 설정을 표시합니다.

phasenoise = comm.PhaseNoise(Level=[-70 -80])
phasenoise = 
  comm.PhaseNoise with properties:

              Level: [-70 -80]
    FrequencyOffset: [2000 20000]
         SampleRate: 1000000
       RandomStream: 'Global stream'

두 방식을 비교하기 위해 PSK와 PAM을 모두 사용하여 msg를 변조합니다.

txpsk = pskmod(msg,M);
txpam = pammod(msg,M);

변조된 신호의 위상을 섭동합니다.

rxpsk = phasenoise(txpsk);
rxpam = phasenoise(txpam);

수신된 신호의 산점도 플롯을 만듭니다.

scatterplot(rxpsk);
title('Noisy PSK Scatter Plot')

Figure Scatter Plot contains an axes object. The axes object with title Noisy PSK Scatter Plot, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

scatterplot(rxpam);
title('Noisy PAM Scatter Plot')

Figure Scatter Plot contains an axes object. The axes object with title Noisy PAM Scatter Plot, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

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

recovpsk = pskdemod(rxpsk,M);
recovpam = pamdemod(rxpam,M);

각 변조 방식에 대한 심볼 오류 개수를 계산합니다. PSK 신호에서 훨씬 더 많은 개수의 심볼 오류가 발생합니다.

numerrs_psk = symerr(msg,recovpsk);
numerrs_pam = symerr(msg,recovpam);
[numerrs_psk numerrs_pam]
ans = 1×2

   795     3

랜덤 심볼을 생성합니다.

dataIn = randi([0 3],1000,1);

데이터에 대해 QPSK 변조를 수행합니다.

txSig = pskmod(dataIn,4,pi/4);

신호를 AWGN 채널에 통과시킵니다.

rxSig = awgn(txSig,10);

수신된 신호를 복조하고 심볼 오류 수를 계산합니다.

dataOut = pskdemod(rxSig,4,pi/4);
numErrs = symerr(dataIn,dataOut)
numErrs = 
3

변조 차수를 설정한 후 전체 성상도 점 세트를 포함하는 데이터 시퀀스를 생성합니다.

M = 8;
data = (0:M-1);
phaseoffset = 0;

그레이 코드와 이진 코드로 변조하고 복조한 데이터에 대해 8-PSK 심볼 매핑의 성상도 플롯을 시각화합니다.

symgray = pskmod(data,M,phaseoffset,'gray',PlotConstellation=true, ...
          InputType='integer');

Figure contains an axes object. The axes object with title 8-PSK, Gray Mapping, xlabel In-phase Amplitude, ylabel Quadrature Amplitude contains 11 objects of type line, text. One or more of the lines displays its values using only markers

mapgray = pskdemod(symgray,M,phaseoffset,'gray',OutputType='integer');
symbin = pskmod(data,M,phaseoffset,'bin');
mapbin = pskdemod(symbin,M,phaseoffset,'bin',PlotConstellation=true, ...
         OutputType='bit');

Figure contains an axes object. The axes object with title 8-PSK, Binary Mapping, xlabel In-phase Amplitude, ylabel Quadrature Amplitude contains 11 objects of type line, text. One or more of the lines displays its values using only markers

입력 인수

모두 축소

M-PSK 변조 입력 신호로, 스칼라, 벡터 또는 행렬로 지정됩니다. Y가 행렬인 경우 함수는 열을 개별적으로 처리합니다.

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

변조 차수로, 1보다 큰 정수 값으로 지정됩니다.

데이터형: double

PSK 성상도의 위상 오프셋(단위: 라디안)으로, 스칼라로 지정됩니다.

데이터형: double

심볼 순서로, 'gray', 'bin' 또는 벡터로 지정됩니다. 이 인수는 함수가 이진 벡터를 대응하는 정수에 할당하는 방법을 지정합니다.

  • 'gray' — 그레이 코드 순서를 사용합니다.

  • 'bin' — 이진 코드 순서를 사용합니다.

  • 벡터 –– 사용자 지정 심볼 순서를 사용합니다. 벡터는 [0, M– 1] 범위 내의 고유 값을 포함하고 길이가 M인 벡터입니다. 첫 번째 요소는 각도 phaseoffset에 상응하는 성상도 점을 의미하며, 그 다음 요소들은 반시계 방향으로 진행됩니다.

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

예: Z = pskdemod(Y,M,phaseoffset,symorder,OutputType='bit')

출력 유형으로, 'integer', 'bit', 'llr' 또는 'approxllr'로 지정됩니다.

출력의 데이터형으로, 다음 표에 나열된 데이터형 중 하나로 지정됩니다. OutputDataType에 허용되는 값은 OutputType 값에 따라 달라집니다.

OutputType허용되는 OutputDataType
'integer''double', 'single', 'int8', 'int16', 'int32', 'uint8', 'uint16', 'uint32'
'bit''double', 'single', 'int8', 'int16', 'int32', 'uint8', 'uint16', 'uint32', 'logical'

디폴트 값은 입력 Y의 데이터형입니다.

종속 관계

이 인수를 사용하려면 OutputType'integer' 또는 'bit'로 설정하십시오.

잡음 분산으로, 다음 옵션 중 하나로 지정됩니다.

  • 양의 스칼라 — 모든 입력 요소에 동일한 잡음 분산 값을 사용합니다.

  • 양수 값으로 구성된 벡터 — 대응하는 마지막 차원을 따라 입력값의 모든 요소에 대해, 벡터의 각 요소에 의해 지정된 잡음 분산을 사용합니다. 벡터 길이는 입력 신호의 열 개수와 같아야 합니다.

복조 함수에는 복소수 입력 신호가 필요합니다. BPSK의 경우 변조기는 허수부 값이 0인 복소 신호를 출력합니다. 복조기에 실수 신호를 입력하는 경우에는 분산 값을 실수 값 입력 신호 분산의 두 배로 설정해서 복소 신호의 잡음 파워를 실수 값 입력 신호로 표현해야 합니다.

엄밀한 LLR 알고리즘은 유한 정밀도 연산방식을 사용하여 지수를 계산합니다. 크기가 매우 큰 양수나 음수가 포함된 계산일 경우 엄밀한 LLR 알고리즘은 다음과 같은 결과를 생성합니다.

  • 잡음 분산이 매우 큰 값인 경우 Inf 또는 -Inf

  • 잡음 분산과 신호 전력이 모두 매우 작은 값인 경우 NaN

근사 LLR 알고리즘은 지수를 계산하지 않습니다. 근사 LLR 알고리즘을 사용하면 Inf, -Inf, NaN 결과값이 생성되는 것을 피할 수 있습니다.

종속 관계

이 인수는 OutputType'llr' 또는 'approxllr'로 설정한 경우 적용됩니다.

데이터형: double

성상도를 플로팅하는 옵션으로, 논리값 0(false) 또는 1(true)로 지정됩니다. 성상도를 플로팅하려면 PlotConstellationtrue로 설정하십시오.

데이터형: logical

출력 인수

모두 축소

M-PSK 복조 출력 신호로, 스칼라, 벡터 또는 행렬로 반환됩니다. 이 출력값의 값과 차원은 다음 표에 지정된 OutputType 값에 따라 다릅니다.

OutputTypepskdemod 출력값출력값의 차원
'integer'[0, M – 1] 범위의 복조된 정수 값Z는 입력 Y와 동일한 차원을 갖습니다.
'bit'복조된 비트Z의 행 개수는 Y의 행 개수의 log2(M)배입니다. 함수는 각 복조 심볼을 log2(M)비트의 그룹에 매핑합니다. 여기서 첫 번째 비트는 MSB를 나타내고 마지막 비트는 LSB를 나타냅니다.
'llr'정확한 로그 가능도 알고리즘을 사용하여 계산된, 각 비트의 로그 가능도비 값. 자세한 내용은 Exact LLR Algorithm 항목을 참조하십시오.
'approxllr'각 비트의 근사 로그 가능도비 값. 값은 근사 로그 가능도 알고리즘을 사용하여 계산됩니다. 자세한 내용은 Approximate LLR Algorithm 항목을 참조하십시오.

참고 문헌

[1] Proakis, John G. Digital Communications. 4th ed. New York: McGraw Hill, 2001.

확장 기능

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

버전 내역

R2006a 이전에 개발됨

모두 확장