MATLA 5G工具箱---深度学习应用通信

基于MATLAB R2022b版软件学习!

Deep Learning for Wireless Communications

视频链接:https://www.mathworks.com/videos/deep-learning-for-wireless-communications-1625082196426.html

女士们,先生们,早上好。我是胡曼·扎林库布。我是MathWorks所有无线产品的产品经理,包括5G、LTE、WLAN和卫星通信,我很高兴今天能和大家一起参加MathWorks名为“无线通信的深度学习”的网络研讨会。

我们先来回顾一下今天的演讲议程。在对无线领域的AI及其作用进行了一些介绍性评论之后,我将基本上带您了解涉及AI技术在无线领域应用的设计工作流程。这个工作流程本质上有四个组成部分——数据准备、AI建模、模拟和测试以及部署。我将用例子和一个特定的应用来把这一切放在上下文中,我将通过提供你们更多的学习领域来进行总结。

现在,是时候把AI技术应用到无线问题上了吗?今天的无线系统和技术变得越来越复杂,你可以想象。当表征系统的参数数量大幅增加时,那么编写将所有参数都考虑在内的典型传统算法就成为一项艰巨的任务。因此,本质上从操作中学习并基于学习应用这些算法的AI技术最近正在出现。

如你所知AI,或者人工智能已经成功地应用到信号处理的其他领域——图像识别等等,音频和语音处理,自动语言处理。所以有人会说,现在是AI为解决无线问题做出贡献的时候了。这包括网络简化或网络建模和仿真,基于真实数据监测性能的改进性能,频谱效率等等。

那么,我们的客户告诉我们,在他们的解决方案中使用AI技术的典型应用有哪些?我们已经联系了一些正在研究信号分类的客户——典型的AI应用,你根据你得到的信号对不同的信号进行分类,在这种情况下是调制技术。识别友好和不友好的设备——信号来自哪里。甚至是用于提高性能的数字预失真技术。

有一些AI技术可以适当地捕捉非线性,设计更好的接收机算法来适应信道变化的性质,等等。甚至是信道建模和信道估计和预测,以及自动编码和解码。波束形成,这在5G及以后的应用中杠杆非常高。以及无线网络优化——将正确的资源分配给多个用户。这些都是我们听说的AI技术已经应用到的典型应用。

让我们来看看一些定义。就本次演讲的目的而言,什么是人工智能?任何能让机器学习和模仿人类智能的技术,都是AI。历史上,我们从机器学习技术开始,这是一种统计方法,本质上是从物理测量中提取一些特征,并尝试应用模式识别技术来分类或回归和提取信息。然后深度学习是较新的,它本质上是具有许多层的神经网络,它结合了特征提取和学习模式的任务,它们直接从数据映射表示。这些本质上是随着时间的推移而发展的。

所以让我们来看看机器学习和深度学习的分类,这样我们就可以弄清楚这一点。所以机器学习,你可以有一些无监督学习或有监督学习。在无监督学习中,你本质上不会给你的数据贴上标签,也就是说你不会去用人类的智能去监督从人类的智能来,说这一类信号是这个,这一类信号是那个,然后让AI模型去学习不同的特征。

在无监督学习中,你只是指定一个标准,一个代价函数,一个指标来优化,然后让聚类和机器经过各种迭代,从本质上来说,不需要人类的监督,就可以提取出模式。但是,就像在监督学习中一样,你给数据贴上标签。人类的智能说,这些是a类信号,这些是B类信号——基于特征。在此基础上,你要么分类要么找到回归,找到与噪声数据匹配的规则。

现在,深度学习是监督学习和机器学习的一个类或子类,区别在于你是否显式地进行特征提取。如果你显式地做特征提取——意思是你有原始数据,你做一些预处理来提取特征——如果你这样做,你在特征上应用标签,这就叫做机器学习,监督学习。但如果你不做特征提取,你是让多层深度学习网络同时做特征提取和训练,这本质上就是深度学习。

而MathWorks的工具——我们的工具,我们的工具箱和MATLAB以及我们的附加产品本质上可以让你更好地用AI做无线。我们有很多功能和产品,可以帮助你把AI、机器学习、深度学习和强化学习的任务做得更容易、更好。那么ai驱动的系统设计是什么样的呢?从更高的角度来看,你有一些数据,你想要分类,回归,或者你想从中开发一些基于ai的规则。所以首先你需要大量的训练数据。你需要清理和准备这些数据,所以你要做一些预处理。

同样,如果你做监督学习,你需要人类的洞察力或人类的智能来帮助你标记,你需要为每个类制作尽可能多的数据,这样你就可以找到所有可能的方法,把噪音和扭曲建模到你的分类过程中。你需要模拟生成的数据。然后,在数据准备好、标记好等等之后,你要进行AI建模。你对层和学习机制建模,然后调整学习和模型,以获得更好的性能。然后,因为这些事情需要时间,你想要通过使用技术来加速他们的训练,让训练不——做同样的表现得更快。而且你会担心你的环境和你想要实现的环境之间的互操作性。

现在,在你训练了你的AI模型之后,在AI模型中有为分类、回归和所有其他应用生成的规则——你想实际看看它是否能正常工作。你想要模拟和测试你刚刚训练的那个系统是否正常工作。所以你想在一个复杂的系统中进行集成——在一个复杂的系统中,插入你的基于人工智能的分类器等等。

你想要模拟整个系统,并查看整个系统的指标,验证系统是否正常运行,并进行验证和验证。最后,当你完成了所有这三个模拟级别后,你想把它部署到硬盘上——在嵌入式设备或企业系统上,比如Azure或AWS或其他云中的系统,以及Edge和桌面,你想要部署它。所以这就是一个快照里的整个过程。

下面我们逐个看一看。所以说,深度学习模型只和训练数据一样好。所以这是工程行话中的一个经典成语。如果你有无意义的输入,你也会有无意义的输出。本质上,你必须准备大量的数据——有代表性的数据,但数量巨大,涵盖了你分配给每个类的空间,这样你的系统才会变得健壮。

所以你需要应用人类智能标签,说我这里所有这些类别的数据都属于5G,所有这类数据都属于Wi-Fi,所有这类数据都属于这个设备,那个设备。所以你必须有很多数据,有很多可能的失真噪声干扰等等,你必须说,这一桶数据是这样被标记的。如果你有有限的数据可用性,真实世界的信号,你必须生成合成信号来增强你的东西。

现在,你还需要有特定领域的数据处理。你不能只是在各个领域应用同一个分类器。你必须做一些预处理和后处理来实现这一点。而且对所有可能的类都没有做足够的参考研究。所以你要受你开发的训练集的支配。

正如我提到的,为了创建大量的数据,从而增强你的AI模型,你必须增强你现有的数据,并泛化合成额外的数据。这里我要展示的一个例子是,我在这里创建了很多不同的5G信号。这是一个5G系统的资源网格,有CSI-RS参考信号,或先导信号。所以你需要创建这个,你还需要创建其他参考信号和其他通道。所以你创造了很多这些可能的信号,这些信号可以在5G上随着时间和频率被看到,以便在5G设备上创建一个分类。

我们有工具,你可以在这里看到。我们的例子,生成对抗网络,GAN,用于声音合成,这是其中一个例子,我们展示了如何生成大量现有的合成信号,在这个例子中,音频。但是你可以使用相控阵和通信工具箱来为你的无线列车生成大量的IQ样本。

这是一种方法。截至2018b和现在,我们一直在发展这个名为无线波形发生器应用程序的工具或应用程序。只需点击一个按钮,我们就可以创建5G, LTE,无线局域网,以及各种自定义信号,OFDM, QAM等等。你所要做的就是打开MATLAB,进入app,找到无线波形发生器应用程序,从中选择一个。例如,在这种情况下,我选择了5G下行FRC。

分配一些参数,然后点击Generate。你会看到时域、频域、时频资源网格,信道创建完成。而且它可以把这些都作为变量导出到工作区。所以你产生了这些信号,你产生了一堆信号,你创造了很多东西。你可以应用它,比如,用e图深度学习来进行信道估计,我最后要给你们看——先看这个例子。

除了无线波形发生器应用程序,MATLAB还提供了什么,让你更容易为AI建模创建合成数据?我们可以连接到许多软件定义的无线电、伙计们和RF仪器,这意味着您可以直接从MATLAB获取实时信号到MATLAB环境中,并将其添加到您的训练数据中,以便将AI技术应用到无线。正如你所看到的,这只能基于无线波形发生器应用程序生成波形。

 

通过一个函数调用,你可以将生成的波形发送到RF信号发生器,比如Agilent或Rhode & Schwarz,或各种各样的东西,并通过空气辐射。或者你可以把它设置成一个低成本的软件定义无线电,USRP或者RTL-SDR,也就是接收器,Pluto SDR, Zynq SDR。我们对软件定义无线电有很多支持,使您能够通过空中传输它们。

这就是传输方面的问题。在接收端,你不能只依赖刚刚传输的东西,你还可以调到任何频率——FM电台、ADBS、各种塔和Wi-Fi信号实际上都可以——如果你调到正确的频率,你就可以用我们的射频信号分析仪和软件定义的无线电,比如所有的RTL-SDR、Pluto SDR等等,在空中得到信号。然后你把这些都带入MATLAB。所以我们与硬件的连接使得为你的人工智能生成实时信号的任务成为可能。你所要做的就是去MATLAB,在MATLAB环境中有一个Add-On按钮,并要求获得硬件支持。

你可以通过调用MATLAB支持包安装程序来得到同样的东西。一个可用的硬件目录库会显示出来,你可以通过硬件设置并安装一个免费的附加组件来连接,例如,Pluto SDR或连接到USRP等等。在你完成这些之后,例如,对于Pluto SDR,在你安装了我们拥有的连接插件之后,有一个叫做MATLAB SDRTx的函数用于传输,SDRRx用于接收。然后你指定你刚安装的无线电类型,冥王星或USRP等等。你设置参数,调整频率以设置感兴趣的频率,然后继续获取数据,就这么简单。

同理,射频仪器也是如此。您可以使用我们的仪器控制工具箱连接射频仪器。你安装工具箱,这是我们在MATLAB中有的一个工具箱,只要你把安装了MATLAB的计算机连接到一个网络上,使用各种网络连接,射频信号发生器在那个网络上有IP,然后你就可以生成你看到的基带信号,你把它下载到信号发生器,然后通过空中传输。使用相同的仪器控制工具箱,你可以将MATLAB和计算机连接到频谱分析仪上,例如,是的,你可以——仪器控制工具箱有函数和应用程序,可以让你检索IQ基带样本到MATLAB中,这是你想在AI建模中使用的类,并增强你的训练数据。而且它可以执行可视化分析和建模,训练你的AI系统,就这么简单。

所以在你得到这些合成数据之后,这些数据很容易在MATLAB中使用无线波形发生器应用程序生成,或者这些实时数据,使用sdr或RF仪器到MATLAB中,你必须执行预处理,使你得到的信号准备好作为输入输入到你的AI模型的输入层。所以这里很重要的是一种技术,我们要讲的是,如果你用谱图或其他技术在时间频率中表示信号,其中时间在x轴上,频率在y轴上,每个时间和频率坐标中的信号强度是由颜色和热图捕获的,这就适合于图像,伙计们。所以这个时间频率表示的图像可以很容易地被馈送到现有的深度学习网络中,这些网络经过训练,可以在图像上进行分类。

所以这是一个非常重要的方式,我们可以带来你的IQ样本。通过在它们上提供时间频率转换,它们就可以随时作为现有深度学习网络的输入。你也可以做特征工程,找到特征,并把这些特征输入网络,或者你也可以直接分别通过I和Q来做IQ样本,等等。所以这些就是数据到AI输入层的映射,你要做的是预处理的最后一步。

 

所以现在你到了AI建模的部分。你必须对你的AI网络建模,并经历AI建模。所以我们做了我们的MathWorks工具是为AI设计的,基本上有四个——深度学习工具箱、机器学习工具箱——机器学习和统计工具箱,我们有预测维护和强化学习。我们有很多机器学习的算法,贝叶斯技术和理论等等。而对于深度学习,卷积神经网络,cnn,我讲过的GANs等等,强化学习,不同种类的算法。

所以你可以建立你的整个深度学习,机器学习,甚至强化学习网络,把我告诉你的使用我们的工具箱的数据作为输入。如果你想使用MathWorks工具之外可用的预构建模型——AlexNet GoogLeNet, ResNet,各种各样的东西都是在MATLAB环境之外开发的,我们很容易连接到它,实际上我们可以把它带入我们的环境——你可以使用它。而且我们已经做了很多参考例子,其中这些——我们展示了车辆、行人等物体检测的整个过程,语义分割,以及信号和语音处理。我们有这些例子,所以你可以不从零开始,从很多对你有用的好例子开始。所以MATLAB变成了一个环境,所有这些技术都可用,你可以选择你想要使用的模式和模态。

例如,除了生成合成和实时数据之外,在MATLAB中使用深度学习和机器学习的优点之一是MATLAB提供了——使用我们为深度学习网络设计的应用程序提高了工作效率,并允许你探索广泛的分类器、训练回归模型等。举个例子,你看这里我有一个监视器——我稍后会稍微介绍一下。我们有一个深度学习工具箱附带的深度网络设计,这个应用程序不仅可以让你在本质上一个一个地构建你的深度学习网络的所有层,把它们连接起来,并在任何层宽度和深度的数量上创建任何深度学习网络模型,还可以让你导入那些预定义的网络,预构建的网络,并连接到它们。

还有实验管理器(Experiment Manager)——在你建立好你的深度学习网络之后,你可以使用实验管理器(Experiment Manager)来建立一个实验,它会经历各种不同的试验,并查看超参数和深度学习网络的所有参数以及训练它们的参数,并为你找到所需的最佳匹配或超参数的最佳配置文件,并比较结果,然后给你部署的代码。比如这里,我们讨论的是你用深度训练网络所做的所有事情,你生成数据,你定义CNN结构。所以你看,在MATLAB中我们得到的是训练数据和训练标签。这就是监督学习。

然后我们进入我们的应用程序,打开机器学习等等,我们打开深度网络设计器。如果你这样做,它就会显示出来,你可以看到,在深度学习——deep Network Designer app中,你可以创建一个空白的网络,你可以使用任何特定的从库中——你可以使用各种不同的卷积,约简,图像点,各种层,并且很容易地增加你需要的层数来开发你的网络。你可以很容易地把它们连接起来,而且每一个都有很多参数。你对它们进行参数化,设置参数,或者让参数服从实验管理器的进一步优化,等等等等。

然后你去生成你的深度学习网络。你可以分析它,分析会向你展示各种各样的报告,关于激活的各个方面,类型,不同变量的状态和大小,当它们通过这个网络时,它也可以将其导出为生成的代码或导出到一个孪生环境。然后你可以进一步优化你的系统。

所以硬件加速和扩展也是需要的。当你完成那个训练,提供大量的数据,完成所有的训练然后训练模型的时候,你会注意到需要很长时间才能完成所有的试验等等。所以MATLAB有另一套其他环境可能没有的工具来加速AI训练,这在cpu和云和数据中心资源之类的东西上是出了名的长。

对于GPU,我们有GPU Coder产品和其他技术,可以让你创建一个支持GPU的MATLAB函数,甚至你的网络,并生成支持cuda的GPU代码,运行在Nvidia上,例如GPU上,并使其更快。我们有技术可以在Azure或AWS上生成更快的模拟运行。

而且你不需要为此做专门的编程。我们负责所有加速你的东西的代码生成。你所要做的就是获得相应的工具箱,学习如何使用它们,并得到加速的结果。好消息是,从数值上来说,它们几乎是一样的,加上减去等级的准确性,但运行速度要快得多。

那模拟测试呢?所以你看,你把预标记的合成数据或实时数据放进去,你把它们转换成时间频率表示,让它看起来像一张图像,你用我们的深度学习训练网络分析器训练你的网络,你就有了一个训练过的模型。这是经过训练的,它会理解,它会提取特征,它会把它们映射到正确的分类器。

现在该怎么做呢?你需要有不偏向训练数据的新信号——重复的信号,但不是来自同一个数据集。这就是诀窍。如果你用训练中使用的数据进行测试,那你就是在欺骗自己。你必须使用训练过程中没有看到的新信号,真实的信号,你必须将它们类似地转换到相同的域,给预训练的网络,看看预训练的网络将如何对它们进行分类。

而且你实际上也给训练数据打上了标签。所以你知道它是真的还是假的,你创建困惑矩阵,有多少成功,有多少失败,你不断迭代这些结果。为了实际展示所有这些,我将设计一个系统,监测一个频谱的宽频带。我将基本上应用频谱感知和认知无线电,我们将在频谱图上标记5G和LTE信号。

我们将通过工作流程,使用无线波形发生器生成5G和LTE信号,计算频谱图并将其放入时频表示中,将像素标记为频谱图,作为5G LTE或噪声。他们将选择一个深度神经网络来利用现有的网络架构,在这个例子中是DeepLab ResNet,本质上是训练网络进行正确分类,开始优化我告诉过你们的实验管理器上的超参数,我们将进行测试。并且我们将使用过去一年捕捉到的信号,仅仅作为环境和通过迭代增强的训练。

所以这个应用,我告诉过你们,是一个认知无线电和频谱传感器。设计一个系统,监测宽频段的频谱。在这种情况下,我从大约60兆赫的带宽开始。所以在这种情况下,频率在x轴上,而时间在y轴上。我们将把时间和频率的不同部分标记为LTE或5G或噪声。

所以第一件事就是准备训练数据。我们将使用我们的无线波形发生器应用程序生成5G和LTE信号。所以这里我打开无线波形发生器应用程序。我有5G,我有LTE。

所以我要点击其中一个,比如5G。它创建了5G信号生成的各种参数。在这种情况下,域参数,频率范围,FR1, FR2,带宽等等。然后我要设置其他的参数,比如SS突发,同步突发,那个的参数,PDSCH到用户数据。只要你点一下那个,各种各样的参数就会显示出你要用什么样的调制方案,什么样的编码方案。

你可以给不同的带宽部分添加不同的调制方式等等。你可以指定不同的- 5G期望你设置的所有参数。然后你可以通过各种其他的添加,看看资源网格。这是时间频率资源网格。在这种情况下,符号在时域和频域上。

大家可以看看Spectrum Analyzer。你看到的是50兆赫的信号。它可以导出到一个文件,到MATLAB脚本中,它可以运行MATLAB脚本,在MATLAB中生成大量数据,通过添加很多不同的噪声或损伤,你看到可以用r生成,所以你生成波形,实际的MATLAB代码。通过这样做,你可以为你未来的测试设置一个更大的训练集。

现在我们要去计算频谱图。当你计算频谱图的时候,本质上你拿着信号去到一个叫做频谱图函数的信号处理工具箱,从IQ样本的时域数据中创建一个频谱图,你可以选择哪里是你的时间和频率的位置。在这种情况下,我们在y轴上使用时间。你可以看到我们在这里标注了不同种类的信号,有不同种类的频谱图。

然后进行标记。现在标注可以通过目视检查,以人为监督来完成,这需要很多时间,或者你可以提取一些特征,写一个MATLAB程序,说如果你在这个领域到这个领域那就是5G,如果你在这个领域到这个领域那就是LTE。所以我们甚至可以让像素的标注来自动分配。那么这个过程就是,现在我有一张图像,这张图像代表了5G、LTE或噪声的组合,我要给每个像素赋值,用一个MATLAB函数,一个标签——5G、LTE等等。而我以后在神经网络的训练中也会用到这个。

所以现在我们要去设计或使用现有的深度神经网络。在这种情况下,我们可以使用DeepLab版本3+是让——ResNet-50进行语义分割。我们要应用迁移学习——我要给大家讲一下。这意味着什么?所以我们要去深度网络设计器,我们要去看看并导入一个可用的ResNet 3 DeepLab网络。而每一个,如你所见,层有不同的分支等等。我们会在上面设置参数。

好了,现在我们可以使用实验管理器优化超参数了,这是我们深度学习工具箱附带的另一个应用程序。所以在实验管理器中,你要创建一个新的测试序列并测试环境,你要做一些参数,在这种情况下,像素精度或最大帧数。这些都是你设置的超参数。你建立了一个标准,然后你说,运行这个东西,直到满足这个标准。

所以它在训练之后会运行一堆迭代,直到你优化了超参数。所以这一切都为你完成了。你只需要设置感兴趣的参数并指定标准,它就会为你优化。

现在是你测试的时候了。我们用波形发生器应用程序测试我们生成的合成信号,你看一下标准化的混淆矩阵。如果我发送一个5G信号,我接收到一个5G,训练后97%正确。LTE, 87%正确率。噪音,97%正确。所以你看,LTE的精度没有5G或噪音高。所以我们要看这个问题。

然后他们将使用实际的空中测试信号。我们将在我家附近的基站附近的5G或LTE网络上调到一个特定的频率带,并使用我在通信工具箱中告诉过你们的SDR连接来捕获信号并进行测试。当你测试时,你意识到LTE有一个问题,因为尽管LTE看起来有-你可以在这里看到-似乎有10兆赫的带宽,但不知为何只有7兆赫被认为是正确的。所以我猜我们已经用了很多5兆赫的LTE信号进行训练,稍微少用了一点10兆赫。所以现在,基于第一次迭代,我知道我必须增强我的LTE训练集,不要在5兆赫带宽上,也要有10兆赫等等。

测试可以告诉你原始数据有什么问题。所以现在它创建了更多的合成数据,更多——你增强了你的训练数据集,让它有更多的代表性数据。通过这样做,如果我再运行一次这个你看,现在我这样做了,LTE被适当地覆盖了,因为我使用了更多的训练数据代表LTE信号在5和10兆赫,甚至20兆赫。这就是关于它的故事。

所以在所有这些都完成之后,你必须部署到任何具有一流性能的处理器上。而AI模型,我们可以为你做的一件事就是,因为我们拥有所有的代码生成工具和产品,我们可以很容易地从MATLAB环境和Simulink环境部署到嵌入式设备或边缘设备、企业系统、云、桌面。你可以看到我们的编码器工作流程,我们从MATLAB和AI通过代码生成到GPU再到带有SQL生成的cpu,带有CUDA代码和FPGA的GPU。

我们有一个新产品,其实叫深度学习HDL工具箱,它会自动为你生成HDL代码。你可以看到这里使用MATLAB编译器,我们实际上可以将它部署到各种企业系统。所以到嵌入式系统、企业系统的路径是可用的,这在其他环境中是不可用的。

比如我们用深度学习HDL工具箱在FPGA上的一些应用上运行深度学习网络。而你基本上使用了五行MATLAB代码。所以你只要设置工作流,你说编译,然后下载到Xilinx FPGA,然后运行它。当你运行它的时候,它运行得更快。

好吧,我给你们展示了一个认知无线电和频谱感知的例子,但AI在无线领域应用的例子太多了。我们有基于学习自动调整编码和解码参数的自动编码器,用深度学习进行调制分类,用模拟数据设计一个深度学习网络来检测无线路由器,使用什么样的路由器,还有射频指纹,DPD,射频接收器,训练一个神经网络进行LLR估计,这是一种情景估计,等等。所以我们有很多例子给大家看,我介绍的基本思路,基本的工作流程,是如何应用到不同的领域的,大家可以针对自己的领域进行修改。

你在这里有一个用户故事,我们的客户NanoSemi通过使用机器学习算法提高了他们5G设计的效率,加速了RF功率放大器和线性化和DPD的设计。他们报告称,开发时间缩短了一半。这证明了我们为你节省了多少时间,因为我们允许你不去真正实现或重新发明轮子,而是使用那些预先构建的技术——AlexNet, ResNet, GoogLeNet,以及你自己,MATLAB中的东西,并使用大量数据来证明它。

我们也有针对AI的MATLAB培训课程,要么是非常广泛的三天或一天的机器学习和深度学习课程,我们还有一个机器学习和深度学习Onramp,这是一个自定节奏的训练,免费的。所以大家可以去mathworks.com,找Machine Learning Onramp, Deep Learning Onramp,了解深度学习和机器学习是如何按照自己的节奏进行的。如果你感兴趣,我们还可以针对数据科学和AI做定制化培训。

总结一下,我们可以在MATLAB中准备训练数据,训练网络,测试合成信号和空中信号。这就是我们在MATLAB中为你的AI无线应用所拥有的价值。你可以为无线机器学习、深度学习算法准备训练数据,添加信道RF损伤以使数据集更大、更有代表性,用合成信号增强捕获的信号,我们可以预处理训练数据,你可以使用我们的工具训练神经网络,进行设计并优化参数,你可以使用我们的SDR和空中信号进行测试射频仪器,我们可以部署到任何设备,并从其他框架导入和导出网络。所以你不应该——你不应该选择。我们可以选择在MATLAB环境下工作,部署其他领域。

说到这里,我非常感谢大家参加这次网络研讨会。稍作停顿之后,我的朋友们可以开始提问了。非常感谢大家。

 

 

posted @ 2023-03-31 18:40  小明同学的铺铺  阅读(270)  评论(0编辑  收藏  举报