Fourier分析入门——第7章——采样理论

目录

第 7 章  采样定理

7.1 引言

7.2 采样定理

7.3 错误识别(aliasing)

7.4 Parseval定理(Parseval[pázeifa:l])

7.5 截断Fourier级数和回归理论(Truncated Fourier Series & Regression Theory)


第 7 章  采样定理

7.1 引言

在第 6 章中,我们发现有限区间内的离散函数和连续函数的Fourier分析在概念上几乎没有区别。两种类型的函数都有离散谱,唯一的区别是离散函数具有有限数量的谐波分量(图 5.1 中的情况 1),而连续函数原则上具有无限数量的谐波(图 5.1 中的情况 3)。 然而,作业集中出现了一个奇怪的结果 #6 。在一个问题 (6.1) 中,发现连续函数的频谱和该函数的采样版本明显不同,而在另一个问题 (6.2) 中,两个频谱在谐波范围内完全相同 是可以比较的。这表明在某些情况下,函数完全由有限数量的样本决定。在本章中,我们探讨了获得该结果的条件。

7.2 采样定理

通常,定义在有限区间上的连续函数可以表示成第6章所展示的那样的有限项的Fourier级数

f ( x ) = \frac{a_0}{2} + \sum_{k=1}^{\infty}[a_k cos(kx)+b_k sin(kx)] -----------------------------[6.1]

然而,对于某些函数,对于大于某个值 W 的所有频率,Fourier系数可能全部为零。对于这样的频谱,我们可以将 W 视为频谱的带宽(bandwidth)。请注意术语带宽的先前用法与本次用法之间的细微差别。在讨论具有有限频谱的离散函数时,我们使用术语带宽来表示频谱中定义的最高频率。在这种情况下,W = D/2L。该定义意味着所有连续函数都具有无限带宽,因为 D = ∞。如果所有Fourier系数的幅度在某个极限频率 W 之外都为零则另一种定义允许连续函数具有有限带宽。对于实际目的,这是一个更有用的定义,因此通常使用的术语带宽指的就是这种意义上的带宽。

现在考虑具有有限带宽的连续函数的结果。 图 7.1 显示了一个示例,其中只有常数项和前三个谐波的频谱不为零。现在想象一下试图从这个频谱“重建”空间/时间函数。在这方面我们有两种选择。首先,我们可以假设所有高于 W 的频率都不存在,在这种情况下,IDFT 运算将产生一个离散函数,如图 7.1 左侧的实心点所示。另一方面,我们可以使用整个为无限数量的谐波定义的频谱,在这种情况下,Fourier级数将产生图中所示的连续函数。现在我们断言重构的连续函数必须通过所示的离散点。这是成立的,因为虽然高次谐波已被接纳,但它们没有贡献,因为所有系数都为零。因此,在重构的过程中是否包含大于的谐波并不重要。唯一的区别是,当定义了无限数量的系数并给定值为零时,可以在每个 x 值而不是仅对应于 \Delta x = \frac{W}{2} 的倍数的 x 值处合理地计算原始函数。

 -----------------------------------------------图 7.1 有限带宽的频率谱---------------------------------------------

我们可以通过令  f(x_j) 为由

f ( x ) = \frac{a_0}{2} + \sum_{k=1}^{D/2}[a_k cos(kx_j)+b_k sin(kx_j)] ( x_j = j \Delta x,j =整数)-------------[7.1]

定义的离散函数,并令g(x)为由

f ( x ) = \frac{a_0}{2} + \sum_{k=1}^{\infty}[a_k cos(kx)+b_k sin(kx)]+\sum_{1+D/2}^{\infty}[0.cos(kx)+0.sin(kx)](所有x )------------------------------------------------------------------[7.2]

定义的连续函数, 将前面的论证,置于一个量化的基础上(a quantitative footing)。因为[7.1]和[7.2]的右边是相等的,可以推导出,对于采样点 x_j , f ( x ) =  g( x ) ,对于所有其它 x 值而言,g( x ) 插值(interpolates) f ( x ) (译注:使连续曲线 g( x ) 通过全部离散数据点,或使全部离散数据点适配连续函数 g( x ) )。

前面的讨论表明,连续函数 g( x ) 是离散函数 f ( x ) 的合理插值。 持怀疑态度的学生可能仍然不相信这是正确的插值。为了说服,假设我们从连续函数 g( x ) 开始,我们预先知道它的频带限制为 W 。据此信息,则我们对 g( x ) 进行采样以生成离散函数 f ( x )。上述论点表明,如果我们以 R = 2W 的速率采样,则对于所有小于 W 的频率,f ( x ) 的频谱将与 g( x ) 的频谱相同。因此,g( x ) 的频谱可以通过添加无限数量的高次谐波从计算 f ( x ) 和频谱中导出,所有高次谐波的振幅均为零。这种用零填充频谱的策略被广泛用于提高 具有IDFT功能的重构函数空间分辨率的数值方法。 由于这个合成光谱将准确地重建 g( x ),因此我们得出结论:

精确地在有限区间内重建带限函数所需的所有信息都包含在有限数量的样本中。如果 采样率 R 超过 2W,其中 W 是给定函数的带宽;并且采样过程没有错误,则重建将没有错误。

这就是著名的采样定理,Whittaker[hwítikə](1935)在插值理论的背景下发展了该定理, 而Shannon[ʃǽnən](1949) 在信息论的背景下发展了该定理。Bergmann[bə:gmən] (1858) 在视网膜图像(retinal image)的神经采样(neural simpling)的背景下发现了这个思想,这是一个历史性的疏忽(oversight),后来 Helmholtz[hélmhoults](1867)在他被广泛引用的规则中推广了这个思想,即视觉分辨率要求在两个相对未受刺激的神经元(unstimulated neuron)之间至少需要一个相对的未受刺激神经元(即每个视觉模式周期至少有 2个神经样本)。 这条规则随后在 1930 年代被贝尔电话实验室的通信工程师 Nyquist[ˈnaɪ.kwɪst]重新发现。

7.3 错误识别(aliasing)

假如采样定理所要求的条件 R > 2W未被满足,则在函数重建的过程中将会引发错误。当由于欠采样(undersampling)而引发错误的时候,就称发生了错误识别(aliasing)。这个词“错误识别”用于这种背景下,是因为当采样率过低的时候,高频分量被误作(或伪装成(masquerades))低频分量。如图 7.2所示的一个例子,对区间上 D = 4的采样。因此,根据采样定理,可充分采样的最高频率(译注:指的是被采的频谱的频率)为 ΔfD/2,在本例中为 2Δf 。这个临界频率称为Nyquist频率,在图中用 fN 表示。由于实曲线具有低于临界频率的频率,因此它满足采样定理要求并且可以从频谱忠实地重建。

 

--------------------------------------------------图 7.2 欠采样产生错误识别-----------------------------------------

然而,虚线曲线的频率高于Nyquist频率,因此是欠采样的。欠采样虚曲线的频谱将与实曲线的频谱相同,因为这两个函数在样本点处相等。因此,虚线曲线似乎具有由标记为“错误识别”的空心圆圈所示的频谱。 虽然我们还不能证明这一说法,但事实证明,可以通过反映关于临界Nyquist频率的真实频谱,从真实频谱中预测欠采样函数的频谱。因此,Nyquist频率有时被称为“折叠频率”。我们将在第 13 章回到这个问题。

7.4 Parseval定理(Parseval[pázeifa:l])

在第 3 章中,我们介绍了离散函数的 Parseval 定理。承诺在以后的章节中我们将看到如何将 Parseval定理解释为一种能量守恒定理,该定理表示信号包含给定量的能量,而不管该能量是在空间/时间域还是在Fourier/频域中计算的。我们现在能够迎接这一挑战。

在第 5 章中,我们注意到连续函数与其自身的内积在许多物理情况下具有重要的解释即信号中的总能量

energy = \int_{0}^{T}v^2(t)dt = v(t)\bullet v(t)= 数据函数的长度平方---------------------[5.8]

假如我们将v(t) 替换为相应的Fourier级数,并选一个方便的观察区间(0,2π)以简化记法,我们求得无限级数

E = \int_{0}^{2\pi} \{ \frac{a_0}{2} + \sum_{k=1}^{\infty}[a_k cos(kt)+b_k sin(kt)]\}^{2}dt

= \int_{0}^{2\pi}\frac{a_0}{2} \{ \frac{a_0}{2} + \sum_{k=1}^{\infty}[a_k cos(kt)+b_k sin(kt)]\}dt

+ \int_{0}^{2\pi} a_{1}\cdot cost(t) \cdot \{ \frac{a_0}{2} + \sum_{k=1}^{\infty}[a_k cos(kt)+b_k sin(kt)]\}dt

+ \int_{0}^{2\pi} b_{1}\cdot sin(t) \cdot \{ \frac{a_0}{2} + \sum_{k=1}^{\infty}[a_k cos(kt)+b_k sin(kt)]\}dt

+ ... --------------------------------------------------------------------------------------------------------------[7.3]

积分的线性属性意味着和的积分是积分的和。由于正交性,这个无限系列的积分(每个积分在被积函数中都有无限数量的项)可以缩减为一个可管理的结果。

E = \int_{0}^{2\pi}(\frac{a_0}{2})^{2} dt

+\int_{0}^{2\pi}[{a_1cos(t)}]^{2} dt

+\int_{0}^{2\pi}[{b_1sin(t)}]^{2} dt

+... ---------------------------------------------------------------------------------------------------------------[7.4]

我们先前求得(等式[5.5]) sin^{2}(kx) 或 cos^{2}(kx) 在区间(0,2π)上的积分等于π 。因此,等式[7.4]简化为

E = (\frac{\pi a_0^{2}}{2} + \pi \sum_{k=1}^{\infty}(a_k^2+b_k^2) ------------------------------------------------------------------------[7.5]

将等式[5.7]和[7.5]结合在一起,我们得到连续函数的Parseval定理。

E = \int_{0}^{T}v^{2}(t)dt = \frac{\pi a_0^{2}}{2} + \pi \sum_{k=1}^{\infty}(a_k^2+b_k^2)

power=\frac{energy}{time} = \frac{1}{2\pi}\int_{0}^{2\pi}v^{2}(t)dt

=(\frac{a_0}{2})^{2} + \frac{1}{2} \sum_{k=1}^{\infty}(a_k^2+b_k^2)= (\frac{a_0}{2})^{2} + \sum_{k=1}^{\infty}\frac{m_k^2}{2}

=\frac{1}{2}[(\frac{a_0}{\sqrt{2}})^{2} + \sum_{k=1}^{\infty}(a_k^2+b_k^2)]

\frac{1}{2} { Fourier向量能量的平方 }--------------------------------------------------------------------------------[7.6]

因此,Parseval 定理告诉我们,总功率等于均值的平方加上正弦Fourier分量幅值平方和的一半,即Fourier系数向量的平方长度的一半但是任何给定Fourier分量的幅度平方的一半就是该分量的功率因此,总功率是每个Fourier分量的功率之和通常均值 (DC,Direct Current)(译注:直流) 项并不重要因为信息仅由信号关于均值的变化(例如视觉刺激的空间或时间对比度)携带。 在这种情况下,我们可以说信号功率等于Fourier分量的平方幅度之和的一半,这也是信号均值为零时信号的方差。虽然理论要求Fourier相量的长度是无限的,但任何物理信号总是带限的,因此功率是有限的。

7.5 截断Fourier级数和回归理论(Truncated Fourier Series & Regression Theory)

为了进行稍微不同的推理,假设给定了一个定义在区间 (-π,π)上的函数 f ( x )。我们知道 f ( x )正好等于无限Fourier级数

f ( x ) = \frac{a_0}{2} + \sum_{k=1}^{\infty}[a_k cos(kx)+b_k sin(kx)] ----------------------------------------------------[7.7]

然而,我们希望通过带宽限于 M 次谐波的有限Fourier级数带来逼近 f ( x )。 也就是说,我们试图通过截断的Fourier级数 g ( x )

f ( x ) = \frac{a_0}{2} + \sum_{k=1}^{\infty}[\alpha_k cos(kx)+\beta_k sin(kx)]----------------------------------------------------[7.8]

来逼近 f ( x )。

在回归统计理论(statistical theory of regression)中,近似值的“拟合优度(goodness of fit)”通常用“均方误差(mean squared error)”(译注:差的平方再取平均)来衡量。通过该度量,上述逼近的误差可以通过定义为的均方误差 ε 来量化,定义为

\mathsf{\epsilon} = \frac{1}{2\pi} \int_{-\pi}^{\pi}[f(x)-g(x)]^2 dx

= \frac{1}{2\pi}\int_{-\pi}^{\pi}f^2 (x)dx - \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)g(x)dx + \frac{1}{2\pi}\int_{-\pi}^{\pi}g^2(x)dx---------------------------------[7.9]

根据 Parseval 定理,我们将 [7.9] 中的第一个积分解释为数据函数中的功率,第三个积分是Fourier级数模型中的功率。中间项是模型与给定函数的内积。

现在的目标是找出什么Fourier系数 \alpha_k 和 \beta_k 的值会使ε最小。要了解答案的结果,请考虑 M = 1 的最简单情况。也就是说,我们希望通过函数 g(x)=\frac{a_0}{2} 来逼近 f ( x )。 在这种情况下,错误是

\mathsf{\epsilon}= \frac{1}{2\pi}\int_{-\pi}^{\pi}f^2 (x)dx - \frac{\alpha_0}{2\pi}\int_{-\pi}^{\pi}f(x)dx + \frac{\alpha^{2}_0}{4}

= f ( x )中的功率 -  \frac{\alpha_{0}a_{0}}{2} + \frac{\alpha_0^2}{4} ------------------------------------------------------------------------------[7.10]

采用标准方法来最小化此类问题,为了最小化错语,我们必须针对 \alpha_0 微分这个二次等式[7.9],并将微分结果置为0,并解 \alpha_0 这个方程,产生

\frac{d\mathsf{\epsilon}}{d\alpha_0} = \frac{- a_0}{2} + \frac{\alpha_0}{2}=0 

∴ \alpha_0 = a_0 ------------------------------------------------------------------------------------------------------[7.11]

总之,这个结果表明,如果我们用函数 ( x ) = 常数来逼近 ( x ),给出最佳拟合的常数就是 ( x ) 的第一个Fourier系数。也就是说,截断Fourier级数也是函数f( x )的“最小二乘估计(least squares estimate)”。

在接受上述结论为普遍正确之前,让我们考虑用 3 项Fourier级数

g( x ) = \frac{\alpha_0}{2} + \alpha_1 cos(x)+ \beta_1 sin(x) ------------------------------------------------------------------[7.12]

来逼近 ( x )。

再次,我们使用考察均方误差

ε =  f ( x )中的功率 - \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)[\frac{\alpha_0}{2} + \alpha_1 cos(x)+\beta_1 sin(x)] + g ( x ) 中的功率—----------------------------------------------------------------------------------------------------------------------------------------[7.13]

中间项在给定信号与模型的三个分量中的每一个分量之间生成三个内积。但是这些内积被认为是Fourier系数的定义。因此错误减少到

ε =  f ( x ) 中的功率 

- \frac{\alpha_0}{2\pi} \int_{-\pi}^{\pi}f(x)dx - \frac{\alpha_1}{\pi} \int_{-\pi}^{\pi}f(x)cos(x)dx - \frac{\beta_1}{\pi} \int_{-\pi}^{\pi}f(x)sin(x)dx + \frac{\alpha_0^2}{4} + \frac{\alpha_1^2}{2} + \frac{\beta_1^2}{2}

constant - \frac{\alpha_0a_0}{2} - \alpha_1a_1 - \beta_1b_1 + \frac{\alpha_0^2}{4} + \frac{\alpha_1^2}{2} + \frac{\beta_1^2}{2} --------------------------------------------[7.14]

现在,我们首先针对 \alpha_0 最小化这个错误(译注:对 \alpha_0 偏微分 )

\frac{\partial \varepsilon}{\partial \alpha}_0 = -\frac{a_0}{2} + \frac{\alpha_0}{2} = 0 

\alpha_0=a_0 --------------------------------------------------------------------------------------------------------[7.15]

然后针对 \alpha_1 最小化这个错误

\frac{\partial \varepsilon}{\partial \alpha}_1 = -\frac{a_1}{2} + \frac{\alpha_1}{2} = 0

∴  \alpha_1=a_1 -----------------------------------------------------------------------------------------------------[7.16]

然后针对 \beta_1 最小化这个错误

\frac{\partial \varepsilon}{\partial \beta}_1 = -b_1+\beta_1=0 

∴  \beta_1=b_1 -----------------------------------------------------------------------------------------------------[7.17]

我们再次发现截断Fourier级数也是最小化均方误差的模型。 鉴于这些具体示例,我们无需进一步证明即可断言函数的截断Fourier级数始终是该函数的最小二乘Fourier模型。 这同样适用于部分Fourier级数(即缺少某些项的级数),因为证明基本上是逐项进行的。

请注意,包含基波谐波不会改变第一个示例中确定的最佳常数值。这个结果是由于Fourier级数中基函数的正交性。因此,一般而言,为 k 次谐波计算的最佳Fourier系数与任何其他系数的计算无关。其他不相互正交的拟合(即基)函数的选择,例如多项式或Taylor级数,不具有这个很好的属性。因此,当使用多项式或Taylor级数对数据建模时,获得的系数取决于级数中包含的项数。Fourier级数模型不会出现这种困难,因为基函数是正交的。

我们观察到截断Fourier级数也是最小二乘Fourier模型,这表明了一种处理采样数据不等距分布的两种常见情况的方法。首先,经验记录中可能缺少数据样本,其次,样本可能是在不规则的时间间隔内获得的。在这两种情况下,数据的基函数(三角或复指数)的最小二乘法拟合可用于恢复感兴趣的Fourier系数。 最小二乘算法不像 DFT 那样稳健,并且一次运行一个基函数,但在这种情况下仍然是一种常用的方法。

内容来源:

<< Fourier Analysis for Beginners>> Larry N. Thibos

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/23370.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【大数据学习篇10】Spark项目实战~网站转化率统计

学习目标/Target 掌握网站转化率统计实现思路 了解如何生成用户浏览网页数据 掌握如何创建Spark连接并读取数据集 掌握利用Spark SQL统计每个页面访问次数 掌握利用Spark SQL获取每个用户浏览网页的顺序 掌握利用Spark SQL合并同一用户浏览的网页 掌握利用Spark SQL统计每…

qt quick(qml)通过arcgis导入自定义格式地图(Windows 版本)

参考ArcGIS Maps SDK for Qt 参考Display a map 安装 预先安装的软件 安装ArcGIS SDK 点击ArcGIS Maps SDK for Qt 注册账号 要注册成developer版本用户的&#xff0c;不然之后可能没办法生成API 下载 下载之后安装&#xff0c;一路next就可以了 在QT中创建ArcGIS项目…

安科瑞对于热继电器对电动机保护的探讨

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘要:电动机烧毁是每一个生产企业都无法回避的现象&#xff0c;怎样加强电动机保护&#xff0c;使生产工艺系统的稳定&#xff0c;减少企业非正常停机时间。电动机保护成为电气技术人员一个重要课题。因此&#xff0c…

【数据结构】如何应用堆解决海量数据的问题

堆(Heap数据结构堆在计算机科学中有着广泛的应用&#xff0c;今天来介绍两种堆的应用&#xff1a;堆排序、Top-k问题&#x1f349; 堆排序 ​ 堆排序是一种基于堆数据结构的排序算法。它的基本思想是&#xff0c;将待排序的序列构建成一个大根堆&#xff08;或小根堆&#xff…

Keil 5 MDK 发律师函警告了,如何用STCubeIDE开发标准库的程序(STM32F103C8T6为例)

用STCubeIDE进行标准库开发 1、CubeIDE介绍 https://www.stmcu.com.cn/ecosystem/Cube/STM32CubeIDE 2、CubeIDE下载 点击上面的链接&#xff0c;登录即可下载 3、搭建Demo工程 新建一个工作空间 创建一个工程 选择芯片-STM32F103C8T6 填写工程信息 添加标准库到工程 标…

SSRS rdlc报表 六 报表分组和总计

报表分组和总计在报表中是一个很常用的功能&#xff0c;比如我们需要按部门进行分组&#xff0c;统计每个部门的费用支出&#xff0c;或者在进一步分组&#xff0c;每个部门每个月的费用支出&#xff0c;通过rdlc报表&#xff0c;很容易实现这个需求。 我们下面要讲解的案例&a…

mac免费杀毒软件哪个好用?如何清理mac系统需要垃圾

CleanMyMac x是一款功能强大的Mac系统优化清理工具&#xff0c;使用旨在帮助用户更加方便的清理您系统中的所有垃圾&#xff0c;从而加快电脑运行速度&#xff0c;保持最佳性能&#xff0c;更加稳定、流畅、快速&#xff01;&#xff01;&#xff01; CleanMyMac X无疑是目前m…

开放式耳机和封闭式耳机的区别有哪些?开放式耳机有哪些推荐?

开放式耳机和封闭式耳机的区别主要在以下几个方面&#xff1a; 设计结构&#xff1a;开放式耳机通常有一个开放的设计&#xff0c;不需要塞入耳即可收听音乐&#xff0c;同时与外部环境进行交互。封闭式耳机则是封闭的设计&#xff0c;耳机驱动单元之间是封闭和隔离的&#xf…

使用IIS创建WEB服务

文章目录 前言一、Web服务是什么&#xff1f;1.Web服务概述2.如何获取网页资源3.常见Web服务端软件4.什么是IIS 二、安装IIS1.安装Web服务器角色2.准备网页文件3.配置Web站点4.客户端浏览例&#xff1a;配置IIS站点 三、虚拟主机概述1.虚拟Web主机2.虚拟主机的几种类型3.基于端…

国内做校园信息化的龙头企业公司有哪些?

随着数字化转型的加速&#xff0c;越来越多的学校开始寻求校园信息化的解决方案&#xff0c;相比于传统信息化模式&#xff0c;国内有哪些做校园信息化做得比较好的企业&#xff1f;他们采用的又是什么样的方式&#xff1f; 一文带你了解&#xff0c;零代码平台搭建校园信息化…

EMC模式如何助力新能源服务商攻坚克难

01. 什么是合同能源管理&#xff1f; 合同能源管理(EMC-Energy Management Contract)是一种新型的市场化节能机制,其实质就是以减少的能源费用来支付节能项目全部成本的节能投资方式。&#xff1a;节能服务公司与用能单位以契约形式约定节能项目的节能目标&#xff0c;节能服务…

算法设计与分析期末总结

0000前言&#xff1a;基本是为了我自己看的一些我容易忘记的东西&#xff0c;为考试作准备把&#xff0c;主要使后半部分的知识&#xff0c;前半部分请看算法设计与分析阶段考总结 第五章 回溯算法是一种系统地搜索问题的解的方法。某个问题的所有可能解的称为问题的解空间&…

华为OD机试真题 Java 实现【寻找相似单词】【2023Q2 200分】

一、题目描述 给定一个可存储若干单词的字典&#xff0c;找出指定单词的所有相似单词&#xff0c;并且按照单词名称从小到大排序输出。 单词仅包括字母&#xff0c;但可能大小写并存&#xff08;大写不一定只出现在首字母&#xff09;。 相似单词说明&#xff1a; 给定一个…

北京君正应用案例:双镜头双画面乔安枪球联动摄像头

你是否遇到过这种问题&#xff1f; 既要看店铺又要看柜台 既要看车又要看大门 雷龙发展提供原厂技术支持&#xff0c;并提供君正集成电路完整解决方案&#xff0c;大大降低你的开发难度及开发时间。 单镜头摄像头一台不够广 出现监控盲区&#xff0c;让小偷有可趁之机 只能装两…

linuxOPS基础_Linux文件管理

Linux下文件命名规则 可以使用哪些字符&#xff1f; 理论上除了字符“/”之外&#xff0c;所有的字符都可以使用&#xff0c;但是要注意&#xff0c;在目录名或文件名中&#xff0c;不建议使用某些特殊字符&#xff0c;例如&#xff0c; <、>、&#xff1f;、* 等&…

Nacos、Eureka和Zookeeper有什么区别

Nacos、Eureka和Zookeeper都是服务注册中心&#xff0c;它们的主要功能是管理分布式系统中各个微服务实例的注册与发现。它们之间的主要区别在于&#xff1a; 1. 语言支持&#xff1a;Nacos是用Java语言开发的&#xff0c;Eureka是用Java语言开发的&#xff0c;Zookeeper则是用…

开源项目ChatGPT-website再次更新,累计下载使用1600+

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

【数组的深刻理解】

#include<stdio.h> #define N 10 int main() {int a[N] { 0 }; //定义并初始化数组return 0; } 概念&#xff1a;数组是具有相同数据类型的集合。 数组的内存布局 #include<stdio.h> int main() {int a 10;int b 20;int c 30;printf("%p\n", &a…

一文带你了解MySQL之optimizer trace神器的功效

前言&#xff1a; 对于MySQL 5.6以及之前的版本来说&#xff0c;查询优化器就像是一个黑盒子一样&#xff0c;你只能通过EXPLAIN语句查看到最后优化器决定使用的执行计划&#xff0c;却无法知道它为什么做这个决策。这对于一部分喜欢刨根问底的小伙伴来说简直是灾难&#xff1…

基于ARIMA-LSTM组合模型的预测方法研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…