LDPC译码算法的Matlab性能仿真分析——BP译码、LLRBP译码、MS译码及NMS译码比较

Matlab 专栏收录该内容
¥59.90 ¥99.00
147篇文章

LDPC译码算法的Matlab性能仿真分析——BP译码、LLRBP译码、MS译码及NMS译码比较

LDPC码是一种近年来发展起来的可纠错编码,因其在误码率(Bit Error Rate, BER)性能、奇偶检验矩阵结构等方面都有着良好的特性而被广泛应用于无线通信领域。但是,如何快速且准确地对LDPC码进行译码成为了当前研究的热点问题之一。本文将介绍LDPC译码算法中四种不同的译码算法,分别是基于最大后验概率(Maximum A Posteriori, MAP)准则的 BP(Belief Propagation)译码算法、基于 似然度值的BP译码算法(LLRBP,Log-Likelihood Ratio Belief Propagation)、MS(Min-Sum)译码算法和NMS(Normalized Min-Sum)译码算法,并通过Matlab进行性能仿真实验,比较各算法在不同条件下的译码效果。

一、LDPC码

LDPC码是一种通过定义一个具有稀疏、低密度的奇偶校验矩阵H来表示的码。在LDPC码的编码过程中,信息位会通过矩阵H进行编码,生成码字。而解码过程中,则是通过已知的码字及矩阵H对其进行译码。

二、BP译码算法

BP译码算法是一种采用基于图模型的概率推理算法,它通过迭代计算从收到的信息和已有的约束条件中得出未知变量的后验概率分布。具体实现中,BP算法通过将信道传送的信息符号看成一个个节点,节点之间通过边进行连接,产生一张图模型。以二进制卷积码为例,在LDPC码的奇偶检验矩阵中,一个元素H(i,j)将会表示第i个校验方程与第j个信息位之间的联系。BP算法会先给每一个BP图节点赋予相应的初始值,然后通过反复计算各个节点之间的信息来更新节点的后验概率分布,最终得到译码结果。BP算法的核心

【斐波那契LDPC】基于斐波那契序列的QC-LDPC改进,译码采用LLR-BP译码算法 1.软件版本 matlab2013b 2.本算法理论知识 LLRBP算法较为复杂,因此,考虑改进算法的复杂度,加快算法仿真速度。具体方法如下所示: 这里,在改进算法复杂度方面,主要从tanh方面入手,因为tanh计算在硬件实现方面非常复杂,所以这里通过泰勒展开式,并近似的选择泰勒展开式的前几项作为近似计算公式进行计算,从而降低复杂度。。 看原始的LLR BP 算法,根据提供的参考文献可知,基本目前的改进,主要都是通过SPA或者Normalized BP算法... 阅读详情

相关推荐

非均匀量化LDPC译码性能研究——以最小和译码算法为例进行MATLAB仿真

本文对非均匀量化LDPC码进行MATLAB仿真,选用最小和译码算法对其进行译码,并通过更改量化方式,比较各个量化方式的译码性能。本文对非均匀量化LDPC码的译码性能进行了研究,以最小和译码算法为例进行MATLAB仿真,并通过更改量化方式,比较各个量化方式的译码性能。从实验结果可以看出,随着量化精度的提高,误码率不断降低,表明量化方式对LDPC码的译码性能具有较大影响。为深入研究非均匀量化LDPC码的译码性能,本文选取最小和译码算法对其进行MATLAB仿真,并分析量化方式不同对其译码性能的影响。

BUG?不存在的! 364

【LDPC-6】编码码长对LDPC译码性能的影响分析——以BP译码算法为例进行matlab仿真

为了保证实时通信业务的服务质量,降低误码率,在数据传输中采用纠错编码的方式使其有一定的纠错能力[1]。低差错率的信道编码是提高无线通信可靠性和有效性的关键技术之一,也是无线通信领域的研究热点之一。研究人员对信道编码进行了大量研究,其中,Turbo码和LDPC码以其最接近香农极限的性能受到了通信界的广泛关注。与Turbo码相比,LDPC码没有错误平层,且迭代译码的复杂度低。此外,LDPC码本身具有抗突发差错的特性,不需要引入交织器,避免了交织过程带来的时延。

FPGA/MATLAB学习教程/源码/项目合作开发 1622

【LDPC-4】LDPC译码算法的matlab性能仿真分析——对比BP译码,LLRBP译码,MS译码以及NMS译码等

LDPC译码从译码算法的实现角度可以将译码类型分为硬判决译码和软判决译码两种类型。其中,硬判决译码方式实现过程较为简单,其通过一个预先设置的阈值对译码信息进行判决,如果大于阈值则判决输出“1”,否则判决输出“0软件判决译码方式则根据码元错误概率最小的方式进行译码。因此,软件判决译码方式具有更优的译码性能。对目前常见的软判决译码算法进行研究,包括BP译码算法,LLR-BP译码算法,MS译码算法以及归一化NMS译码算法。

FPGA/MATLAB学习教程/源码/项目合作开发 1443

【LDPC-9】LDPC译码算法复杂度的matlab性能仿真分析——对比BP译码,LLRBP译码

LDPC译码从译码算法的实现角度可以将译码类型分为硬判决译码和软判决译码两种类型。其中,硬判决译码方式实现过程较为简单,其通过一个预先设置的阈值对译码信息进行判决,如果大于阈值则判决输出“1”,否则判决输出“0”。软件判决译码方式则根据码元错误概率最小的方式进行译码。因此,软件判决译码方式具有更优的译码性能。对目前常见的译码算法进行研究,包括BP译码算法,LLRBP译码算法。在本课程中,我们将主要对比常见LDPC译码算法的复杂度。包括BP译码算法,LLRBP译码算法。

FPGA/MATLAB学习教程/源码/项目合作开发 1586

LDPC译码算法的MATLAB性能仿真分析:BP译码、LLRBP译码、MS译码和NMS译码

LDPC码的译码是一项关键任务,目前有多种译码算法可供选择。本文将介绍LDPC译码算法的性能仿真分析,包括BP译码、LLRBP译码、MS译码和NMS译码,并提供相应的MATLAB源代码。以上是BP译码、LLRBP译码、MS译码和NMS译码的MATLAB代码示例。这些算法在LDPC码的译码性能和计算复杂度之间有不同的平衡。通过进行性能仿真分析,可以比较。LDPC译码算法的MATLAB性能仿真分析:BP译码、LLRBP译码、MS译码和NMS译码。

CodeWWWCode的博客 408

★专题1:信道编译码matlab仿真目录

★专题1:信道编译码matlab仿真目录 1.【BCH】BCH编译码理论与误码率性能matlab仿真和分析2.【RS】RS编译码理论与误码率性能matlab仿真和分析3.【Hamming】Hamming编译码理论与误码率matlab仿真和分析4.【CRC】循环冗余校验码(Cyclic Redundancy Check,CRC)的理论与误码率matlab.....5.【RM】Reed-Muller码理论与误码率matlab仿真和分析6.【RS+BCH】RS和BCH级联编译码理论与误码率matlab仿真和分析.

FPGA/MATLAB学习教程/源码/项目合作开发 3041

LDPC译码算法复杂度的Matlab性能仿真分析——BP译码与LLRBP译码的比较

通过对比两种算法在运行时间、译码效率和误码率等方面的测试,我们可以发现,LLRBP译码在性能方面表现较为优异,但实际应用时也需要考虑到多种因素的影响,以达到最佳的编码解码效果。LDPC译码算法是一种基于图论的译码算法,主要包括和采用相邻检验法的硬判决译码(BP译码)和采用软判决译码的LLRBP译码两种。其中,n为码字长度,k为信息位长度,d_v为变量节点度数(即左侧节点个数),d_c为校验节点度数(即右侧节点个数),'rand’表示随机生成的校验矩阵,0表示不采用排错码策略。% 转换为对数似然比形式。

DevScribe的博客 607

基于斐波那契序列的QC-LDPC改进,译码采用LLR-BP译码算法 Matlab

本文将介绍一种基于斐波那契序列的QC-LDPC改进方法,并使用Matlab实现该方法的译码部分,采用LLR-BP(Log-Likelihood Ratio Belief Propagation)译码算法。在QC-LDPC码中,校验矩阵的每一行都包含相同数量的1,并且在每一列中,1的位置满足特定的规则,例如斐波那契序列。这段代码仅包含译码部分的实现,你可以根据需要编写编码部分的代码,以便完整实现基于斐波那契序列的QC-LDPC改进方法。首先,我们来了解一下QC-LDPC码和LLR-BP译码算法的基本概念。

2301_79331387的博客 272

卷积码和QC-LDPC码的译码性能和抑制突发噪声性能对比 - MATLAB实现

本文将详细比较卷积码和QC-LDPC码在Matlab中的译码性能和抑制突发噪声性能,并提供相应的源代码。以上是卷积码和QC-LDPC码的译码性能和抑制突发噪声性能的比较分析。QC-LDPC码具有良好的抑制突发噪声性能。由于LDPC码的稀疏性质,BP算法可以充分利用校验节点和信息节点之间的关系来进行突发错误的纠正,从而提高系统的鲁棒性。在实际应用中,我们可以根据具体的需求来选择合适的编码方案,平衡译码性能和抑制突发噪声性能。卷积码和QC-LDPC码的译码性能和抑制突发噪声性能对比 - MATLAB实现。

code_welike的博客 296

LDPC译码算法及其Matlab实现

在本文中,我们将介绍LDPC译码算法的基本原理,并提供Matlab实现示例。函数中的变量节点更新和校验节点更新部分分别对应迭代译码算法中的消息传递步骤。译码成功的判断通过检测校验节点的残余误差是否为零来实现。这是一个简单的LDPC译码算法的Matlab实现示例。实际应用中,需要根据具体的LDPC码参数和需求进行适当的调整和优化。迭代译码算法是最常用的LDPC译码算法之一,它基于图的消息传递思想。要使用上述代码进行LDPC译码,你需要先定义LDPC码的校验矩阵。是LDPC码的校验矩阵,

DevRevolt的博客 550

Matlab实现LDPC 编码和LLR-BP算法译码 上传版本.zip

Matlab实现LDPC 编码和LLR-BP算法译码 上传版本.zip

VS2022如何兼容老项目?.NET Framework 4.0/4.5安装避坑指南

本文提供了在Visual Studio 2022中兼容和维护.NET Framework 4.0/4.5等老旧项目的完整解决方案。针对VS2022无法直接识别旧框架的核心问题,文章详细剖析了原因,并重点推荐通过官方NuGet包安全获取引用程序集的方法,给出了从下载、解压到部署至标准目录的详细步骤。同时,文章还深入探讨了项目文件格式过旧、NuGet包还原失败等进阶问题的排查与解决策略,旨在帮助开发者高效、稳定地在现代开发环境中维护历史代码库。

weixin_27734811的博客 514

期末求生指南:手把手教你用浏览器开发者工具绕过百一测评切屏检测

本文详细介绍了如何利用浏览器开发者工具绕过百一测评的切屏检测功能。通过分析JavaScript事件监听机制,定位关键检测代码,并提供实时调试和本地覆盖两种修改方法,帮助学生在遵守规则的前提下更灵活地应对在线考试。文章还包含风险控制和替代方案等实用建议。

weixin_28698059的博客 549

Coze平台智能体开发实战:打造测试工程师的AI助手

智能体是具备特定身份和能力的AI实体,由大语言模型(LLM)驱动,并通过插件、知识库和工作流扩展其能力。明确的角色定位:可以设定特定身份和专业领域扩展能力:通过插件连接外部工具和服务记忆能力:通过知识库存储和检索专属信息流程化处理:通过工作流执行复杂多步任务通过Coze平台创建测试工程师智能体,可以显著提升测试效率和质量。明确的角色定位:聚焦测试工程师的实际需求丰富的知识库:提供准确的领域知识支持合适的工具集成:通过插件连接现有工具链持续迭代优化:根据反馈不断改进智能体行为自动化测试生成。

hogwarts_beibei的博客 1005

Jacobi正交多项式在数值分析中的应用与实现

本文深入探讨了Jacobi正交多项式在数值分析中的核心应用与实现。作为最通用的正交多项式族,Jacobi多项式通过参数α和β的调节,可退化为切比雪夫、勒让德等经典多项式,为函数逼近、奇异积分和微分方程求解提供了统一框架。文章重点解析了其在加权高斯积分(高斯-雅可比积分)和谱方法求解微分方程中的关键作用,并提供了基于递归关系和SciPy的稳定高效实现方案,帮助读者掌握这一强大的数值计算工具。

weixin_29306011的博客 245

K8S 1.28.2 + Calico 3.27.3 保姆级安装避坑指南:解决节点NotReady问题

本文提供了一份详细的Kubernetes 1.28.2与Calico 3.27.3集群部署指南,重点解决节点NotReady这一常见问题。通过版本兼容性分析、精细化环境配置、kubeadm初始化参数详解及Calico Operator部署,手把手指导用户避开网络插件配置陷阱,确保集群从NotReady状态恢复健康并稳定运行。

weixin_28835583的博客 394

【五分钟论文笔记】Vision Banana:图像生成器成为通用视觉学习器

图像生成训练可以像 LLM 预训练一样,让模型学习强大且通用的视觉表示感知即生成——将视觉任务输出参数化为 RGB 图像,是一种优雅且强大的统一框架视觉理解能力可以在不牺牲生成能力的情况下获得——两者可以共存于同一个模型。

专注:太空算力、AI infra、异构调度、大模型成本工程 232

【YOLO目标检测全栈实战】98 YOLO模型在低光照环境下的自适应增强策略

你有没有遇到过这种情况?深夜加班调试产线检测模型,车间灯光昏暗,摄像头采集的图片黑乎乎一片,YOLO模型直接“罢工”——漏检率飙升到40%以上。上个月我在一个汽车零部件质检项目里就栽了跟头:白天模型跑得飞起,mAP@0.5达到0.92,可一到夜班,同样的产线、同样的零件,mAP直接掉到0.63。客户拍着桌子问我:“你这模型怎么还分白天黑夜?”

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 284

COMSOL有限元仿真深度指南:为结构件添加预应变

一、什么是预应力和预应变? 我们知道,结构力学问题中,结构件在外载荷作用下产生变形响应以吸收外载荷做功带来的能量;而在结构内部,整体的受力和变形则是通过固体微元的应力与应变传递的。 对于线弹性材料来说,应力与应变的关系可以线性表达,也即 σ=Dεσ = Dεσ=Dε ;在该式中,无论固体微元的应变程度多大,弹性矩阵DDD都是一个不变的常值。而对于超弹性材料来说,应力与应变的关系则需要通过应变能密度函数WWW来表征(详细参加博客《COMSOL有限元仿真深度指南:超弹性模型有限元分析入门》)。 从上面我们也不难

忘了面孔的Batou 7170

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: Matlab:绘制和处理图像
下一篇: Matlab中粒子群优化指数熵图像分割算法
普通网友
博客等级 码龄3年 241粉丝 689原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值