自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (1)
  • 收藏
  • 关注

原创 论文图片绘制 Python绘制多分类混淆矩阵及可视化(颜色随正确率渐变)

如何在多分类任务中绘制混淆矩阵

2022-06-24 20:45:24 11991 4

原创 基于倒谱法、自相关法、短时幅度差法的基音频率估计算法(MATLAB及验证)

基音频率检测一、概念何为基音周期?人在发音时,根据声带是否振动可以将语音信号分为清音和浊音两种。浊音携带大量的能量,因此又被称为有声语音,其在时域上有明显的周期性。而清音类似于白噪声,没有明显的周期性。发浊音时,气流通过声门使声带产生张弛震荡式振动,产生准周期的激励脉冲串。这种声带振动的频率称为基音频率;相应的周期就称为基音周期。基音频率与个人声带的情况有关,包括声带长短、薄厚、韧性、劲度和发音习惯,总的来说基音频率就是说话人的特征之一。而且基音频率还随着人的性别、年龄不同而有所不同。男性大概在702

2021-06-18 13:26:29 8752 12

原创 基于倒谱法和线性预测法估计基音频率(MATLAB和Python)

基于倒谱法和线性预测法估计基音频率(MATLAB和Python)倒谱法基音检测在python中实现一帧信号的基音频率估计wlen = 256inc = 128pitch = []x1, Fs = librosa.load("a9.wav",sr=None)plt.subplot(2,1,1)# plt.plot(x1) # 画一段语音波形signal = enframe(x1, wlen, inc)# 取一帧framedata = signal[15]plt.plot(frameda

2021-06-11 14:47:13 3692 9

原创 将py文件打包为exe可执行文件

安装pyinstaller考虑到电脑中不安装panda或者IED软件的同学也可以打开程序进行数据比对,因此我考虑能否像c语言一样将其编译成.exe可执行文件,因此我到网上查找相关的方法。使用pip install pyinstaller安装pyinstaller库,就可以封装成exe函数编译在对应文件夹中打开cmd然后输入指令“pyinstaller -F 文件名.py”,进行封装稍等一会就可以在当前目录下的dist文件夹下看到对应的exe文件了再打开试试能否运行运行成功!...

2021-05-19 17:11:54 188

原创 Python比对指定目录下的Excel数据(附源码)

需求分析近期需要一个脚本将录入员录入的两个Excel文件进行比对,检查二者录入的内容是否相同,将有错的内容以log日志的方式输出到.txt文件中,输出的内容是“文件1的路径”+“文件2的路径”+“哪个sheet表”+“第几列出问题”。这样方便人员进行确认并重新找出进行检查。根据这样的需求,首先确定了所使用的工具和程序编写架构:读取Excel表的数据:使用Python中的Panda库,其中的函数可以很方便的读取出所需要的数据。程序框架1.首先实现指定两个文件名的Excel表的指定列的数据读出并比对,

2021-05-19 17:06:40 576 3

原创 不调包绘制音频语谱图并批量生成语谱图

什么是语谱图语谱图(Spectrogam)是表示语音频谱随时间变化的图形,其实是一个二维的图像,但却能表示三个维度的信息,横坐标表示时间,纵坐标表示频率,颜色的深浅来映射能量的大小。任一给定频率成分在给定时刻的强弱用相应点的灰度或色调的浓淡来表示。颜色深,表示该点的语音能量越强,反之表示该点语音能量较弱。绘制语谱图首先需要对载入的音频进行分帧和加窗处理,然后进行傅里叶变化,然后求出每一帧所对应的时间刻度,然后再将傅里叶变换后的数据取对数求出能量密度谱,将能量与颜色做一个映射,然后画出图像分帧语音信

2021-05-06 13:24:31 1887 3

原创 关于函数在C语言和Python语言中的表示

在学习如何在Python中编写包和在用C语言编写包并用Python调用的任务时,我发现自己对于函数的一些概念和参数之间的转换和调用不是十分清晰,因此本文主要记录的是我对于函数的知识在Python和C语言中的表现形式的学习。1.1 Python中的函数函数是带着名字的代码块,用于完成具体的工作。执行函数定义的任务时,只需重复调用该函数,就可以完成指定工作。1.1.1定义一个简单函数Python中用关键字“def”来表示函数的定义。def test(): print("hello world!")

2021-02-03 16:31:34 493

原创 Python中Pyaudio安装失败的解决办法

问题描述在进行语音处理时,发现pyaudio包无法安装,具体情况如下:解决办法去官网下载pyaudio对应的whl,如下所示:下载完后在对应的文件夹打开cmd再输入pip install PyAudio-0.2.11-cp37-cp37m-win_amd64.whl就可以安装成功,包的名字根据自己下载的包名改变即可...

2020-12-24 16:07:52 7904 13

原创 Simulink中DPCM量化和编码仿真

DPCM编码与解码的介绍DPCM是差分脉冲编码调制的简称,是一种利用信号样值之间的关联特性进行高效率波形编码的方法。当信号样值序列中邻近样值之间存在明显的关联时,那么样值的差值方差就会比样值本身的方差要小。PCM中直接传输样值本身,而在DPCM中,传输数据为样值的差值,在量化误差不变的条件下,就可以用较少的比特数来表示码字,也就提高了波形编码效率。DPCM编码与解码的仿真在Simulink中的仿真模型如图该系统的信号发生器产生一个幅度为1,频率为1的正弦波,获得输出图像Scope1,其表达式为x=si

2020-12-22 11:05:34 6096 8

原创 Python中Numpy包的学习

Numpy实现基本的矩阵运算a*b实现矩阵叉乘,使用代码和运行结果如图#矩阵相乘import numpy as npa1=np.mat([[1,2,3],[4,5,6],[7,8,9]]); #3*3a2=np.mat([[11,12,13],[14,15,16],[17,18,19]]);#3*3print(a1*a2)dot()实现矩阵点乘,使用代码和运行结果如图#矩阵点乘import numpy as npa1=np.mat([[1,2,3],[4,5,6],[7,8,

2020-11-17 17:34:57 246 1

原创 C语言实现离散余弦变换(DCT)并用MATLAB和Python验证

概念离散余弦变换(Discrete Cosine Transform,DCT)是可分离的变换,其变换核为余弦函数。是与傅里叶变换相关的一种变换,它相当于把离散傅里叶变换的虚数部分丢掉,只使用实数。DCT除了具有一般的正交变换性质外, 它的变换阵的基向量能很好地描述人类语音信号和图像信号的相关特征。因此,在对语音信号、图像信号的变换中,DCT变换被认为是一种准最佳变换。设x(n)是N个有限值的一维实数信号序列,n=0,1,⋯ ,N−1n=0,1,\cdots,N-1n=0,1,⋯,N−1的完备正交归一函数

2020-11-17 17:12:03 857

原创 Linux中将pip 源切换至国内镜像~亲测可用

在Linux中使用pip下载python第三方包时太慢了,记录一个使用 pip 安装软件时,使用国内镜像可以大大提高下载速度的方法。常用的国内镜像https://pypi.tuna.tsinghua.edu.cn/simple/ 清华大学https://mirrors.aliyun.com/pypi/simple/ 阿里云临时使用pip install 添加 -i 参数指定源例如:pip install -i https://pypi.tuna.tsinghua.ed.

2020-11-07 22:03:46 1082

原创 在Linux系统中构建虚拟网络

什么是NAT如何设置NAT在虚拟机设置中,输入ifconfig查看网络配置,会出现没有此命令的提示,需要yum安装net-tools工具包。VMware15中点击虚拟机设置,把网络连接选择为NAT模式。在Windows中打开cmd输入ipconfig,查看网络配置。想要在虚拟机中与Windows系统进行通信,就需要他们两在同一个网段中,而虚拟机又是通过VMnet8这个虚拟网卡来和Windows进行通信的,因此需要把linux的网络配置成和VMnet8处在一个网段。在VMware的虚

2020-11-03 20:29:54 397

原创 在Linux系统下安装gnuplot遇到的问题

安装首先在linux系统中输入yum install gnuplot,无法安装成功,跳出如下指令。在网上查找过许多方法均未果,最后尝试过一种成功,现将此方法放在此贴供读者参考。出现原因问题产生的原因是没有先安装wget 源,首先把源备份mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup在该网址下载对应的repo文件,放入/etc/yum.repos.d/里。为了方便下载,我这里用

2020-11-03 20:13:40 2583

原创 C语言进行离散傅里叶DFT变换~MATLAB验证

设计需求根据离散傅里叶变换的原始公式和自己编写复数计算函数进行离散傅里叶变换对10000个点的加有噪声或干净的正弦波的数据进行离散傅里叶变换,生成10000个点的复数数据序列到文本文件中。数据格式为实部+虚部,用空格或逗号隔开。实现思路离散傅里叶变换的公式如下:X(k)=∑n=0N−1x(n)exp⁡(−j2πNnk)=∑n=0N−1x(n)WNnk\begin{aligned}X(k)&=\sum_{n=0}^{N-1}x(n)\exp(-j\frac{2\pi}{N}nk)\

2020-10-28 20:32:56 733 2

原创 CMD中文乱码出现的原因及解决办法

出现情况在用notepad++编写helloword程序时,由于将感叹号输成中文的“!”而不是英文的"!",导致运行时出现乱码,结果如下所示。为什么会出现这个情况,发现在notepad++中选择的字符编码是utf-8。将其改为ansi试试,乱码的问题就会解决。什么是字符编码那什么是字符编码呢?我所理解的字符编码就是“!”这个字符后面藏着它的utf8或者ansi编码,查阅资料后才知道,当我们在一个文件中看到的字符串是系统把内存中的编码信息读取显示出来,当保存文件时系统就会把这个文件以我们所设置的

2020-10-28 20:22:05 14401 4

原创 C语言进行数据指定步长的区间统计

设计需求:1.对数据给出区间宽度进行统计2.生成生成指定区间宽度的直方图绘制数据设计思路对直方图的理解:直方图是数值数据分布的精确图形表示,建直方图第一步是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。 这些值通常被指定为连续的,不重叠的变量间隔。 间隔必须相邻,并且通常是(但不是必须的)相等的大小。也可以理解为各区间的相对频率。从数据中求出最大值和最小值,对最大值向上取整,对最小值向下取整,即可得出区间范围。从命令行参数中获得区间值,用区间范围除以区间值可以得到需

2020-10-20 21:05:05 1649 2

原创 使用gnuplot绘制直方图

1、什么是直方图对直方图的理解:直方图是数值数据分布的精确图形表示,建直方图第一步是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。 这些值通常被指定为连续的,不重叠的变量间隔。 间隔必须相邻,并且通常是(但不是必须的)相等的大小。也可以理解为各区间的相对频率。2、数据画图所使用的数据如下:-9 1-8 2-7 15-6 36-5 94-4 220-3 405-2 679-1 10100 12051 12552 11823 8074 5665

2020-10-20 20:57:12 1750

原创 C语言实现文件读取矩阵乘法

用C语言计算矩阵乘积一、设计需求:用命令行参数的形式编写C语言程序从A.txt和B.txt中读取连个矩阵需要判断两个矩阵能否相乘把计算后的结果写入到C.txt中二、实现思路1.用命令行参数把文件名传给文件指针fp1、fp2、fp32.检测一行文本中空格的个数和换行符的个数,确定行和列并创建二维数组。3.利用fscanf函数和两层for循环把数据传给二维数组4.利用for循环对两个二维数组进行计算,把结果传给新的二维数组。5.将新的二维数组一个个写入到C.txt中三、矩阵乘法的

2020-10-14 13:13:52 3085 1

原创 高效使用latex编辑数学公式

用latex编辑数学公式1. 为什么要用Letax编辑数学公式在写论文输入数学公式时,我们有很多种方式可以选择,例如:Axmath、MathType、微软的公式编辑器等,这些工具可以直观的编辑数学公式,但是当公式较多较复杂时难免会出现差错,因此我们还可以选择Letax来编辑数学公式。Letax编辑数学公式思路与其他几种完全不同,他入门难度较大,但是一旦学习掌握之后,会非常的方便,可以在Letax中严格控制论文格式。排版出来的公式也非常美观和漂亮。段落中的数学表达式应该置于\(和\),$和$,\beg

2020-09-30 12:29:04 6781

原创 用c语言读取和写入文件数据

任务需求用notepad++编辑一个test.c文件要求从int.txt中读取数据经过开平方和平方计算输出到另一个out.txt文件中程序编写#include <stdio.h> #include <stdlib.h> #include <math.h> #define N 100 //读取文件函数 int read_data(){ //定义文件指针 FILE *fp; char str[N+1];

2020-09-29 10:00:24 1728

原创 Taxlive2020安装~新手向

下载1.官网下载:http://www.tug.org/texlive/2.开源镜像下载:https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/推荐使用开源镜像下载,速度比较快安装1 将下载的ISO镜像文件解压2 解压后双击打开install-tl-advanced.bat文件点击advanced4 修改安装目录 然后安装5 等待安装6 安装完成7 调用cmd输入tex -version,若出现

2020-09-20 15:04:31 643

原创 Linux学习笔记(四)|软件安装指令

简述Linux系统可以分为Debian和Redhat两大分支,Debian平台主流的操作系统是Ubuntu,而RedHat平台主流的操作系统是Fedora。基于Debian平台的操作系统,使用dpkg和apt指令来管理软件。而基于RedHat平台的操作系统则使用rpm和yum指令来管理软件。先贴上思维导图:在CentOS中,安装软件主要有两种方式:rpm与yum。rpmrpm (redhat package manager)是 Red Hat Linux 发行版专门用来管理 Linux 各项套

2020-09-16 15:19:14 103

原创 matplotlib包的学习(二)

绘制正弦波#绘制正弦波import numpy as npx = np.arange(0, 2 * np.pi, 0.1)y = np.sin(x)plt.title("正弦波")plt.plot(x, y)plt.show()arange()是在(0,2π)周期内选取步长值为0.1作为正弦函数的x坐标,y的值则是由numpy中的sin函数。绘制多个图像在绘制正弦波的基础上,我们再绘制一条余弦波。通过subplot()函数来使两幅图像放在一张图上。subplot(x,y,z)中的

2020-09-14 19:14:03 114

原创 matplotlib包的学习(一)

一.matplotlib是什么matplotlib是一个在Python中将数据可视化的第三方包,和matlab中的plot指令,和gnuplot类似,都是将数据进行可视化的工具。matplotlib是一个数学绘图库,可以用它来制作折线图和散点图等的图表。二.基础指令折线图1. 绘制折线图首先导入matplotlib中的pyplot,pyplot中包含了很多画图的函数,和matlab中画图类似,需要以下几个要素:绘图区域横纵坐标数据因此根据这三个要素我们来绘制一幅折线图import m

2020-09-13 20:40:26 471

原创 基于pygame的射击小游戏制作(五)绘制开始按钮

在本篇文章中,主要学习如何在pygame中绘制按钮,并点击按钮开始游一、编程思路1.1 修改游戏活动状态在上篇文章中,我们通过game_active标志来控制游戏的进行与停止。我们需要在点击“play”按钮后游戏才开始运行。因此将game_active = False。游戏在开始时处于非活动状态,等待点击play后运行。def __init__(self, ai_settings): """初始化统计信息""" self.ai_settings = ai_settings self.reset

2020-09-03 20:40:38 5005

原创 基于pygame的射击小游戏制作(四)击杀外星人

在本篇文章中,主要学习射击子弹时外星人消失,达到击杀外星人的效果一、编程思路1.1击杀我们需要在碰撞发生后让外星人立即消失,故在更新子弹的位置后检测碰撞。我们创建一个字典,这个字典的每一个键都是一颗子弹,而相应的键值则包含击中的外星人。sprite.groupcollide()将每颗子弹的rect与每个rect比较。每当有子弹和外星人的rect重叠时,判断其被子弹击中,groupcollide()就在返回字典中添加一个键-值对。game_functions.pydef update_bullets

2020-09-03 11:41:27 1302

原创 基于pygame的射击小游戏制作(三)让外星人动起来

在本篇文章中,将学习如何创建一群外星人,如何使用嵌套循环来创建元素网格,如何移动外星人1、编程思路1.1 创建外星人创建Alien.py 文件,该文件配置与Ship.py类似,每个外星人最初都出现在屏幕左上角。修改update_screen()里的形参,传递一个外星人实例,并在该函数中调用方法blitme,就可以让外星人出现在屏幕上。代码较多不一一赘述,具体源码附加在文章最后。2.2 创建一群外星人首先在alien——invasion.py中创建一个空编组aliens,用与存储全部外星人,在调用g

2020-09-02 18:02:42 551

原创 基于pygame的射击小游戏制作(二)射击子弹

在本篇文章中,将学习如何创建子弹移动的元素,如何在屏幕中让子弹向上飞驰,如何删除超过屏幕边界的子弹。1.编程思路1.1 创建一个子弹功能描述:玩家将按空格键时发射子弹,子弹在屏幕中向上穿行,抵达屏幕边缘后消失。在settings.py文件中,的init方法中加入子弹(Bullet)的值:速度,宽度、高度、颜色、允许发射的最大子弹数量#子弹设置 self.bullet_speed_factor = 1 self.bullet_width = 3 sel

2020-09-01 11:56:30 1661

原创 基于pygame的射击小游戏制作(一)让飞船动起来

基于pygame的射击小游戏制作(一)让飞船动起来一.文件结构alien_invasion.py 是整个系统的主文件,用来创建游戏中的一系列对象,ai_settings存储设置、screen存储显示相关和屏幕刷新、包含游戏的主循环,通过检查事件响应来实现飞船左移右移。仅需运行此文件就可以将其他的相关.py文件间接地导入到这个文件中。settings.py 该文件包含Settings类,此类的方法__init__()用来初始化游戏外观和飞船速度的属性。game_functions.py 该文件包含一

2020-08-31 22:54:31 747

原创 数字信号处理学习笔记(五)|有限脉冲响应数字滤波器的设计

有限脉冲响应数字滤波器的设计一、FIR滤波器的特点1.严格的线性相位特性2.h(n)有限长,系统永远稳定3.h(n)经延时,将系统变成因果系统4.h(n)有限长,可利用FFT计算二、用窗函数设计FIR滤波器的步骤1.一般给定频率响应函数Hd(ejw)2.求待求滤波器的单位取样响应hd(n)3.根据过渡带宽度和阻带最小衰减,借助窗函数基本参数表确定窗函数的形式及N的大小4.设计滤波器的单位取样响应h(n)5.验算技术指标是否满足要求6.若不满足要求,根据情况重复2.3.4步,直

2020-08-29 18:27:38 1247

原创 数字信号处理学习笔记(四)|实现巴特沃斯型模拟低通滤波器

无限脉冲响应数字滤波器设计一、数字滤波器概念1、概念输入、输出均为数字信号,通过一定运算关系改变输入信号所含频率成分的相对比例或者滤除某些频率成分的器件。2、从网络结构分类无限脉冲响应(IIR)有限脉冲响应(FIR)存在反馈,h(n)无限长不存在反馈,h(n)有限长2、从功能分类低通高通全通带通带阻二、数字滤波器的设计方法1、按要求确定滤波器的性能指标2、用IIR或FIR系统函数去逼近这一性能要求3、选择适当的运算结构去实现这个系统函数4、

2020-08-29 17:28:36 4782

原创 如何安装gnuplot

一、下载和安装在官网中下载gnuplot下载地址下载后安装完成后打开界面:二、配置环境变量控制面板-系统和安全-系统-高级系统设置-环境变量-系统变量-Path-编辑-新建-输入你的安装地址:C:\Program Files\gnuplot\bin因人而异三、测试打开cmd,输入gnuplot,若出现gnuplot版本信息,表明安装成功...

2020-08-29 16:10:20 2208

原创 数字信号处理学习笔记(三)|时域离散系统的网络结构

时域离散系统的网络结构一、何为网络结构网络结构如同差分方程、单位脉冲响应以及系统函数一样,描述了一个系统实现方法的表达形式。例如给定一个差分方程:y(n)=0.8y(n-1)-0.15y(n-2)+x(n),我们可以把系统函数分解为三种形式:直接型,并联型、级联型。网络结构表示一定的运算结构,而不同的结构的运算复杂程度、运算速度、运算误差是不同的,对于实现信号处理的网络结构是很重要的。二、用信号流图表示网络结构1、乘法器、加法器、单位延迟器支路的值=支路起点处的节点值*传输系数节点的值=

2020-08-29 15:42:35 10371 1

原创 数字信号处理学习笔记(二)|快速傅里叶变换

快速傅里叶变换(FFT)一、FFT出现的原因对x(n)进行N点DFT计算,一共有N2 次乘法,N2次加法如果N=1024,则有2*1048576次计算,计算量过于庞大。在1965年,图基和库里提出了FFT,不断把长序列分解成短序列,再进行DFT,并利用周期性和对称性来减少DFT的运算次数。二、DIT-FFT(1)8点DFT一次时域抽取分解运算(2)8点DFT二次时域抽取分解运算(3)DIT-FFT与DFT运算量的比较设N=2M ,有M级蝶形。每一级都由N/2个蝶形运算构成。每一级运算

2020-08-27 16:20:04 2615

原创 数字信号处理学习笔记(一)|离散傅里叶变换

离散傅里叶变换(DFT)离散傅里叶变换(Discrete Fourier Transform)的实质是有限长序列傅里叶变换的有限点离散采样,实现了频域离散化,使数字信号处理可以在频域采用数值运算的方法进行,增大了数字信号处理的灵活性。一、DTF的定义设x(n)是一个长度为M的有限长序列,则定义x(n)的N点离散傅里叶变化为:二、DFT物理意义序列x(n)的N点DFT是x(n)的Z变换在单位元上的N点等间隔采样...

2020-08-27 14:41:54 8298

原创 在Linux上编写并运行Python文件

一、编写.py文件1、检测python环境python建立python文件vim test.py输入python代码print(“Hello world!\n”)PS:我这里将python2软连接到了python3二、编译运行.py文件输入python test.py

2020-08-18 20:19:15 11134 1

原创 在Linux上编写并运行Java文件

一、编写.java文件1、首先检查Linux中是否含有Java的编译环境java -version显示当前系统中包含java环境2、建立Java文件vim test.java3、输入代码ublic class test{ public static void main(String[] args) { System.out.println("Hello World"); }}输入完成后按ESC,输入:wq保存二、编译.java文件javac test.java三、

2020-08-18 20:09:24 2545

原创 在Linux下编写并运行C文件

一、新建.C文件vim编辑界面,由“ESC”建来切换三种模式,一般模式:在Linux终端中输入“vim 文件名”就进入了一般模式,但不能输入文字。编辑模式:在一般模式下按i就会进入编辑模式,此时就可以写程序,按Esc可回到一般模式。命令模式:在一般模式下按:就会进入命令模式,左下角会有一个冒号出现,此时可以敲入命令并执行。键盘“a”键可以直接进入编辑模式。输入vim test.c编辑好C文件编辑完后按“ESC”退出编辑模式,输入:wq保存并退出二、编译输入gcc -o test test

2020-08-18 19:57:49 6542 4

原创 Linux学习笔记(三)|Vim编辑器

Vim文本编辑器1.1Vim常用操作(1)Vim是一个功能强大的全屏幕文本编辑器,类似于Windows中的cmd,没有菜单,只有命令,是Linux上最常用的文本编辑器,它的作用是建立文件、编辑文件、显示文件。vim的工作模式如下:vim的常用命令分为如下几类:插入、定位、删除、复制和剪切、替换和取消、搜索和搜索替换、保存和退出。(1)插入命令命令作用a在光标所在字符后插入A在光标所在行尾插入i在光标所在字符前插入I在光标所在行行首插入o在光标

2020-08-18 18:43:35 111

谢希仁《计算机网络》复习提纲.doc

谢希仁计算机网络重点知识归纳,包含整本书的知识浓缩,有效帮助正在学习计算机网络的同学能够快速抓到重点,对知识概念能够有一个完整的学习

2020-04-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除