matlab cheby1函数 C实现

【MATLAB】数字滤波器的设计 一、引言 在信号处理过程中,所处理的信号往往混有噪声,从接收到的信号中消除或减弱噪声是信号传输和处理中十分重要的问题。根据有用信号和噪声的不同特性,提取有用信号的过程称为滤波,实现滤波功能的系统称为滤波器。在以往的模拟电路中用的都是模拟滤波器,在近代电信设备和各类控制系统中,由于数字化的普及,数字滤波器已得到了广泛的应用。数字滤波器与传统模拟滤波器在实现方式上存在很大的差异。传统的模拟滤波器主要是硬件实现,它的硬件部分主要包括电容,电感和电阻等元件,而数字滤波器在硬件实现上主要涉及A/D转换器、D/A转换 阅读详情

继上一篇文章matlab butter函数 C实现

这一篇实现cheby1(切比雪夫Ⅰ型)

void cheby1(int n, double r, double Wn[], int type, int analog, double *ab, double *bb)
{
    double fs = 2;
    double u[2] = {0.0, 0.0};
    // step 1: get analog, pre-warped frequencies
    if (!analog)
    {
        if (type == 1 || type == 2)
        {
            fs = 2;
            u[0] = 2 * fs * tan(PI * Wn[0] / fs);
        }
        else
        {
            fs = 2;
            u[0] = 2 * fs * tan(PI * Wn[0] / fs);
            u[1] = 2 * fs * tan(PI * Wn[1] / fs);
        }
    }
    else if (type == 3 || type == 4)
    {
        if (type == 1 || type == 2)
        {
            u[0] = Wn[0];
        }
        else
        {
            u[1] = Wn[1];
        }
    }

    // step 2: convert to low-pass prototype estimate
    double Bw = 0.0;
    if (type == 1 || type == 2)
    {
        Wn = u;
    }
    else if (type == 3 || type == 4)
    {
        Bw = u[1] - u[0];
        Wn[0] = sqrt(u[0] * u[1]); // center frequency
        Wn[1] = 0.0;
    }

    // step 3: Get N-th order Butterworth analog lowpass prototype
    Complex *z = (Complex *)malloc(0 * sizeof(Complex));
    Complex *p = (Complex *)malloc(n * sizeof(Complex));
    double k = 0;
    cheb1ap(n, r, p, &k);

    // Transform to state-space
    int a_size = n;
    double *a = (double *)malloc(sizeof(double) * n * n);
    double *b = (double *)malloc(sizeof(double) * n);
    double *c = (double *)malloc(sizeof(double) * n);
    double d;

    zp2ss(z, p, 0, n, k, a, b, c, &d);

    switch (type)
    {
    default:
    case 1: // Lowpass
        lp2lp(n, a, b, Wn[0]);
        break;
    case 2: // highpass
        lp2hp(n, a, b, c, &d, Wn[0]);
        break;
    case 3: // Bandpass
        lp2bp(n, &a, &b, &c, &d, Wn[0], Bw);
        a_size = 2 * n;
        break;
    case 4: // Bandstop
        lp2bs(n, &a, &b, &c, &d, Wn[0], Bw);
        a_size = 2 * n;
        break;
    }


    if (!analog)
    {
        bilinear(a_size, a, b, c, &d, fs);
    }

    
    for (size_t i = 0; i < n; i++)
    {
        for (size_t j = 0; j < n; j++)
        {
            printf("%.20f ",a[i*n+j]);
        }
        printf("\n");
    }

    hhbg(a, a_size);
    double *u_real = (double *)malloc(sizeof(double) * a_size);
    double *v_imag = (double *)malloc(sizeof(double) * a_size);
	double eps = 0.000000000000000000000000000001;
	int jt = 60;
	hhqr(a, a_size, eps, jt, u_real, v_imag);

    Complex *p1 = (Complex *)malloc(sizeof(Complex) * a_size);
    Complex *z1 = (Complex *)malloc(sizeof(Complex) * a_size);
    Complex *ctemp = (Complex *)malloc(sizeof(Complex) * (a_size + 1));

	printf("p:\n");
    
	for (int i = 0; i < a_size; i++)
	{
		p1[i].real = u_real[i];
		p1[i].imaginary = v_imag[i];
        printf("%.20f(%.20f)\n",p1[i].real,p1[i].imaginary);
	}

    cheb1zeros(p1,a_size,type,n,Wn[0],r,z1,&k);

    Complex *tempa = (Complex *)malloc(sizeof(Complex) * (a_size + 1));
    Complex *tempb = (Complex *)malloc(sizeof(Complex) * (a_size + 1));

    complex_poly(p1, a_size, tempa);
    complex_poly(z1, a_size, tempb);

    for (size_t i = 0; i < a_size + 1; i++)
    {
        ab[i] = tempa[i].real;
        bb[i] = tempb[i].real * k;
    }

    free(z);
    free(p);
    free(a);
    free(b);
    free(ctemp);
    free(u_real);
    free(v_imag);   
    free(p1);
    free(z1);
    free(tempa);
    free(tempb);
}

函数中出现比较多的数学计算后面会文章会一一罗列,这里主要介绍切比雪夫Ⅰ型相关的函数

其中cheb1ap为Chebyshev Type I analog lowpass filter prototype,
创建N阶切比雪夫Ⅰ型滤波器的零极点模型,代码如下:

void cheb1ap(int n, double r, Complex *p, double *k)
{
    int iseven = n % 2 == 0;
    double epsilon = sqrt(pow(10, 0.1 * r) - 1); // sqrt(10^(.1*rp)-1)
    double mu = asinh(1.0 / epsilon) / n;

    double *realp = (double *)malloc(sizeof(double) * n);
    double *imagp = (double *)malloc(sizeof(double) * n);
    double *tempreal = (double *)malloc(sizeof(double) * n);
    double *tempimag = (double *)malloc(sizeof(double) * n);
    for (int i = 0; i < n; i++)
    {
        double angle = PI * (1.0 + 2.0 * i) / (2.0 * n) + PI / 2.0;
        p[i] = create(cos(angle), sin(angle));
        realp[i] = get_real(p[i]);
        imagp[i] = get_imaginary(p[i]);
    }
    for (size_t i = 0; i < n; i++)
    {
        tempreal[i] = realp[i];
        tempimag[i] = imagp[i];
    }
    flipud(tempreal, n);
    flipud(tempimag, n);
    double smu = sinh(mu);
    double cmu = cosh(mu);
    for (size_t i = 0; i < n; i++)
    {
        realp[i] = (realp[i] + tempreal[i]) / 2.0;
        imagp[i] = (imagp[i] - tempimag[i]) / 2.0;
        p[i] = create(smu * realp[i], cmu * imagp[i]);
    }

    Complex sump = complex_array_prod(p, n);
    *k = get_real(sump);
    if (iseven)
    {
        *k = *k / sqrt(1 + pow(epsilon, 2));
    }
    free(realp);
    free(imagp);
    free(tempreal);
    free(tempimag);
}

其中cheb1zeros 与buttzeros作用相似,用于计算零点(zeros)和增益(gain),原代码如下:

function [z,k] = cheb1zeros(btype,n,Wn,analog,p,Rp)
% This internal function returns the exact zeros and gain of the ZPK form.
if iseven(n)
   g = 10^(-Rp/20);  % -Rp decibels
else
   g = 1;  % 0 dB
end
if analog
   % for lowpass and bandpass, don't include zeros at +Inf or -Inf
   switch btype
      case 1  % lowpass: H(0) = g
         z = zeros(0,1);
         k = g * real(prod(-p));
      case 2  % bandpass: H(1i*Wn) = 1
         z = zeros(n,1);
         k = g * real(prod(1i*Wn-p)/(1i*Wn)^n);
      case 3  % highpass: H(inf) = g
         z = zeros(n,1);
         k = g;
      case 4  % bandstop: H(0) = g
         z = 1i*Wn*((-1).^(0:2*n-1)');
         k = g;
   end
else
   Wn = 2*atan2(Wn,4);
   switch btype
      case 1  % lowpass: H(1) = g
         z = -ones(n,1);
         k = g * real(prod(1-p))/2^n;
      case 2  % bandpass: H(z) = g for z=exp(1i*sqrt(Wn(1)*Wn(2)))
         z = [ones(n,1); -ones(n,1)];
         zWn = exp(1i*Wn);
         k = g * real(prod(zWn-p)/prod(zWn-z));
      case 3  % highpass: H(-1) = g
         z = ones(n,1);
         k = g * real(prod(1+p))/2^n;
      case 4  % bandstop: H(1) = g
         z = exp(1i*Wn*( (-1).^(0:2*n-1)' ));  
         k = g * real(prod(1-p)/prod(1-z));
   end
end

C实现如下:

void cheb1zeros(Complex *p, int np, int type, int n, double wn, double r, Complex *z, double *k)
{
    Complex *zt = (Complex *)malloc(sizeof(Complex) * np);
    Complex *pt=(Complex*)malloc(sizeof(Complex)*np);
	Complex zwn;
    wn = 2 * atan2(wn, 4);

    double g=1.0;
    if(n%2==0)
    {
        g=pow(10,-r/20.0);
    }

    switch (type)
    {
    case 1:
       for (size_t i = 0; i < np; i++)
		{
			z[i]=create(-1.0,0);
			pt[i] = complex_subtract(create(1.0,0.0),p[i]);
		}

        *k = get_real(complex_array_prod(pt, np)) / pow(2, n);
        break;
    case 2:
        for (size_t i = 0; i < np; i++)
        {
            z[i] = create(1.0,0.0);
            pt[i] = complex_add(create(1.0, 0.0), p[i]);
        }

        *k = get_real(complex_array_prod(pt, np)) / pow(2, n);
        break;
    case 3:
        zwn = complex_exponent(complex_multiply_double(create(0, 1.0), wn));
        for (size_t i = 0; i < np; i++)
        {
            if (i < n)
            {
                z[i] = create(1.0,0.0);
            }
            else
            {
                z[i] = create(-1.0,0.0);
            }

            zt[i] = complex_subtract(zwn, z[i]);

            pt[i] = complex_subtract(zwn, p[i]);
        }

        *k = get_real(complex_divide(complex_array_prod(pt, np), complex_array_prod(zt, np)));
        break;
    case 4:
        for (size_t i = 0; i < 2*n; i++)
        {
            z[i] = complex_exponent(complex_multiply_double(create(1.0, 0.0), wn * pow(-1, i)));

            zt[i] = complex_subtract(create(1.0,0.0), z[i]);

            pt[i] = complex_subtract(create(1.0,0.0), p[i]);
        }

        *k = get_real(complex_divide(complex_array_prod(pt, np), complex_array_prod(zt, np)));
        break;

    default:
        break;
    }

    *k = *k * g;
    free(zt);
    free(pt);
}

测试

与matlab结果对比测试,当n>34阶时,过程中求解矩阵本征矢量达到病态条件,出现错误,需要重新整理矩阵的本征矢量求解方法;对于1-34阶计算结果基本吻合。

下一篇: matlab cheby2函数 C实现

从理论到实践:利用MATLAB cheby1函数设计契比雪夫I型模拟低通滤波器 本文详细介绍了如何利用MATLAB cheby1函数设计契比雪夫I型模拟低通滤波器。从基础原理到MATLAB工具链使用,包括cheb1ap和cheb1ord函数的实战技巧,再到cheby1函数的深度解析和完整设计实例演示,帮助工程师高效实现滤波器设计。文章还提供了性能优化技巧和常见问题解决方案,适合信号处理领域的专业人士参考。 阅读详情

相关推荐

基于切比雪夫逼近法的滤波器的MATLAB设计与实现

切比雪夫逼近法(Chebyshev approximation)是一种常用的设计滤波器的方法,它可以实现对滤波器的频率响应进行精确控制。切比雪夫逼近法(Chebyshev approximation)是一种常用的滤波器设计方法,它可以精确地控制滤波器的频率响应。首先,我们需要明确滤波器的设计要求,例如滤波器类型(低通、高通、带通或带阻)、截止频率、通带最大衰减和阻带最小衰减等。首先,我们需要明确滤波器的设计要求,例如滤波器类型(低通、高通、带通或带阻)、截止频率、通带最大衰减和阻带最小衰减等。

NoerrorCode的博客 671

Matlab基础——切比雪夫I型滤波器(一)

Matlab——切比雪夫I型滤波器 cheb1ord 、 chey1 and freqz 切比雪夫Ⅰ型滤波器在通带或阻带上频率响应幅度等波纹波动的滤波器。 切比雪夫滤波器和理想滤波器的频率响应曲线之间的误差最小,但是在通频带内存在幅度波动。

weixin_44235123的博客 3万+

基于FPGA的IIR滤波器的实现— MATLAB函数实现

根据MATLAB提供的多种设计IIR数字滤波器的函数设计滤波器,采用根据原型转换法原理实现的四种IIR设计函数:butter、cheby1、cheby2、ellip、yulewalk一、采用butter(巴特沃斯函数)设计butter函数可以直接设计各种形式的数字滤波器,同时也可以设计模拟滤波器。butter形式:butter函数可以设计低通、高通、带通、带阻等各种形式的滤波器。

qq_46475176的博客 370

常用模拟低通滤波器的设计~经典 IIR 滤波器之契比雪夫I型滤波器

常用模拟低通滤波器的设计——契比雪夫I型滤波器。1、cheb1ap 函数;2、cheb1ord 函数;3、cheby1函数

yishuihanq的博客 6539

数字调制解调技术的MATLAB与FPGA实现-FPGA实现数字信号处理基础 【2.7】

利用“「z,p,kl=ellip(n,Rp,Rs,Wn)”及“[z,p,k]=ellip(n,Rp,Rs,Wn,’ftype’)’可以得到滤波器的零、极点和增益表达式:利用“[A,B,C,D]=ellip(n,Rp,Rs,Wn)'及“[A,B,C,D]=ellip(n,Rp,Rs,Wn,’fype’)”可以得到滤波器的状态空间表达形式,实际设计中很少使用这种语法形式。只是利用chebyl函数设计的滤波器在通带是等波纹的,在阳带是单调的,而利用cheby2函数设计的滤波器在阻带是等波纹的,在通带是单调的。

qq_43416206的博客 1078

cheby1滤波器matlab程序

cheby2滤波器的matlab仿真资源

使用Matlab设计数字滤波器,从原理到代码

本文是在Matlab下设计数字滤波器的一些总结,减少了理论的说明,重在代码的实现方法,给出了普遍使用的数字滤波器代码,修改参数即可移植使用。

乐观的lishan的博客 10万+

『n8n』初识界面

在首页(Overview),我们和 n8n 最常打交道的是“Workflows”、“Credentials”、“Executions”这几个面板(其实后面2个也会用到,但初学阶段可以先不管)。Workflows 面板可以看到我们创建的所有工作流,所以要给工作流起一个一眼看上去就知道是干嘛的名字。

weixin_39415598的博客 1458

基于FPGA的IIR滤波器的实现(1)— MATLAB函数实现

本章讲解根据MATLAB提供的多种设计IIR数字滤波器的函数设计滤波器,采用根据原型转换法原理实现的四种IIR设计函数:butter、cheby1、cheby2、ellip、yulewalk。

qq_52450571的博客 2822

FPGA实战:用Verilog实现Costas环载波同步(附Vivado2019.2仿真步骤)

本文详细介绍了如何在FPGA上使用Verilog实现Costas环载波同步,包括核心原理、Vivado2019.2工程配置、代码实现及仿真验证。通过正交下变频、相位误差检测和环路滤波等关键模块的设计,帮助开发者掌握数字通信系统中的载波同步技术,并提供了实用的调试和优化技巧。

k0l1m2n3o的博客 134

全国排污许可证数据

from tkinter import * # 导入窗口控件 import tkinter.filedialog import requests from lxml import etree from tkinter import ttk from bs4 import BeautifulSoup import webbrowser # 调用浏览器打开网页 from tkinter import messagebox # 弹出提示框 from openpyxl import Workbook imp.

Newnotes的博客 3385

matlab cheby2函数 C实现

IIR滤波器 matlab cheby2 chebyshev2 che2ap

CSharp_Beginner的博客 560

李大勇matlab密码,基于MatlabSimulink的太阳能热水系统仿真研究 沈超.doc

基于MatlabSimulink的太阳能热水系统仿真研究 沈超中国工程热物理学会 工程热力学与能源利用 编号:141090基于Matlab/Simulink的太阳能热水系统仿真研究沈 超1 1 余 鹏1 李洪欣1 魏新利2郑州大学土木工程学院,郑州 450001郑州大学化工与能源学院,郑州 45...

weixin_42298437的博客 1340

别再只用巴特沃斯了!用MATLAB的cheby1函数快速搞定切比雪夫I型滤波器设计(附完整代码)

本文详细介绍了如何使用MATLAB的cheby1函数设计切比雪夫I型滤波器,包括其核心优势、关键设计参数解析以及全流程实现方法。通过对比巴特沃斯滤波器,展示了切比雪夫I型滤波器在相同性能指标下显著降低阶数的优势,并提供了完整的代码示例和实战案例,适用于音频信号处理、通信系统仿真等多种应用场景。

weixin_30751947的博客 822

SAP_PP模块中MRP中信号灯简介

一、信号灯的作用二、常见的信号灯颜色及含义三、信号灯的来源四、常见场景示例示例1:物料满足所有需求示例2:生产订单已延迟示例3:缺料或未产生计划订单五、相关事务码参考六、如何应对红色或黄色信号灯?七、前台操作说明在 SAP PP 模块中,**MRP(物料需求计划)运行结果中的“信号灯”是一种非常直观的可视化提示工具,用于帮助用户快速识别物料计划是否存在异常或需要关注的问题。这些信号灯通常出现在MD04(库存/需求清单)、MD05(单物料MRP清单)、MD07(MRP列表)**等事务代码的界面中。

我小时候很黑的博客 621

某AI推荐系统项目管理复盘:架构师总结的6大方法论与调优策略

我是张三,某大厂资深AI架构师,主导过5个千万级用户的推荐系统项目(覆盖电商、内容、视频、音乐、外卖等场景)。我的公众号“AI架构师笔记”会分享更多AI项目管理和技术实战经验,欢迎关注。最后的话:推荐系统不是“一锤子买卖”,而是“持续优化的过程”。希望这篇文章能帮你少踩坑,多做对——毕竟,把复杂的事做成,才是架构师的核心能力。

2501_92132293的博客 361

matlab cheby,【MAtlab的一段程序希望有人解答.helpcheby1CHEBY1ChebyshevTypeIdigitalandanalogfilterdesign.[B,A]=CHE...

MAtlab的一段程序希望有人解答.help cheby1CHEBY1 Chebyshev Type I digital and analogfilter design.[B,A] = CHEBY1(N,R,Wp) designs an Nth order lowpass digital Chebyshevfilter with R decibels of peak-to-peak ripple ...

weixin_34233720的博客 365

【华为OD机试真题 2025C卷新题】855、识文断句 | 机试真题+思路参考+代码分析(C++、Java、Py、C语言、JS)

【华为OD机试真题 2025C卷新题】855、识文断句 | 机试真题+思路参考+代码分析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华为

KJ.JK 1850

手把手教你调参:MATLAB cheby1函数设计切比雪夫滤波器时,通带波纹Rp到底设多少才合适?

本文详细解析了MATLAB cheby1函数设计切比雪夫I型滤波器时通带波纹Rp的科学设置方法。通过分析不同应用场景(如音频处理、生物信号采集等)的需求,提供了Rp值的典型范围和建议设置策略,帮助工程师在滤波器性能和计算复杂度之间取得平衡。文章还介绍了使用cheb1ord函数进行参数优化的实用技巧,并对比了不同Rp值对滤波器特性的影响。

weixin_30482383的博客 364

YOLO26 网络结构逐模块解析:Backbone/Neck/Head

本文解析了YOLO26目标检测网络的架构设计,重点介绍其在Backbone、Neck和Head三个核心组件的创新优化。Backbone采用改进的CSP模块与轻量级注意力机制,提升特征提取效率;Neck使用改进的BiFPN结构实现高效多尺度特征融合;Head采用完全解耦设计简化回归流程。文章详细分析了各模块的技术演进、实现细节和设计思想,通过流程图和代码示例展示了YOLO26的整体架构和关键组件实现。该研究对模型优化、定制开发和硬件部署具有重要指导意义。

一键难忘的博客 1241

Camera2Demo

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

别再只用巴特沃斯了!用MATLAB的cheby1函数快速搞定带通滤波器设计(附完整代码)

本文介绍了如何使用MATLAB的cheby1函数设计高性能契比雪夫I型带通滤波器,相比传统巴特沃斯滤波器,它能以更低阶数实现相同性能指标,显著提升计算效率。文章详细解析了cheb1ord和cheby1函数的使用方法,并提供了完整的带通滤波器设计代码示例,帮助工程师快速应用于信号处理项目。

weixin_30781433的博客 388

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

matlab 与C语言关于filter函数的实现

MATLAB实现滤波器,滤波器类似:低通、高通、带通、带阻。 实现方式:(1)利用Matlab代码生成DLL供其他模块调用方法。 优点:实现速度快,可利用C直接调用matlab的DLL快速实现算法功能,无需用C考虑算法实现过程。 缺点:运行需要电脑上具备matlab运行环境MCR(或电脑上具有完整的matlab版本存在),且配置调试麻烦。 如翻译bpfilter滤波器,C调用matlabD

enjoy_learn的博客 7641

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IIR滤波器设计(调用MATLAB IIR函数来实现)

转载请注明文章来源 – http://blog.youkuaiyun.com/v_hyx ,请勿用于任何商业用途       对于滤波器设计,以前虽然学过相关的理论(现代数字信号处理和DSP设计),但一直不求甚解,也没用过。趁着最近使用了一下,就来重学一回,温故而知新。       先来说说IIR滤波器设计,理论与原理参考如下博客,写得简明易懂,不错。 http://blog.youkuaiyun.com/

分享快乐 1万+

matlab 模拟滤波器转换为数字滤波器,(转载)Matlab中直接生成模拟/数字滤波器的简易方法...

虽然matlab提供了很多产生低通滤波器的函数,而且也提供了将低通转换为高通、带通等滤波器的方法函数,以及数字化的函数。但是为了简化设计及设计者方便考虑,matlab还提供了更为简便的产生各种滤波器的方法。1 besself功能:贝塞尔(Bessel)模拟滤波器设计。格式:[b,a] =besself(n,Wn)[b,a] = besself(n,Wn,'ftype')[z,p,k] = bess...

weixin_39657300的博客 1431

cheby1设计低通高通滤波器

设计一频率分分别为10hz和40hz的混合信号,分别通过低通和高通滤波器分离混合信号 fs=100; x=0:1/fs:1; tt=sin(20*pi*x+3)+4*sin(80*pi*x+3)+rands(1,length(x)); tt1=sin(20*pi*x+3); tt2=4*sin(80*pi*x+3); figure; subplot(311); plot(x,tt,'k-'); ...

qq_28988903的博客 3917
上一篇: matlab butter函数 C实现
下一篇: matlab cheby2函数 C实现
zzzLeaon
博客等级 码龄10年 159粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值