Main Content

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

pskmod

M-PSK 방식을 사용하여 신호 변조

설명

y = pskmod(x,M)은 M-Ary 위상 편이 변조(M-PSK) 방식을 사용하여 입력 신호 x를 변조합니다. M은 변조 차수를 지정합니다.

예제

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

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

y = pskmod(x,M,Name=Value)는 이름-값 인수를 사용하여 옵션을 지정합니다.

예제

모두 축소

QPSK 신호와 16-PSK 신호를 변조하고 이들 신호의 성상도를 플로팅합니다.

QPSK

변조 차수를 4로 설정합니다.

M = 4;

랜덤 데이터 심볼을 생성합니다.

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

데이터 심볼을 변조합니다.

txSig = pskmod(data,M,pi/M);

신호를 백색 잡음에 통과시키고 그 성상도를 플로팅합니다.

rxSig = awgn(txSig,20);
scatterplot(rxSig)

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

16-PSK

변조 차수를 4에서 16으로 변경합니다.

M = 16;

랜덤 데이터 심볼을 생성합니다.

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

데이터 심볼을 변조합니다.

txSig = pskmod(data,M,pi/M);

신호를 백색 잡음에 통과시키고 그 성상도를 플로팅합니다.

rxSig = awgn(txSig,20);
scatterplot(rxSig)

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

랜덤 심볼을 생성합니다.

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

입력 인수

모두 축소

입력 신호로, 양의 정수의 스칼라, 벡터, 또는 행렬로 지정됩니다. x의 요소는 [0, M–1] 범위 내에 있는 이진 또는 정수 값을 가져야 하며, 여기서 M은 변조 차수입니다.

참고

입력 신호를 이진 요소로 처리하려면 InputType 이름-값 인수를 'bit'로 설정하십시오. 이진 입력값의 경우 행 개수는 log2(M)의 정수 배수여야 합니다. 이 함수는 log2(M)비트의 그룹을 하나의 심볼에 매핑합니다. 여기서 첫 번째 비트는 MSB를 나타내고 마지막 비트는 LSB를 나타냅니다.

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

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

데이터형: double

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

데이터형: double

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

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

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

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

이름-값 인수

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

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: y = pskmod(x,M,phaseoffset,symorder,InputType='bit')

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

  • 'integer' –– 입력 신호는 [0, M–1] 범위 내에 있는 정수로 구성됩니다.

  • 'bit' –– 입력 신호는 이진 값으로 구성되며 행 개수는 log2(M)의 정수 배수여야 합니다.

출력 데이터형으로, 'double' 또는 'single'로 지정됩니다.

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

출력 인수

모두 축소

M-PSK 변조 기저대역 신호로, 복소수 값의 스칼라, 벡터, 또는 행렬로 반환됩니다. y의 열은 독립적인 채널을 나타냅니다. 정수 입력값의 경우 출력값 y는 입력 신호 x와 동일한 차원을 갖습니다. 비트 입력값의 경우, y의 행 개수는 x의 행 개수를 log2(M)으로 나눈 값입니다.

참고 문헌

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

확장 기능

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

버전 내역

R2006a 이전에 개발됨

모두 확장

참고 항목

| | | |

도움말 항목