ldpcQuasiCyclicMatrix
설명
예제
준순환 LDPC 코드의 패리티 검사 행렬을 만듭니다. 블록 크기를 3
으로 설정하고 프로토타입 행렬을 [0 -1 1 2; 2 1 -1 0]
으로 설정합니다.
blockSize = 3; p = [0 -1 1 2; 2 1 -1 0]; pcmatrix = ldpcQuasiCyclicMatrix(blockSize,p)
pcmatrix = 6×12 sparse logical array (18 nonzeros)
(1,1) 1
(5,1) 1
(2,2) 1
(6,2) 1
(3,3) 1
(4,3) 1
(6,4) 1
(4,5) 1
(5,6) 1
(3,7) 1
(1,8) 1
(2,9) 1
(2,10) 1
(4,10) 1
(3,11) 1
(5,11) 1
(1,12) 1
(6,12) 1
결과로 생성되는 패리티 검사 행렬이 희소 형식의 논리형 행렬인지 확인합니다.
issparse(pcmatrix) & islogical(pcmatrix)
ans = logical
1
패리티 검사 행렬은 크기가 클 수 있으므로 비희소 행렬로 표시하는 것은 일반적으로 권장되지 않습니다. 이 예제의 패리티 검사 행렬은 6×12에 불과하므로 비희소 행렬로 표시합니다.
full(pcmatrix)
ans = 6×12 logical array
1 0 0 0 0 0 0 1 0 0 0 1
0 1 0 0 0 0 0 0 1 1 0 0
0 0 1 0 0 0 1 0 0 0 1 0
0 0 1 0 1 0 0 0 0 1 0 0
1 0 0 0 0 1 0 0 0 0 1 0
0 1 0 1 0 0 0 0 0 0 0 1
프로토타입 행렬과 블록 크기의 파라미터를 초기화하여 IEEE® 802.11에 지정된 레이트 3/4 LDPC 코드를 구성합니다. ldpcQuasiCyclicMatrix
함수를 사용하여 패리티 검사 행렬을 만듭니다.
P = [16 17 22 24 9 3 14 -1 4 2 7 -1 26 -1 2 -1 21 -1 1 0 -1 -1 -1 -1 25 12 12 3 3 26 6 21 -1 15 22 -1 15 -1 4 -1 -1 16 -1 0 0 -1 -1 -1 25 18 26 16 22 23 9 -1 0 -1 4 -1 4 -1 8 23 11 -1 -1 -1 0 0 -1 -1 9 7 0 1 17 -1 -1 7 3 -1 3 23 -1 16 -1 -1 21 -1 0 -1 -1 0 0 -1 24 5 26 7 1 -1 -1 15 24 15 -1 8 -1 13 -1 13 -1 11 -1 -1 -1 -1 0 0 2 2 19 14 24 1 15 19 -1 21 -1 2 -1 24 -1 3 -1 2 1 -1 -1 -1 -1 0 ]; blockSize = 27; pcmatrix = ldpcQuasiCyclicMatrix(blockSize,P);
LDPC 인코더 구성 객체를 만들고 그 속성을 표시합니다. 구성 객체의 NumInformationBits
속성을 사용하여 난수 정보 비트를 생성하여 LPDC 코드워드의 정보 비트 수를 지정합니다. LDPC 인코더 구성 객체로 지정된 LDPC 코드로 정보 비트를 인코딩합니다.
cfgLDPCEnc = ldpcEncoderConfig(pcmatrix)
cfgLDPCEnc = ldpcEncoderConfig with properties: ParityCheckMatrix: [162×648 logical] Read-only properties: BlockLength: 648 NumInformationBits: 486 NumParityCheckBits: 162 CodeRate: 0.7500
infoBits = rand(cfgLDPCEnc.NumInformationBits,1) < 0.5; codeword = ldpcEncode(infoBits, cfgLDPCEnc);
프로토타입 행렬과 블록 크기의 파라미터를 초기화하여 IEEE® 802.11에 지정된 레이트 3/4 LDPC 코드를 구성합니다. ldpcQuasiCyclicMatrix
함수를 사용하여 패리티 검사 행렬을 만듭니다.
P = [ 16 17 22 24 9 3 14 -1 4 2 7 -1 26 -1 2 -1 21 -1 1 0 -1 -1 -1 -1 25 12 12 3 3 26 6 21 -1 15 22 -1 15 -1 4 -1 -1 16 -1 0 0 -1 -1 -1 25 18 26 16 22 23 9 -1 0 -1 4 -1 4 -1 8 23 11 -1 -1 -1 0 0 -1 -1 9 7 0 1 17 -1 -1 7 3 -1 3 23 -1 16 -1 -1 21 -1 0 -1 -1 0 0 -1 24 5 26 7 1 -1 -1 15 24 15 -1 8 -1 13 -1 13 -1 11 -1 -1 -1 -1 0 0 2 2 19 14 24 1 15 19 -1 21 -1 2 -1 24 -1 3 -1 2 1 -1 -1 -1 -1 0 ]; blockSize = 27; pcmatrix = ldpcQuasiCyclicMatrix(blockSize,P);
LDPC 인코더 구성 객체와 디코더 구성 객체를 만들고 그 속성을 표시합니다.
cfgLDPCEnc = ldpcEncoderConfig(pcmatrix)
cfgLDPCEnc = ldpcEncoderConfig with properties: ParityCheckMatrix: [162×648 logical] Read-only properties: BlockLength: 648 NumInformationBits: 486 NumParityCheckBits: 162 CodeRate: 0.7500
cfgLDPCDec = ldpcDecoderConfig(pcmatrix)
cfgLDPCDec = ldpcDecoderConfig with properties: ParityCheckMatrix: [162×648 logical] Algorithm: 'bp' Read-only properties: BlockLength: 648 NumInformationBits: 486 NumParityCheckBits: 162 CodeRate: 0.7500
AWGN 채널을 통해 LDPC로 인코딩되고 QPSK로 변조된 비트 스트림을 전송합니다. 신호를 복조하고, 수신된 코드워드를 디코딩한 다음 비트 오류를 계산합니다. 전송된 데이터의 LDPC 순방향 오류 정정(FEC) 코딩을 포함한 경우와 포함하지 않은 경우에 대해 중첩 for
루프를 사용하여 여러 SNR 설정과 프레임을 처리합니다.
M = 4; maxnumiter = 10; snr = [3 6 20]; numframes = 10; ber = comm.ErrorRate; ber2 = comm.ErrorRate; for ii = 1:length(snr) for counter = 1:numframes data = randi([0 1],cfgLDPCEnc.NumInformationBits,1,'int8'); % Transmit and receive with LDPC coding encodedData = ldpcEncode(data,cfgLDPCEnc); modSignal = pskmod(encodedData,M,InputType='bit'); [rxsig, noisevar] = awgn(modSignal,snr(ii)); demodSignal = pskdemod(rxsig,M, ... OutputType='approxllr', ... NoiseVariance=noisevar); rxbits = ldpcDecode(demodSignal,cfgLDPCDec,maxnumiter); errStats = ber(data,rxbits); % Transmit and receive with no LDPC coding noCoding = pskmod(data,M,InputType='bit'); rxNoCoding = awgn(noCoding,snr(ii)); rxBitsNoCoding = pskdemod(rxNoCoding,M,OutputType='bit'); errStatsNoCoding = ber2(data,int8(rxBitsNoCoding)); end fprintf(['SNR = %2d\n Coded: Error rate = %1.2f, ' ... 'Number of errors = %d\n'], ... snr(ii),errStats(1),errStats(2)) fprintf(['Noncoded: Error rate = %1.2f, ' ... 'Number of errors = %d\n'], ... errStatsNoCoding(1),errStatsNoCoding(2)) reset(ber); reset(ber2); end
SNR = 3 Coded: Error rate = 0.07, Number of errors = 355
Noncoded: Error rate = 0.08, Number of errors = 384
SNR = 6 Coded: Error rate = 0.00, Number of errors = 0
Noncoded: Error rate = 0.02, Number of errors = 98
SNR = 20 Coded: Error rate = 0.00, Number of errors = 0
Noncoded: Error rate = 0.00, Number of errors = 0
입력 인수
준순환 LDPC 코드의 블록 크기로, 양의 스칼라로 지정됩니다.
데이터형: double
프로토타입 행렬로, 행렬로 지정됩니다. P
의 열 개수는 P
의 행 개수보다 커야 합니다. P
의 모든 값은 -1
, 0
또는 입력 blocksize
보다 작은 양의 정수여야 합니다. 값이 -1
이면 값이 0인 blocksize
×blocksize
부분행렬이 생성됩니다. 다른 값은 blocksize
×blocksize
대각 행렬의 열 개수가 순환적으로 오른쪽으로 이동해야 함을 나타냅니다. 각 부분행렬은 영행렬이거나 순환적으로 이동되는 대각 행렬입니다.
데이터형: double
출력 인수
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
버전 내역
R2021b에 개발됨
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)