Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于MATLAB的数字信号处理(3) 用FFT对信号作频谱分析

基于MATLAB的数字信号处理(3) 用FFT对信号作频谱分析

作者头像
叶庭云
发布于 2021-12-01 07:07:16
发布于 2021-12-01 07:07:16
7.9K01
代码可运行
举报
文章被收录于专栏:Python进阶之路Python进阶之路
运行总次数:1
代码可运行

文章目录

一、实验目的

学习用 FFT 对连续信号和时域离散信号进行频谱分析(也称谱分析)的方法, 了解可能出现的分析误差及其原因,以便正确应用FFT。

二、实验原理与方法

  • 用FFT对信号作频谱分析是学习数字信号处理的重要内容,经常需要进行谱分析的信号是模拟信号和时域离散信号,对信号进行谱分析的重要问题是频谱分辨率 D 和分析误差。
  • 频谱分辨率直接和 FFT 的变换区间 N 有关,因为FFT能够实现的频率分辨率是2π/N,因此要求2π/N≤D。可以根据此式选择 FFT 的变换区间N。误差主要来自于用 FFT 作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当 N 较大时离散谱的包络才能逼近于连续谱,因此 N 要适当选择大一些。
  • 周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT,得到的离散谱才能代表周期信号的频谱。如果不知道信号周期,可以尽量选择信号的观察时间长一些。
  • 对模拟信号进行谱分析时,首先要按照采样定理将其变成时域离散信号。如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。

三、实验内容及步骤

1. 有限长序列

选择 FFT 的变换区间 N 为 8 和 16 的两种情况进行频谱分析。分别打印其幅频特性曲线, 并进行对比、 分析和讨论。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%R4(n)的谱分析   有限长序列
%NDFT  不够的话  时域补零到N%8->16点  相邻谱线间隔变密  离散谱的包络更接近于连续谱
clear;

x1=[1 1 1 1];
%8DFT
N1=8;
xk=fft(x1,N1);   %计算x1(n)8DFT
subplot(221);         
stem(0:N1-1,[x1 zeros(1,N1-4)],'.','g'); %时域补零到 8个点 绘图
xlabel('n');
ylabel('x(n)');
title('R4(n)');
axis([0 8 0 1.2]);

subplot(222);
stem(0:0.25:1.75,abs(xk),'.','g');   
xlabel('\omega/\pi');
ylabel('幅度');
title('8点DFT的结果');
axis([0 2 0 4.5]);

%16DTF
N2=16;
xk=fft(x1,N2);
subplot(223);         
stem(0:N2-1,[x1 zeros(1,N2-4)],'.','r'); %时域补零到16个点 绘图
xlabel('n');
ylabel('x(n)');
title('R4(n)');
axis([0 16 0 1.2]);

subplot(224);
stem(0:0.125:1.875,abs(xk),'.','r');  
xlabel('\omega/\pi');
ylabel('幅度');
title('16点DFT的结果');
axis([0 2 0 4.5]);

运行效果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%x2(n)的谱分析
%NDFT  不够的话  时域补零到N点

clear;

x2=[1 2 3 4 4 3 2 1];

%8DFT
N1=8;
subplot(221);         
stem(0:N1-1,x2,'.','g'); 
xlabel('n');
ylabel('x(n)');
title('x2(n)');
axis([0 8 0 4.5]);

xk=fft(x2,N1);
subplot(222);
stem(0:0.25:1.75,abs(xk),'.','g');   %归一化
xlabel('\omega/\pi');
ylabel('幅度');
title('8点DFT的结果');
axis([0 2 0 24]);

%16DFT
N2=16;
subplot(223);         
stem(0:N2-1,[x2 zeros(1,N2-8)],'.','r');  %时域补零到16xlabel('n');
ylabel('x(n)');
title('x2(n)');
axis([0 16 0 4.5]);

xk=fft(x2,N2);
subplot(224);
stem(0:0.125:1.875,abs(xk),'.','r');
xlabel('\omega/\pi');
ylabel('幅度');
title('16点DFT的结果');
axis([0 2 0 24]);

运行效果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%x3(n)的频谱分析
%NDFT  不够的话  时域补零到N点
clear;

x3=[4 3 2 1 1 2 3 4];

%8DFT
N1=8;
subplot(221);         
stem(0:N1-1,x3,'.','g'); 
xlabel('n');
ylabel('x(n)');
title('x3(n)');
axis([0 8 0 4.5]);
xk=fft(x3,N1);
subplot(222);
stem(0:0.25:1.75,abs(xk),'.','g');
xlabel('\omega/\pi');
ylabel('幅度');
title('8点DFT的结果');
axis([0 2 0 24]);

%16DFT
N2=16;
subplot(223);         
stem(0:N2-1,[x3 zeros(1,N2-8)],'.','r'); %时域补零到16xlabel('n');
ylabel('x(n)');
title('x3(n)');
axis([0 16 0 4.5]);
xk=fft(x3,N2);
subplot(224);
stem(0:0.125:1.875,abs(xk),'.','r');
xlabel('\omega/\pi');
ylabel('幅度');
title('16点DFT的结果');
axis([0 2 0 24]);

运行效果如下:

观察可以发现:

  • 由 MATLAB 绘图可以发现,N=8时,x2(n) 和 x3(n) 的幅频特性是相同的,因为x2(n)=x3((n-4))R8(n),循环移位关系,所以 x3(n) 与 x2(n) 的 DFT 的幅频特性相同,如图 (2a) 和 (3a) 所示
  • 但是,当 N=16时,x3(n) 与 x2(n) 就不满足循环移位关系了,所以如图 (2b) 和 (3b) 所示,幅频特性不同

2. 周期序列

选择 FFT 的变换区间 N 为 8 和 16 的两种情况分别对以上序列进行频谱分析,分别打印其幅频特性曲线。 并进行对比、分析和讨论。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%x4(n)=cos(pi/4*n)的频谱分析   周期序列 
%周期序列x(n)周期如果事先不知道 截取M点进行DFT  再将截取长度扩大一倍
%比较二者主谱差别 若满足分析误差要求  这两个都可以近似表示x(n)的频谱
%否则  继续将截取长度加倍  直到前后两次主谱差别满足误差要求
%幅度跟N有关  主瓣会变窄 旁瓣会增加  更接近于真实的频谱 幅度是冲激那样的 又窄又高
clear;

n=0:31;
x4=cos(pi/4*n);

%8DFT
N1=8;
subplot(221);         
stem(0:1:31,x4,'.','g'); 
xlabel('n');
ylabel('x(n)');
title('x4(n)');
axis([0 31 -1.2 1.2]);

xk=fft(x4,N1);
subplot(222);
stem(0:0.25:1.75,abs(xk),'.','g');
xlabel('\omega/\pi');
ylabel('幅度');
title('8点DFT的结果');
axis([0 2 0 5]);

%16DFT
N2=16;
subplot(223);         
stem(0:1:31,x4,'.','r'); 
xlabel('n');
ylabel('x(n)');
title('x4(n)');
axis([0 31 -1.2 1.2]);

xk=fft(x4,N2);
subplot(224);
stem(0:0.125:1.875,abs(xk),'.','r');
xlabel('\omega/\pi');
ylabel('幅度');
title('16点DFT的结果');
axis([0 2 0 9]);

运行效果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%x5(n)=cos(pi/4*n)+cos(pi/8*n)的频谱分析
%周期序列x(n)周期如果事先不知道 截取M点进行DFT  再将截取长度扩大一倍
%比较二者主谱差别满足分析误差要求  这两个都可以近似表示x(n)的频谱
%否则  继续将截取长度加倍  直到前后两次主谱差别满足误差要求
clear;

n=0:31;
x5=cos(pi/4*n)+cos(pi/8*n);

%8DFT
N1=8;
subplot(321);         
stem(0:1:31,x5,'.','m'); 
xlabel('n');
ylabel('x(n)');
title('x5(n)');
axis([0 31 -2.2 2.5]);

xk=fft(x5,N1);
subplot(322);
stem(0:0.25:1.75,abs(xk),'.','m');
xlabel('\omega/\pi');
ylabel('幅度');
title('8点DFT的结果');
axis([0 2 0 7]);

%16DFT
N2=16;
subplot(323);         
stem(0:1:31,x5,'.','r'); 
xlabel('n');
ylabel('x(n)');
title('x5(n)');
axis([0 31 -2.2 2.5]);

xk=fft(x5,N2);
subplot(324);
stem(0:0.125:1.875,abs(xk),'.','r');
xlabel('\omega/\pi');
ylabel('幅度');
title('16点DFT的结果');
axis([0 2 0 10]);

%32DFT
N2=32;
subplot(325);         
stem(0:1:31,x5,'.','g'); 
xlabel('n');
ylabel('x(n)');
title('x5(n)');
axis([0 31 -2.2 2.5]);

xk=fft(x5,N2);
subplot(326);
stem(0:0.0625:1.9375,abs(xk),'.','g');
xlabel('\omega/\pi');
ylabel('幅度');
title('32点DFT的结果');
axis([0 2 0 20]);

运行效果如下:

  • 对周期序列 x(n) 进行谱分析,如果事先不知道周期,可以先截取 M 点进行DFT ,再将截取长度扩大一倍,比较结果,如果二者的差别满足分析误差要求,则可以近似表示该信号的频谱,如果不满足误差要求就继续将截取长度加倍,重复比较,直到结果满足要求。
  • 幅度为N/2,N增大,主瓣会变窄,旁瓣会增加 ,更接近于真实的频谱,幅度是冲激那样的,又窄又高。

3. 模拟周期信号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%对模拟周期信号作谱分析  
%首先要按照采样定理将其变成时域离散信号
%如果是模拟周期信号, 也应该选取整数倍周期的长度, 经过采样后形成周期序列
%再按照周期序列的谱分析进行
clear;

Fs=64;T=1/Fs;

%先按照采样定理将模拟信号变成时域离散信号
N=16;n=0:N-1; %FFT的变换区间 N=16
x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T); %对x6(t) 16点采样

%fftshift移动零频点到频谱中间 为了把结果和fft运算的结果一致
X6k16=fftshift(fft(x6nT,16)); %计算 x6nT 的16DFT  
Tp=N*T;F=1/Tp;    %频率分辨率 F
k=0:N-1;fk1=-32:4:28; %产生16DFT 对应的采样点频率(以零频率为中心)
subplot(3,1,1);stem(fk1,abs(X6k16),'.','g'); %绘制16DFT的幅频特性图
title('16点 DFT[x_6(nT)]|');xlabel('\omega/\pi');ylabel('幅度');
axis([-32 28 0 12]);

N=32;n=0:N-1; %FFT 的变换区间 N=32
x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T); %x6(t) 32点采样
X6k32=fftshift(fft(x6nT,32)); %计算x6(nT)32DFT
Tp=N*T;F=1/Tp;    %频率分辨率 F
k=0:N-1;fk2=-32:2:30; %产生 32DFT 对应的采样点频率(以零频率为中心)
subplot(3,1,2);stem(fk2,abs(X6k32),'.','r'); %绘制 32DFT 的幅频特性图
title('32点 DFT[x_6(nT)]|');xlabel('\omega/\pi');ylabel('幅度');
axis([-32 31 0 20]);

N=64;n=0:N-1; %FFT 的变换区间 N=64
x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T); %对x6(t) 64点采样
X6k64=fftshift(fft(x6nT,64)); %计算 x6(nT)64DFT
Tp=N*T;F=1/Tp;    %频率分辨率 F
k=0:N-1;fk3=-32:1:31; %产生64DFT对应的采样点频率(以零频率为中心)
subplot(3,1,3);stem(fk3,abs(X6k64),'.','m'); %绘制64DFT的幅频特性图
title('64点 DFT[x_6(nT)]|');xlabel('\omega/\pi');ylabel('幅度');
axis([-32 31 0 40]);

运行效果如下:

四、回答思考题

(1) 对于周期序列, 如果周期不知道, 如何用 FFT 进行谱分析?

答:周期信号的周期预先不知道时,可先截取 M 点进行DFT,再将截取长度扩大一倍截取,比较结果,如果二者的差别满足分析误差要求,则可以近似表示该信号的频谱,如果不满足误差要求就继续将截取长度加倍,重复比较,直到结果满足要求。

(2) 如何选择FFT的变换区间(包括非周期信号和周期信号)?

答:对于非周期信号:有频谱分辨率F,而频谱分辨率直接和 FFT 的变换区间有关,因为 FFT 能够实现的频率分辨率是2π/N…因此有最小的N>2π/F。就可以根据此式选择 FFT 的变换区间。对于周期信号,周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT,得到的离散谱才能代表周期信号的频谱。

(3)当 N=8 时, x2 (n) 和 x3 (n)的幅频特性会相同吗?为什么?N=16时呢?

  • 由 MATLAB 绘图可以发现,N=8时,x2(n) 和 x3(n) 的幅频特性是相同的,因为x3(n)=x2((n+4))R8(n),为循环移位关系,所以 x3(n) 与 x2(n) 的DFT的幅频特性相同,如图 (2a) 和 (3a) 所示
  • 但是,当 N=16 时,x3(n) 与 x2(n) 就不满足循环移位关系了,所以如图 (2b) 和 (3b) 所示,幅频特性不同

五、实验总结

  • 用 FFT 对信号作频谱分析是学习数字信号处理的重要内容,经常需要进行谱分析的信号是模拟信号和时域离散信号,对信号进行谱分析的重要问题是频谱分辨率 D 和分析误差。
  • 频谱分辨率直接和 FFT 的变换区间 N 有关,因为FFT能够实现的频率分辨率是2π/N,因此要求2π/N≤D。可以根据此式选择 FFT 的变换区间N。误差主要来自于用 FFT 作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当 N 较大时离散谱的包络才能逼近于连续谱,因此 N 要适当选择大一些。
  • 周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT,得到的离散谱才能代表周期信号的频谱。如果不知道信号周期,可以尽量选择信号的观察时间长一些。
  • 对模拟信号进行谱分析时,首先要按照采样定理将其变成时域离散信号。如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/12/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
FFT_频谱分析(数字信号处理)
用FFT对信号作频谱分析是学习数字信号处理的重要内容。经常需要进行谱分析的信号是模拟信号和时域离散信号。对信号进行谱分析的重点在于频谱分辨率及分析误差。频谱分辨率D和频谱分析的点数N直接相关,其分辨率为2π/N 。因此2π/N≤D,可以据这个公式确定频率的分辨率。
Fivecc
2022/11/21
2.4K0
FFT_频谱分析(数字信号处理)
MATLAB实现FFT 及信号的谱分析
一、实验目的 1.通过实验加深对 FFT 的理解,熟悉 FFT 程序、结构及编程方法。
timerring
2022/07/20
1.3K0
MATLAB实现FFT 及信号的谱分析
matlab 及数字信号实验报告,Matlab数字信号处理实验报告.doc
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
全栈程序员站长
2022/07/23
1K0
IIR数字滤波器设计(数字信号处理)
2.掌握IIR数字滤波器的MATLAB实现方法,会调用ellipord()和ellip() 
Fivecc
2022/11/21
1.7K0
IIR数字滤波器设计(数字信号处理)
基于MATLAB的数字信号处理(4) IIR数字滤波器设计及软件实现
设计IIR数字滤波器一般采用间接法(脉冲响应不变法和双线性变换法),应用最广泛的是双线性变换法。
叶庭云
2021/12/01
8.9K0
基于MATLAB的数字信号处理(4)    IIR数字滤波器设计及软件实现
数字信号处理综合MATLAB设计 双音多频拨号系统
一、实验目的 1. 了解数字信号处理当今应用的基本情况。 2. 对该课程做系统地总结。 3.将所学知识运用到实践中,能够学以致用。
timerring
2022/07/20
1.7K0
数字信号处理综合MATLAB设计 双音多频拨号系统
基于MATLAB语音信号的处理与滤波
摘要:MATLAB是十分强大的用于数据分析和处理的工程实用软件,利用其来进行语音信号的分析、处理和可视化十分便捷。文中介绍了在MATLAB环境中如何驱动声卡采集语音信号和语音信号采集后的文档处理方法,并介绍了FFT频谱分析原理及其显示、MATLAB中相关函数的功能、滤波器的设计和使用。在此基础上,对实际采集的一段含噪声语音信号进行了相关分析处理,包括对语音信号的录取和导入,信号时域和频域方面的分析,添加噪声前后的差异对比,滤波分析,语音特效处理。结果表明利用MATLAB处理语音信号十分简单、方便且易于实现。
全栈程序员站长
2022/09/01
4.2K0
基于MATLAB语音信号的处理与滤波
信号与系统实验六 傅里叶分析方法的应用
3.已知信号为​编辑,用MATLAB编程实现该信号经冲激脉冲,抽样得到的抽样信号fs(t)及其频谱。令参数E=5,τ=0.5,采用抽样间隔
timerring
2022/07/20
1.7K0
信号与系统实验六 傅里叶分析方法的应用
Matlab:语音信号处理与滤波
注:本文章仅供参考,本人并非通信专业,相关知识早已忘得差不多了,所以不要再问我相关问题啦~sorry
全栈程序员站长
2022/08/24
1.3K0
Matlab:语音信号处理与滤波
MATLAB语音信号处理「建议收藏」
数字信号处理课设,我们使用MATLAB对语音信号进行了一系列处理,并将其所有功能集中于下图界面中:
全栈程序员站长
2022/09/01
4.2K0
MATLAB语音信号处理「建议收藏」
基于MATLAB的数字信号处理(5) FIR数字滤波器设计及软件实现
MATLAB函数 fir1 和 fftfilt 的功能及其调用格式可以用 help 命令查阅;
叶庭云
2021/12/01
9.2K0
基于MATLAB的数字信号处理(5)    FIR数字滤波器设计及软件实现
信号处理之频谱原理与python实现
EEG信号是大脑神经元电活动的直接反应,包含着丰富的信息,但EEG信号幅值小,其中又混杂有噪声干扰,如何从EEG信号中抽取我们所感兴趣的信号是一个极为重要的问题。自1932年Dietch首先提出用傅里叶变换方法来分析EEG信号,该领域相继引入了频域分析、时域分析等脑电分析的经典方法。
脑机接口社区
2020/06/30
2.1K0
信号处理之频谱原理与python实现
基于matlab的语音信号频谱分析_声音信号的数字化过程
随着软硬件技术的发展,仪器的智能化与虚拟化已成为未来实验室及研究机构的发展方向[1]。虚拟仪器技术的优势在于可由用户定义自己的专用仪器系统,且功能灵活,很容易构建,所以应用面极为广泛。基于计算机软硬件平台的虚拟仪器可代替传统的测量仪器,如示波器、逻辑分析仪、信号发生器、频谱分析仪等[2]。从发展史看,电子测量仪器经历了由模拟仪器、智能仪器到虚拟仪器,由于计算机性能的飞速发展,已把传统仪器远远抛到后面,并给虚拟仪器生产厂家不断带来连锅端的技术更新速率。目前已经有许多较成熟的频谱分析软件,如SpectraLAB、RSAVu、dBFA等。
全栈程序员站长
2022/09/22
2K0
基于matlab的语音信号频谱分析_声音信号的数字化过程
信号补零对信号频谱的影响
先抛出结论: 补 1 次零相当于在原始频谱图中每两个频率之间插入1个频率值,补 2 次零相当于在原始频谱图中每两个频率之间插入 2 个频率值,并且原始频率值的位置及其幅值保持不变。因此, 补零会使频谱图中的频率点的数量增加,从而使得频谱图更加的光滑连续,但是补零不能对频谱图中的频率分辨率、频率值以及幅值有所改善。
Gnep@97
2023/10/26
1.3K0
信号补零对信号频谱的影响
数字信号处理课程实验报告(数字信号处理需要什么基础)
按照题目要求,首先应利用计算机生成一个由多个频率叠加而成的信号。之后在不通风抽样频率之下对信号进行采样。编写FFT程序对信号进行DFT变换,应能观察出在满足和不满足奈奎斯特采样定理的情况下信号频谱分别处于不混叠和混叠状态。然后需要对信号进行恢复以观察满足或不满足奈奎斯特采样定理的情况下,频域的频谱混叠对时域恢复信号的影响。在频谱混叠时,观察其时域信号的失真。
全栈程序员站长
2022/07/30
8710
数字信号处理课程实验报告(数字信号处理需要什么基础)
利用MATLAB进行信号处理:傅里叶变换与滤波器设计
信号处理是电气工程和计算机科学中的一个重要领域。通过分析和处理信号,我们可以提取有用的信息,去除噪声,以及实现各种应用,如图像处理、音频处理和通信系统等。本文将介绍如何使用MATLAB进行信号处理,重点介绍傅里叶变换与滤波器设计,并提供相关的代码实例。
一键难忘
2025/01/09
4640
MATLAB实现离散信号的DTFT 和DFT
一、实验目的 加深对离散信号的DTFT和DFT的及其相互关系的理解。 二、实验原理及方法         在各种信号序列中,有限长序列信号处理占有很重要地位,对有限长序列,我们可以使用离散Fouier变换(DFT)。这一变换不但可以很好的反映序列的频谱特性,而且易于用快速算法在计算机上实现。         DTFT和DFT的主要区别就是DFT在时域和频域都是离散的,它带来的最大好处就是适合于数值计算,适合于计算机处理,DTFT和DFT有许多相似的性质。         利用MATLAB工程计算语言按要求编写程序算法,实现对有限长序列的离散时间傅立叶变换(DTFT)和离散傅立叶变换(DFT)的求解。 三、实验内容 1.     已知序列:         x(n) = cos
timerring
2022/08/03
2.4K0
MATLAB实现离散信号的DTFT 和DFT
基于Python的频谱分析(一)
1、傅里叶变换   傅里叶变换是信号领域沟通时域和频域的桥梁,在频域里可以更方便的进行一些分析。傅里叶主要针对的是平稳信号的频率特性分析,简单说就是具有一定周期性的信号,因为傅里叶变换采取的是有限取样的方式,所以对于取样长度和取样对象有着一定的要求。
py3study
2020/01/18
4.2K0
信号与系统实验八 音频信号的时域、频域观测与分析
音频信号是一种连续变化的模拟信号,计算机只能处理和记录二进制的数字信号,由自然音源而得到的音频信号必须经过采样、量化和编码,变成二进制数据后才能送到计算机进行再编辑和存储。
timerring
2022/08/03
1.4K0
信号与系统实验八 音频信号的时域、频域观测与分析
MATLAB实现离散傅里叶变换DFT
一、实验目的 1.通过实验加深对DFT 的理解。 2.理解如何用DFT计算离散信号频谱。
timerring
2022/08/03
1.1K0
MATLAB实现离散傅里叶变换DFT
推荐阅读
相关推荐
FFT_频谱分析(数字信号处理)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验