# polar-3gpp-matlab
Matlab simulations of the encoder and Successive Cancellation List (SCL) decoder for the New Radio polar code from 3GPP Release 15, as defined in [TS38.212 V15.2.0](http://www.3gpp.org/ftp//Specs/archive/38_series/38.212/38212-f20.zip) and used in the Public Broadcast Channel (PBCH), Physical Downlink Control Channel (PDCCH) and Physical Uplink Control Channel (PUCCH).
This code is intended to provide a reference model for the standard and has been written with a focus on correctness, rather than on simulation speed. This code is also intended to provide a platform for research on enhancements to the New Radio polar code. This motivates the inclusion of the custom1_encoder and custom1_decoder, alongside encoders and decoders for the New Radio PBCH, PDCCH and PUCCH channels. In particular, custom1_encoder and custom1_decoder adapt the New Radio polar code for general purpose applications, enabling support for arbitrarily-high information block lengths A. By contrast, the longest block lengths supported in the New Radio PBCH, PDCCH and PUCCH channels are 32, 140 and 1706 bits, respectively.
![Block Diagram](BlockDiagram.svg)
![PBCH](./results/PBCH.svg) Plot of Block Error Rate (BLER) versus channel Signal to Noise Ratio (SNR) E<sub>s</sub>/N<sub>0</sub> for the Public Broadcast Channel (PBCH) polar code of 3GPP New Radio, when using Quadrature Phase Shift Keying (QPSK) for communication over an Additive White Gaussian Noise (AWGN) channel. Here, A is the number of bits in each information block, E is the number of bits in each encoded block and L is the list size used during min-sum Successive Cancellation List (SCL) decoding. The simulation of each SNR was continued until 1000 block errors were observed. Capacity plots are provided by the O(n<sup>−2</sup>) metaconverse PPV upper bound. | ![PDCCH](./results/PDCCH.svg) Plot of Signal to Noise Ratio (SNR) E<sub>s</sub>/N<sub>0</sub> required to achieve a Block Error Rate (BLER) of 10<sup>-3</sup> versus number bits in each information block A for the Physical Downlink Control Channel (PDCCH) polar code of 3GPP New Radio, when using Quadrature Phase Shift Keying (QPSK) for communication over an Additive White Gaussian Noise (AWGN) channel. Here, E is the number of bits in each encoded block and L is the list size used during min-sum Successive Cancellation List (SCL) decoding. The simulation of each SNR was continued until 100 block errors were observed. Capacity plots are provided by the O(n<sup>−2</sup>) metaconverse PPV upper bound.
:---: | :---:
![PUCCH](./results/PUCCH.svg) **Plot of Signal to Noise Ratio (SNR) E<sub>s</sub>/N<sub>0</sub> required to achieve a Block Error Rate (BLER) of 10<sup>-3</sup> versus number bits in each information block A for the Physical Uplink Control Channel (PUCCH) polar code of 3GPP New Radio, when using Quadrature Phase Shift Keying (QPSK) for communication over an Additive White Gaussian Noise (AWGN) channel. Here, G is the number of bits in each encoded block and L is the list size used during min-sum Successive Cancellation List (SCL) decoding. The simulation of each SNR was continued until 100 block errors were observed. Capacity plots are provided by the O(n<sup>−2</sup>) metaconverse PPV upper bound.** |
The capacity plots in the Figures above were obtained using the O(n<sup>−2</sup>) metaconverse PPV upper bound from the [SPECTRE Short Packet Communication Toolbox](https://github.com/yp-mit/spectre). If you use these results, please acknowledge them with a reference to...
T. Erseghe, "Coding in the Finite-Blocklength Regime: Bounds Based on Laplace Integrals and Their Asymptotic Approximations", IEEE Transactions on Information Theory, vol. 62, no. 12, pp. 6854 - 6883, Dec. 2016.
Section of TS38.212 | Implemented in | Comment
--- | --- | ---
5.1 | [components/get_crc_generator_matrix.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/components/get_crc_generator_matrix.m) | The CRC bits are generated using b = [a, mod(a*G_P, 2)].
5.2.1 | [PUCCH_encoder.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/PUCCH_encoder.m) | The first and second segments are obtained as a(1:floor(A/C)) and a(floor(A/C)+1:A), respectively.
5.3.1 | [components/get_3GPP_N.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/components/get_3GPP_N.m) |
5.3.1.1 | [components/get_3GPP_crc_interleaver_pattern.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/components/get_3GPP_crc_interleaver_pattern.m) | Interleaving is implemented using c_prime = c(Pi).
5.3.1.2 Q<sub>0</sub><sup>N-1</sup> | [components/get_3GPP_sequence_pattern.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/components/get_3GPP_sequence_pattern.m) | The elements of Q<sub>0</sub><sup>N-1</sup> are incremented by 1, since indices begin at 1 in Matlab.
5.3.1.2 Q<sub>PC</sub><sup>N</sup> | [components/get_PC_bit_pattern.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/components/get_PC_bit_pattern.m) | Provides a vector of N elements, in which the elements with the indices Q<sub>PC</sub><sup>N</sup> are set to true and all other elements are set to false.
5.3.1.2 u | [components/PCCA_polar_encoder.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/components/PCCA_polar_encoder.m) | Other components/\*_polar_encoder.m files are also useful for special cases without PC bits, without CRC bits or with distributed CRC bits.
5.3.1.2 G<sub>N</sub> | [components/get_G_N.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/components/get_G_N.m) | Encoding is implemented using d = mod(u\*G_N, 2).
5.4.1.1 P(i) | [components/get_3GPP_rate_matching_pattern.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/components/get_3GPP_rate_matching_pattern.m) |
5.4.1.1 Q<sub>I</sub><sup>N</sup> | [components/get_3GPP_info_bit_pattern.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/components/get_3GPP_info_bit_pattern.m) | Provides a vector of N elements, in which the elements with the indices Q<sub>I</sub><sup>N</sup> are set to true and all other elements are set to false.
5.4.1.2 | [components/get_3GPP_rate_matching_pattern.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/components/get_3GPP_rate_matching_pattern.m) | Rate matching is implemented using e = d(rate_matching_pattern).
5.4.1.3 | [components/get_3GPP_channel_interleaver_pattern.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/components/get_3GPP_channel_interleaver_pattern.m) | Interleaving is implemented using f = e(channel_interleaver_pattern).
5.5 | [PUCCH_encoder.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/PUCCH_encoder.m) | The first and second segments are concatenated using f = [f, ...].
6.3.1.2.1 | [PUCCH_encoder.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/PUCCH_encoder.m) |
6.3.1.3.1 | [PUCCH_encoder.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/PUCCH_encoder.m) |
6.3.1.4.1 | [PUCCH_encoder.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/PUCCH_encoder.m) | Rate matching is implemented, but not the determination of E<sub>UCI</sub>.
6.3.1.5 | [PUCCH_encoder.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/PUCCH_encoder.m) |
6.3.2.2.1 | [PUCCH_encoder.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/PUCCH_encoder.m) |
6.3.2.3.1 | [PUCCH_encoder.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/PUCCH_encoder.m) |
6.3.2.4.1 | [PUCCH_encoder.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/PUCCH_encoder.m) | Rate matching is implemented, but not the determination of E<sub>UCI</sub>.
6.3.2.5 | [PUCCH_encoder.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/PUCCH_encoder.m) |
7.1.3 | [PBCH_encoder.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/master/PBCH_encoder.m) |
7.1.4 | [PBCH_encoder.m](https://github.com/robmaunder/polar-3gpp-matlab/blob/maste
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
polar-3gpp-matlab-master.zip (105个子文件)
PUCCH.fig 57KB
PDCCH.fig 39KB
PBCH.fig 36KB
BlockDiagram.fig 30KB
.gitignore 2KB
.gitignore 21B
LICENSE 34KB
DS1CKA_polar_decoder.m 14KB
DCKA_polar_decoder.m 13KB
DS1CA_polar_decoder.m 13KB
DCA_polar_decoder.m 12KB
PCCA_polar_decoder.m 9KB
main_BLER_vs_SNR.m 9KB
main_SNR_vs_A.m 9KB
CA_polar_decoder.m 8KB
PC_polar_decoder.m 8KB
PUCCH_decoder.m 7KB
polar_decoder.m 7KB
PUCCH_encoder.m 6KB
main_FAR.m 5KB
get_3GPP_sequence_pattern.m 5KB
PDCCH_decoder.m 5KB
custom1_decoder.m 5KB
PBCH_decoder.m 5KB
get_3GPP_info_bit_pattern.m 5KB
DS1CA_polar_encoder.m 4KB
custom1_encoder.m 4KB
PCCA_polar_encoder.m 4KB
PDCCH_encoder.m 4KB
DCA_polar_encoder.m 3KB
PC_polar_encoder.m 3KB
get_PC_bit_pattern.m 3KB
PBCH_encoder.m 3KB
get_3GPP_rate_matching_pattern.m 3KB
CA_polar_encoder.m 3KB
get_3GPP_crc_interleaver_pattern.m 3KB
get_info_bit_pattern.m 3KB
get_BIVP_rate_matching_pattern.m 2KB
get_BIVS_rate_matching_pattern.m 2KB
get_NATP_rate_matching_pattern.m 2KB
get_NATS_rate_matching_pattern.m 2KB
polar_encoder.m 2KB
get_3GPP_channel_interleaver_pattern.m 2KB
get_crc_generator_matrix.m 2KB
get_PW_sequence_pattern.m 2KB
get_3GPP_N.m 1KB
update_llr.m 1KB
update_bit.m 1KB
get_G_N.m 1KB
phi.m 900B
minstar.m 726B
README.md 9KB
PUCCH.svg 89KB
BlockDiagram.svg 74KB
PDCCH.svg 63KB
PBCH.svg 58KB
BLER_vs_SNR_PBCH_32_864_1_1_1000_0.txt 2KB
BLER_vs_SNR_PBCH_32_864_cap.txt 2KB
BLER_vs_SNR_PBCH_32_864_2_1_1000_0.txt 2KB
BLER_vs_SNR_PBCH_32_864_4_1_1000_0.txt 2KB
BLER_vs_SNR_PBCH_32_864_8_1_1000_0.txt 2KB
BLER_vs_SNR_PBCH_32_864_16_1_1000_0.txt 2KB
BLER_vs_SNR_PBCH_32_864_32_1_1000_0.txt 2KB
SNR_vs_A_PUCCH_0.001_6912_16_1_100_0.txt 886B
SNR_vs_A_PUCCH_0.001_6912_8_1_100_0.txt 884B
SNR_vs_A_PUCCH_0.001_3456_16_1_100_0.txt 872B
SNR_vs_A_PUCCH_0.001_3456_8_1_100_0.txt 872B
SNR_vs_A_PUCCH_0.001_1728_16_1_100_0.txt 855B
SNR_vs_A_PUCCH_0.001_1728_8_1_100_0.txt 854B
SNR_vs_A_PUCCH_0.001_6912_cap.txt 819B
SNR_vs_A_PUCCH_0.001_3456_cap.txt 808B
SNR_vs_A_PUCCH_0.001_1728_cap.txt 804B
SNR_vs_A_PUCCH_0.001_864_16_1_100_0.txt 718B
SNR_vs_A_PUCCH_0.001_864_8_1_100_0.txt 718B
SNR_vs_A_PUCCH_0.001_864_cap.txt 659B
SNR_vs_A_PUCCH_0.001_432_16_1_100_0.txt 592B
SNR_vs_A_PUCCH_0.001_432_8_1_100_0.txt 591B
SNR_vs_A_PUCCH_0.001_432_cap.txt 551B
SNR_vs_A_PDCCH_0.001_1728_cap.txt 544B
SNR_vs_A_PDCCH_0.001_864_cap.txt 524B
SNR_vs_A_PDCCH_0.001_216_cap.txt 504B
SNR_vs_A_PDCCH_0.001_432_cap.txt 503B
SNR_vs_A_PDCCH_0.001_1728_16_1_100_0.txt 482B
SNR_vs_A_PDCCH_0.001_1728_8_1_100_0.txt 481B
SNR_vs_A_PDCCH_0.001_864_8_1_100_0.txt 464B
SNR_vs_A_PDCCH_0.001_864_16_1_100_0.txt 464B
SNR_vs_A_PDCCH_0.001_432_16_1_100_0.txt 462B
SNR_vs_A_PDCCH_0.001_432_8_1_100_0.txt 462B
SNR_vs_A_PUCCH_0.001_216_16_1_100_0.txt 456B
SNR_vs_A_PUCCH_0.001_216_8_1_100_0.txt 455B
SNR_vs_A_PDCCH_0.001_216_8_1_100_0.txt 450B
SNR_vs_A_PDCCH_0.001_216_16_1_100_0.txt 450B
SNR_vs_A_PUCCH_0.001_216_cap.txt 425B
SNR_vs_A_PDCCH_0.001_108_cap.txt 411B
SNR_vs_A_PDCCH_0.001_108_8_1_100_0.txt 349B
SNR_vs_A_PDCCH_0.001_108_16_1_100_0.txt 349B
SNR_vs_A_PUCCH_0.001_108_16_1_100_0.txt 332B
SNR_vs_A_PUCCH_0.001_108_8_1_100_0.txt 332B
SNR_vs_A_PUCCH_0.001_108_cap.txt 309B
SNR_vs_A_PUCCH_0.001_13824_8_1_100_0.txt 279B
共 105 条
- 1
- 2
资源评论
- 酷比少年2019-12-16楼主请问,这个代码上面备注的参考文献在哪找?能不能分享下?
kcul
- 粉丝: 11
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功