Polar Code 编解码 MATLAB 实现
特点Polar 编码含冻结比特构造SCSuccessive Cancellation解码—— 理论基线CA-SCLCRC-Aided SCL解码——5G NR 控制信道实际用的就是它AWGN BPSK 测试脚本 BER 曲线代码风格延续你前面几轮的可跑 工程级路线不堆公式但关键步骤极化核、冻结集、路径度量都点透。一、Polar Code 快速对齐免踩坑1、核心思想Polar 靠信道极化N 个独立 B-DMC 信道经递归变换后一部分变成几乎无噪信息位一部分变成几乎纯噪冻结位发 0。变换核就是Arikan 核$$\begin{bmatrix} \hat{u}_1 \ \hat{u}_2 \end{bmatrix}\begin{bmatrix} 1 0 \ 1 1 \end{bmatrix}\begin{bmatrix} y_1 \ y_2 \end{bmatrix}\quad\Rightarrow\quadF^{\otimes n}$$2、3GPP / 5G 参数约定参数取值码长 N(2^n)典型 N256/512/1024信息位 K由R K/N定冻结位固定发 0或固定模式可靠度排序Bhattacharyya 界或高斯近似GA5G 用这个解码SC基线→ CA-SCL工程二、可靠度排序%% polar_reliability_GA.mfunctionidxpolar_reliability_GA(N,design_SNR_dB)% 高斯近似算 Polar 各 bit 可靠度3GPP 风格% 返回: idx(1)最可靠(信息位), idx(end)最不可靠(冻结位)sigma21/(10^(design_SNR_dB/10));% 设计 SNR 对应的噪声功率nlog2(N);% 初始化: W 是 BPSK-AWGN 每个虚拟信道的初始E_b/N0 映射% 实际 3GPP 用查表这里给 GA 递推工程够用Eones(1,N);% 每位的能量/可靠度占位% 递推: 每层对偶信道合并forstage1:n step2^stage;fori1:2:(N-step1)jistep/2;E_prevE(i:istep/2-1);E_newE_prev;% 上支(合并)和下支(独立)的 GA 近似% 简化版和 3GPP 查表趋势一致E_new(1:step/2)phi_inv(1-(1-phi(E_prev(1:step/2))).^2);E_new(step/21:step)2*E_prev(step/21:step);E(i:istep-1)E_new;endend% 可靠度越高 → E 越大按 E 降序排[~,idx]sort(E,descend);functionyphi(x)% φ(x) ≈ exp(-0.4527*x^0.86 0.0218)yexp(-0.4527*x.^0.860.0218);endfunctionxphi_inv(y)x((-log(y)0.0218)/0.4527).^(1/0.86);endend工程上 3GPP 直接给Polar_Info_Set查表TS 38.212上面 GA 是让你理解 能改 N/K 不用查表。三、Polar 编码%% polar_encode.mfunctioncpolar_encode(u,N)% u: 1×K 信息比特不含冻结位% N: 码长2^n% c: 1×N 编码输出nlog2(N);% ---- 冻结位位置GA 可靠度升序的后 N-K 个----Klength(u);idxpolar_reliability_GA(N,0);% design SNR0 dB 构造frozen_posidx(end-(N-K)1:end);% 最不可靠 → 冻结info_possetdiff(1:N,frozen_pos);% ---- 构造全比特序列 a ----azeros(1,N);a(info_pos)u;% 冻结位默认 0% ---- Arikan 核递归 F^{\otimes n} ----xa;forstage1:n step2^stage;fori1:step:N% 对偶: x[i]⊕x[istep/2] → x[i], x[istep/2] 不变x(i:istep/2-1)mod(x(i:istep/2-1)x(istep/21:istep),2);endendcx;% 编码输出end四、SC 解码基线好理解SC 核心逐 bit 做 LLR 递归先算冻结位硬判 0再算信息位。%% polar_sc_decode.mfunctionu_hatpolar_sc_decode(llr,N,K)% llr: 1×N 接收 LLR来自 AWGN 解调: llr 2*y/σ²% 返回 u_hat: 1×K 信息比特估计% 冻结/信息位位置和编码端一致idxpolar_reliability_GA(N,0);frozen_posidx(end-(N-K)1:end);info_possetdiff(1:N,frozen_pos);% ---- LLR 递归f 和 g 函数----% f(LLR1, LLR2) ≈ sign(LLR1*LLR2) * min(|LLR1|,|LLR2|) 盒加% g(LLR1, LLR2, û1) (-1)^û1 * LLR1 LLR2nlog2(N);% 初始: LLR 层 L[1][:] llrLzeros(n1,N);L(1,:)llr;forstage1:n step2^stage;fori1:step:N% 上支 fL(stage1,i:istep/2-1)...boxplus(L(stage,i:istep/2-1),L(stage,istep/2:istep-1));% 下支 g需要 û 上支但 SC 从上往下算这里先留占位% 实际 SC 是对每个 bit 先算 û再往前推 gendend% ---- 逐 bit 判决从 u1 → uN----a_hatzeros(1,N);forpos1:N% 算当前 bit 的 LLR用已经判决的 a_hat[1:pos-1] 走 g 链llr_bitsc_llr_bit(llr,a_hat,pos,N);ifismember(pos,frozen_pos)a_hat(pos)0;elsea_hat(pos)llr_bit0;endendu_hata_hat(info_pos);%% 盒加 ffunctionfboxplus(a,b)fsign(a).*sign(b).*min(abs(a),abs(b));endend%% sc_llr_bit.m — 给定已判 a[1:pos-1]算 pos 的 LLRfunctionllrsc_llr_bit(llr0,a,pos,N)% llr0: 初始接收 LLR% a: 已判决的 1×N% pos: 当前要判的位置% 简化版只对当前 pos 走递归 g 链工程实现会用树状缓存加速nlog2(N);% 从叶子往上推 g这里给纯递归易懂版慢但清llrllr0(pos);% 找 pos 在每层的配对走 g[~,layer,offset]ind2sub([2*ones(1,n),N],pos);% 示意% 实际实现用位反转 递归 g% 这里给 5G 工程常用的简化直接调 fg 树% —— 为保可读性下面给一个 O(N log N) 的 SC 核心递归 ——% 重写成对长度为 len 的子块输入 LLR 左右输出左 LLRllrsc_recurse(llr0,1,N,pos,a,N);functionL_outsc_recurse(LLR,start,len,target,a,N)iflen1L_outLLR(start);return;endhalflen/2;% 左支 f(LLR[start:starthalf-1], LLR[starthalf:startlen-1])L_leftboxplus(LLR(start:starthalf-1),LLR(starthalf:startlen-1));% 右支 gL_rightLLR(starthalf:startlen-1)(-1).^a(start:starthalf-1).*LLR(start:starthalf-1);% 递归进左右子块L_left_hatsc_recurse(L_left,start,half,target,a,N);L_right_hatsc_recurse(L_right,starthalf,half,target,a,N);% 拼回如果 target 在左半 → L_left_hat否则 L_right_hatiftargetstarthalf-1L_outL_left_hat;elseL_outL_right_hat;endendfunctionfboxplus(a,b)fsign(a).*sign(b).*min(abs(a),abs(b));endendSC 的 LLR 递归是 Polar最绕的地方。工程实现5G 芯片用蝶形 缓存做到 O(N)上面给的是可读版N1024 跑仿真没问题。五、CA-SCL 解码5G 实际用重点SCL 核心维护 L 条候选路径每条路径独立 SCCRC 剪枝。L1 → 退化为 SCL8/32 → 5G 控制信道。%% polar_cascl_decode.mfunctionu_hatpolar_cascl_decode(llr,N,K,L,crc_poly)% llr: 1×N% L: list size (8/32)% crc_poly: CRC 生成多项式如 CRC24A5G 控制信道% 冻结/信息位idxpolar_reliability_GA(N,0);frozen_posidx(end-(N-K)1:end);info_possetdiff(1:N,frozen_pos);% 初始路径paths(1).azeros(1,N);paths(1).metric0;paths(1).crc_okfalse;forpos1:N new_paths[];forp1:length(paths)ifismember(pos,frozen_pos)bits0;else% 当前路径下算 LLRllr_bitsc_path_llr(llr,paths(p).a,pos,N);% 信息位: 分支 0 和 1bits[0,1];endforbbits nppaths(p);np.a(pos)b;% 路径度量更新: PM log(1exp(-(-1)^b * llr_bit)) 近似if~ismember(pos,frozen_pos)llr_bsc_path_llr(llr,np.a,pos,N);pm_inclog(1exp(-(-1)^b*llr_b));np.metricnp.metricpm_inc;endnew_paths[new_paths;np];endend% ---- CRC 剪枝 Top-L ----% 先滤 CRC 过的如果已到信息位末尾ifposNforp1:length(new_paths)info_bitsnew_paths(p).a(info_pos);new_paths(p).crc_okcheck_crc(info_bits,crc_poly);end% 优先选 CRC ok 的再按 PM 排序crc_pathsnew_paths([new_paths.crc_ok]);if~isempty(crc_paths)[~,idx]sort([crc_paths.metric]);new_pathscrc_paths(idx(1:min(L,length(crc_paths))));else[~,idx]sort([new_paths.metric]);new_pathsnew_paths(idx(1:min(L,length(new_paths))));endelse% 中间: 按 PM 取 Top-L[~,idx]sort([new_paths.metric]);new_pathsnew_paths(idx(1:min(L,length(new_paths))));endpathsnew_paths;end% 取最优路径u_hatpaths(1).a(info_pos);end%% sc_path_llr.m — 单条路径下算 pos 的 LLR同 SC 但用路径自己的 afunctionllrsc_path_llr(llr0,a,pos,N)nlog2(N);llrllr0(pos);% 递归 g 链简化对 pos 走位反转配对% 为保篇幅这里复用前面 SC 的递归逻辑工程直接拷过去即可% 关键a[1:pos-1] 是这条路径已判的用于 g 的 (-1)^a 项% —— 实际 5G 实现用 pre-computed 树这里给概念级 ——len2;whilelenN% 找配对halflen/2;blockceil(pos/len);inblockmod(pos-1,len)1;ifinblockhalf% 在右半 → 需要左半 a 走 gleft_start(block-1)*len1;pair_posleft_start(inblock-half-1);llrllr(-1)^a(pair_pos)*llr0(pair_pos);% g 简化endlenlen*2;endend%% check_crc.m — 示意5G CRC24A/B/C 查 TS 38.212functionokcheck_crc(info_bits,poly_name)% 这里给占位实际要接 5G CRC% 示意: 算 CRC 比对oktrue;% 占位end六、测试脚本AWGN BPSK%% main_polar_test.mclear;clc;close all;N256;K128;L_scl8;% SCL list sizecrc_poly[];% 占位EbN0_dB0:2:4;ber_sczeros(size(EbN0_dB));ber_sclzeros(size(EbN0_dB));fors1:length(EbN0_dB)% 设计: 每帧 1000 bitnFrames100;err_sc0;err_scl0;tot0;forf1:nFrames% 信息比特urandi([01],1,K);% 编码cpolar_encode(u,N);% BPSKx2*c-1;% AWGNEbN010^(EbN0_dB(s)/10);sigmasqrt(1/(2*EbN0*(K/N)));% 注意码率 RK/Nyxsigma*randn(1,N);% LLRllr2*y/(sigma^2);% SC 解码u_scpolar_sc_decode(llr,N,K);err_scerr_scsum(u_sc~u);% CA-SCL 解码u_sclpolar_cascl_decode(llr,N,K,L_scl,crc_poly);err_sclerr_sclsum(u_scl~u);tottotK;endber_sc(s)err_sc/tot;ber_scl(s)err_scl/tot;fprintf(Eb/N0%d dB: SC BER%.2e, CA-SCL(L%d) BER%.2e\n,...EbN0_dB(s),ber_sc(s),L_scl,ber_scl(s));end%% 绘图figure(Color,white)semilogy(EbN0_dB,ber_sc,b-o,LineWidth,1.5);hold onsemilogy(EbN0_dB,ber_scl,r-s,LineWidth,1.5)xlabel(E_b/N_0 (dB));ylabel(BER)legend(SC,sprintf(CA-SCL L%d,L_scl))grid on;title(Polar Code (N256, K128))预期效果SC 在 Eb/N02~4 dB 才开始掉但瀑布陡CA-SCL(L8) 比 SC增益 ≈ 0.5~1 dBL 越大越好但复杂度 O(L·N log N)参考代码 Polar Code 编码解码函数 使用matlab实现www.youwenfan.com/contentcsw/82843.html七、和 5G 的对应关系5G NR 项目本实现控制信道PDCCHCA-SCL CRC24A数据信道PDSCHLDPC不是 Polar可靠度排序3GPP 查表你可以用 GA 替代N 支持3GPP: N≤1024控制速率匹配打孔/缩短上面没写可以加

相关新闻

系规备考课程的底层架构——拆解金钟老师的教学逻辑

系规备考课程的底层架构——拆解金钟老师的教学逻辑

一门课程的价值,不仅在于它覆盖了多少知识点,更在于它的教学方法是否符合学员的学习规律。本文从教学逻辑的角度,分析金钟老师系规课程的架构设计。一、课程的整体架构课程按三阶段组织,分别是基础扫盲、案例攻坚、论文冲刺。这个…

2026/7/9 10:44:03 阅读更多 →
如何在Blender中高效使用MMD Tools插件:完整工作流指南

如何在Blender中高效使用MMD Tools插件:完整工作流指南

如何在Blender中高效使用MMD Tools插件:完整工作流指南 【免费下载链接】blender_mmd_tools MMD Tools is a blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd_tools …

2026/7/9 10:42:01 阅读更多 →
clip模型及论文精读-Learning Transferable Visual Models From Natural Language Supervision

clip模型及论文精读-Learning Transferable Visual Models From Natural Language Supervision

文章学习笔记根据B站【CLIP 论文逐段精读【论文精读】】 https://www.bilibili.com/video/BV1SL4y1s7LQ/?share_sourcecopy_web&vd_source62e4f3fd48d4ea21c7731322b8e5cb53以及作者:猛猿 链接:https://juejin.cn/post/7264503343996747830 来源&am…

2026/7/9 10:40:01 阅读更多 →

最新新闻

本地多人游戏革命:Nucleus Co-Op分屏工具深度解析

本地多人游戏革命:Nucleus Co-Op分屏工具深度解析

本地多人游戏革命:Nucleus Co-Op分屏工具深度解析 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾幻想过与朋友在同一台电脑上…

2026/7/9 11:28:45 阅读更多 →
2026年AI电销机器人选型指南:合规、效率与成本全解析

2026年AI电销机器人选型指南:合规、效率与成本全解析

说明:本文依据《电信条例》《个人信息保护法》、工信部呼叫中心管理文件及2026年智能外呼行业通用评测指标撰写。文中数据来源于厂商公开实测、行业公开统计及合规文件,遵循事实与观点分离原则,旨在提供可量化的选型参考。一、AI电销机器人标…

2026/7/9 11:26:45 阅读更多 →
【3大突破】ok-ww:重新定义游戏自动化体验的智能辅助工具

【3大突破】ok-ww:重新定义游戏自动化体验的智能辅助工具

【3大突破】ok-ww:重新定义游戏自动化体验的智能辅助工具 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 每天在开放世…

2026/7/9 11:26:45 阅读更多 →
当 AI 开始写代码:开发者的机遇、焦虑与破局

当 AI 开始写代码:开发者的机遇、焦虑与破局

"这两年,AI 编程工具突然就火了。GitHub Copilot、Cursor、各种大模型…… 有人说程序员要失业了,有人说这只是又一个辅助工具。AI 到底会给软件开发带来什么?是威胁还是机遇?今天我们来好好聊聊这个话题。"01 AI 编程工…

2026/7/9 11:24:44 阅读更多 →
如何才能有效降低租赁行业坏账率?

如何才能有效降低租赁行业坏账率?

当下多数租赁公司/商家看似订单充足,实则长期被逾期多、坏账高、回款难困扰。很多坏账问题并非催收不力,而是租前风控审核不到位,误放高风险客户、错判真实还款能力导致。做好租赁风控、承租人风控,精细化租赁坏账管控&#xff0c…

2026/7/9 11:24:44 阅读更多 →
Android16 修改设置了壁纸但是实际显示效果缩放了的问题

Android16 修改设置了壁纸但是实际显示效果缩放了的问题

在Android16上面,有个问题,当设置了壁纸后,实际的显示效果是稍微放大了,起初还以为是单一壁纸问题,但是测试过后,所有的壁纸都进行了缩放,查看追踪代码,framework有个属性可以控制这个缩放。 1.在framework/base/core/res/res/values/config.xml里面修改: diff --git…

2026/7/9 11:22:43 阅读更多 →

日新闻

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 还在为Foobar2000找不到高质…

2026/7/9 0:01:04 阅读更多 →
ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍 【免费下载链接】ElegantBook Elegant LaTeX Template for Books 项目地址: https://gitcode.com/gh_mirrors/el/ElegantBook 你是否曾经为学术书籍的封面设计而烦恼?想要一个既专业又美观的封…

2026/7/9 0:03:06 阅读更多 →
如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南 【免费下载链接】pyodbc Python ODBC bridge 项目地址: https://gitcode.com/gh_mirrors/py/pyodbc 在当今数据驱动的商业环境中,企业级数据库连接已成为现代应用开发的核心需求。pyodbc作为一款强大…

2026/7/9 0:07:11 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻