快速傅里叶变换FFT总结

2023-11-05

快速傅里叶变换,在竞赛中离散傅里叶变换DFT及其逆变换IDFT尤为常用,主要用于快速求多项式的乘积。形式化地说,多项式就是某个 f ( x ) = ∑ i = 0 n a i x i f(x)=\sum\limits^n_{i=0}a_ix^i f(x)=i=0naixi,两个系数分别为 a i a_i ai b i b_i bi,那么 ( f × g ) ( x ) = f ( x ) g ( x ) = ∑ i = 0 n ∑ j = 0 n a i b j x i + j (f\times g)(x)=f(x)g(x)=\sum\limits^{n}_{i=0}\sum\limits_{j=0}^{n}a_ib_jx^{i+j} (f×g)(x)=f(x)g(x)=i=0nj=0naibjxi+j,容易看出这个多项式是 2 n 2n 2n次的。
【补充知识1】我们接着先看一下一个叫卷积的东西。卷积实际上就是对应相乘, ( f ⊗ g ) ( x ) = ∑ i = 0 n a i b i x i (f\otimes g)(x)=\sum\limits^{n}_{i=0}a_ib_ix^i (fg)(x)=i=0naibixi,可以稍微理解一下,实质上我们如果将乘法视为一种变换,卷积就是在向量上的变换的叠加。
【补充知识2】
其实,对于一条 n n n次的多项式曲线,我们可以通过类比认识到我们需要 n + 1 n+1 n+1个不同的点就可以唯一确定这条曲线。比如说一次函数需两个点,二次函数需三个点,等等。我们考虑到,我们表达这些函数为 f ( x ) = ∑ i = 0 n a i x i f(x)=\sum\limits^n_{i=0}a_ix^i f(x)=i=0naixi,那么如果我们现在得知了 n + 1 n+1 n+1个函数上的点,直接代入就可以相应得出 n + 1 n+1 n+1个方程,由于点两两不同,所以这个方程组一定恰有一组解,这也就确定了一条唯一的曲线。

好的,接下来是真正的内容。
我们可以发现,要确定最终的 ( f ⊗ g ) ( x ) (f\otimes g)(x) (fg)(x),需要使用 2 n + 1 2n+1 2n+1个点值表达,也就是在最终结果曲线上的 2 n + 1 2n+1 2n+1个点。我们如果考虑在 f ( x ) f(x) f(x) g ( x ) g(x) g(x)上取 2 n + 1 2n+1 2n+1个点,设为 ( x i , y f i ) (x_i,{y_f}_i) (xi,yfi) ( x i , y g i ) (x_i,{y_g}_i) (xi,ygi),我们发现只要将其卷积一下,我们就能够找到这 2 n + 1 2n+1 2n+1个点。这是很好理解的,因为将 y f i {y_f}_i yfi y g i {y_g}_i ygi卷积后作为新的纵坐标所得到的点,显然就在 ( f ⊗ g ) ( x ) (f\otimes g)(x) (fg)(x)上。
那么我们的问题就只剩下怎样计算和如何再次快速确定了。
我们考虑下分治,如果我们将系数向量中奇数项和偶数项分开来,我们会发现所得的两个式子间有一定的相似性: a 1 x 1 + a 3 x 3 + ⋯ + a 2 k + 1 x 2 k + 1 a_1x^1+a_3x^3+\cdots+a_{2k+1}x^{2k+1} a1x1+a3x3++a2k+1x2k+1 a 0 x 0 + a 2 x 2 + ⋯ + a 2 k x 2 k + ⋯ a_0x^0+a_2x^2+\cdots+a_{2k}x^{2k}+\cdots a0x0+a2x2++a2kx2k+
实际上,我们考虑将上面的式子变为 x ( a 1 x 0 + a 3 x 2 + ⋯ + a 2 k + 1 x 2 k + ⋯   ) x(a_1x^0+a_3x^2+\cdots+a_{2k+1}x^{2k}+\cdots) x(a1x0+a3x2++a2k+1x2k+),再将各项的次数折半(因为是偶数),我们现在就能够得到两个规模相对于原来的问题减半的子问题,可以递归求解,这里我们就得出了DFT的算法,由主定理对于 T ( n ) = 2 T ( n 2 ) + O ( n ) T(n)=2T(\frac{n}{2})+\text O(n) T(n)=2T(2n)+O(n),马上看出其复杂度 O ( n lg ⁡ n ) \text O(n\lg n) O(nlgn)
但是,在还原的时候,我们却遇到了一个困难:我们如何将点值表达快速变为系数表达?难道我们去用高斯消元法?这样 O ( n 3 ) \text O(n^3) O(n3)岂不是比原来还慢?我们来观察一下DFT的实质。我们将DFT的效果写成这样一个矩阵:
[ 1 x 0 ⋯ x 0 n 1 x 1 ⋯ x 1 n ⋮ ⋮ ⋱ ⋮ 1 x n ⋯ x n n ] \begin{bmatrix} 1 & x_0 & \cdots x_0^n \\ 1 & x_1 & \cdots x_1^n \\ \vdots & \vdots & \ddots & \vdots\\ 1& x_n & \cdots x_n^n\\ \end{bmatrix} 111x0x1xnx0nx1nxnn
稍微解释下,根据线性代数,这个东西乘上我们的系数向量之后所得就是对应的 x = x 0 , 1 , ⋯   , n x=x_{0,1,\cdots,n} x=x0,1,,n ( f ⊗ g ) ( x ) (f\otimes g)(x) (fg)(x)的结果。这个东西是很显然的,考虑用线性变换的角度理解。
然后我们考虑DFT的逆变换,即所谓IDFT,其的实质就是乘上DFT所乘上的这个矩阵的一个逆矩阵。由逆矩阵定义,我们可以考虑猜想在逆矩阵中 ( j , k ) (j,k) (j,k)处,数为 x k − j × C x_k^{-j}\times C xkj×C,其中 C C C是一个常数。那么如果将两个矩阵乘起来,再考虑 ( j , j ′ ) (j,j') (j,j)处的值,为 ∑ k = 0 n x k j ′ − j C \sum^{n}_{k=0}x_k^{j'-j}C k=0nxkjjC要满足逆矩阵条件 V V − 1 = I n VV^{-1}=I_n VV1=In,我们需要当且仅当 j ′ = j j'=j j=j的时候上式为 1 1 1,其余情况为 0 0 0。先看第一个条件,代进去得到 ∑ k = 0 n C = 1 \sum^n_{k=0}C=1 k=0nC=1,得 C = 1 n C=\frac{1}{n} C=n1。代回去并根据第二个条件我们有 ∑ k = 0 n x k j ′ − j = 0 ( j ′ ≠ j ) \sum^n_{k=0}x_k^{j'-j}=0(j'\neq j) k=0nxkjj=0(j=j)
然后我并不知道怎么一直推下去,于是我们直接来一个构造法。我们令 x k = w n k x_k=w_n^k xk=wnk,然后我们就得到了一个等比数列,按照上式求和根据公式可以得到 ∑ k = 0 n ( w n k ) j ′ − j = ∑ k = 0 n ( w n j ′ − j ) k = ( w n j ′ − j ) n − 1 w n j ′ − j − 1 = 0 \sum\limits_{k=0}^n(w_n^k)^{j'-j}=\sum\limits_{k=0}^n(w_n^{j'-j})^k=\frac{(w_n^{j'-j})^n-1}{w_n^{j'-j}-1}=0 k=0n(wnk)jj=k=0n(wnjj)k=wnjj1(wnjj)n1=0,即(这里跳了一步移项) ( w n j ′ − j ) n = 1 (w_n^{j'-j})^n=1 (wnjj)n=1我们又考虑到, j ′ j' j j j j取遍 0 ⋯ n 0\cdots n 0n间的所有值,所以上式可以改为 ( w n k ) n = w n k n = 1 (w^k_n)^n=w_n^{kn}=1 (wnk)n=wnkn=1,其中 k k k的值域为从 − n -n n n n n
然后,我们考虑先取 k = 1 k=1 k=1,本质上这里说的就是我们需要这样的一类不同的 2 n 2n 2n个数使得 ( w n ) n = 1 (w_n)^n=1 (wn)n=1。显然在实数域中只能有 1 1 1(以及 − 1 -1 1,因为我们在分治的时候预先补了零使得次数是 2 d 2^d 2d)满足这个性质,显然太少了,怎么办?
我们考虑扩展取值范围。一种方法,就是不只考虑实轴,我们可以考虑下复平面。也就是说,我们可以不只考虑 a ∈ R a\in \mathbb{R} aR,而是考虑所有 a + b i ∈ C a+bi\in \mathbb{C} a+biC,其中 a , b ∈ R a,b\in \mathbb{R} a,bR,而这里的 i i i,是一个曾经数学中往往避开的事物,满足 i 2 = − 1 i^2=-1 i2=1。实质上来说,复数可以理解为一种向量,比如说两个复数相加就是向量作用的叠加,而两个复数的积,则是另一种程度上的叠加。比方说我们考虑到,我们用极坐标也可以确定向量,进而确定复数,我们由变换 f ( x ) = { x = ρ cos ⁡ θ y = ρ sin ⁡ θ f(x)=\left\{ \begin{aligned} x & = &\rho \cos\theta \\ y & = & \rho\sin\theta \end{aligned} \right. f(x)={xy==ρcosθρsinθ
我们可以得出在极坐标意义下 a + b i a+bi a+bi可以写成 ρ ( cos ⁡ θ + i sin ⁡ θ ) \rho(\cos\theta+i\sin\theta) ρ(cosθ+isinθ),考虑两个复数相乘的时候,我们有(涉及高中三角学知识,若无基础可以跳过) ρ 1 ( cos ⁡ θ 1 + i sin ⁡ θ 1 ) × ρ 2 ( cos ⁡ θ 2 + i sin ⁡ θ 2 ) = ρ 1 ρ 2 ( cos ⁡ θ 1 c o s θ 2 + i sin ⁡ θ 1 cos ⁡ θ 2 + i sin ⁡ θ 2 cos ⁡ θ 1 − sin ⁡ θ 1 sin ⁡ θ 2 ) \rho_1(\cos\theta_1+i\sin\theta_1)\times \rho_2(\cos\theta_2+i\sin\theta_2)=\rho_1\rho_2(\cos\theta_1 cos\theta_2+i\sin\theta_1\cos\theta_2+i\sin\theta_2\cos\theta_1-\sin\theta_1\sin\theta_2) ρ1(cosθ1+isinθ1)×ρ2(cosθ2+isinθ2)=ρ1ρ2(cosθ1cosθ2+isinθ1cosθ2+isinθ2cosθ1sinθ1sinθ2)考虑利用各种和差化积公式(具体推导这里略去),得到乘积为 ρ 1 ρ 2 ( cos ⁡ ( θ 1 + θ 2 ) + i sin ⁡ ( θ 1 + θ 2 ) ) \rho_1\rho_2(\cos(\theta_1+\theta_2)+i\sin(\theta_1+\theta_2)) ρ1ρ2(cos(θ1+θ2)+isin(θ1+θ2)),实质上就是长度相乘,旋转角相加。
我在继续来考量下这个概念有什么用。上面的 ( w n ) n = 1 (w_n)^n=1 (wn)n=1在变换群里面其实对应的是一种循环,称作生成元。我们考虑到,如果对应在复平面上,我们考虑令 ρ = 1 \rho=1 ρ=1,然后长度上不管怎么乘都不会变,最后也就是 1 1 1(由于 ρ \rho ρ被要求是非负实数),然后神奇的东西来了,我们令 θ = 2 π / n \theta=2\pi/n θ=2π/n,也就是将整个复平面划分成 n n n份,那么根据我们刚才的相乘原则,这个复数向量 cos ⁡ ( 2 π n + i sin ⁡ ( 2 π n ) ) \cos(\frac{2\pi}{n}+i\sin(\frac{2\pi}{n})) cos(n2π+isin(n2π))实际上就是我们所要求的 w n w_n wn。继续考量下它的性质,如果考虑 w n k ( 0 ≤ k < n ) w_n^k(0\leq k< n) wnk(0k<n),其的 n n n次方也是 1 1 1,因为 ( w n k ) n = ( w n n ) k = 1 k = 1 (w_n^k)^n=(w_n^n)^k=1^k=1 (wnk)n=(wnn)k=1k=1,同时在复数意义下,这 n n n个数也是两两不同的,所以我们如果代入这 n n n个数,我们就可以在 O ( n lg ⁡ n ) \text O(n\lg n) O(nlgn)的时间内计算出IDFT,而且代码上和DFT差不多,因为只是最后多除了个 n n n,同时把 w n k w_n^k wnk换成了 w n − k w_n^{-k} wnk,因此也可以写在一起,传入参数在某几步上加个特判。
同时复数还有性质 w n k + n / 2 = w n k × w n n / 2 w_n^{k+n/2}=w_n^k\times w_n^{n/2} wnk+n/2=wnk×wnn/2,而又容易由角度看出 w n n / 2 = − 1 w_n^{n/2}=-1 wnn/2=1,所以 w n k + n / 2 = − w n k w_n^{k+n/2}=-w_n^k wnk+n/2=wnk。这个东西可以用来稍微改进下DFT,这样我们的计算量大概减少了一半左右,代码也是更容易写了。
不过,虽然说DFT在理论上是没有误差的,但是鉴于三角函数浮点数上计算有不小的误差,所以说如果多项式的系数向量都是整数的话,显然最后的系数向量也是整数,那么我们完全可以不在复数域下进行,而是在另一种同样具有群性质的数系下进行,比如说我们同样熟悉的模域下。而这就要在数论上进行讨论了,所以并不写,坑等以后再填……
好吧,最后再提一下,其实是有四种傅里叶变换的,分别对应着时域和频域上的离散和连续,其中如果两个域都是连续的,实质上就是傅里叶级数,也就是将一个函数展开成许多三角函数构成的无穷级数。再换句话说,就是用许多正(余)弦波的叠加去不断拟合某条给定的曲线。当然,你也可以用方波去拟合,这就涉及到快速沃尔什变换(FWT)了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速傅里叶变换FFT总结 的相关文章

  • 做大模型也有1年多了,聊聊这段时间的感悟!

    自ChatGPT问世以来 做大模型也有1年多了 今天给大家分享这一年后的感悟 过去一年应该是AI圈最万千瞩目的一年了 大家对大模型 OpenAI ChatGPT AI Native Agent这些词投入了太多的关注 以至于有一年的时间好像经
  • 【牛客周赛Round 27】题目讲解

    题目一 小红的二进制删数字 小红拿到了一个二进制字符串 s 她可以删掉其中的一些字符 使得最终该字符串为一个2的幂 即可以表示为 2 k 形式的数 小红想知道 自己最少删几个字符可以达成 请你编写一个函数返回这个答案 具体思路 看到这道题目
  • 华为OD机试2024年最新题库(Java)

    我是一名软件开发培训机构老师 我的学生已经有上百人通过了华为OD机试 学生们每次考完试 会把题目拿出来一起交流分享 重要 2024年1月 5月 考的都是OD统一考试 C卷 题库已经整理好了 命中率95 以上 这个专栏使用 Java 解法 问
  • 【卡尔曼滤波】具有梯度流的一类系统的扩散映射卡尔曼滤波器研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文章
  • 【一种新的Burton-Miller型奇异边界方法(BM-SBM)】用于声学设计灵敏度分析,2D和3D声学设计灵敏度分析的奇异边界方法研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 2D 2 2 3D
  • 【GRNN-RBFNN-ILC算法】【轨迹跟踪】基于神经网络的迭代学习控制用于未知SISO非线性系统的轨迹跟踪(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 第1部分 2 2 第2部分
  • 使用 androids 可视化器类获取可变频率范围

    我想获取智能手机播放的声音的某些频率范围的值 以便我可以通过蓝牙将它们转发到可视化这些范围的设备 这些范围是 0 63Hz63 160赫兹160 400赫兹400 1000赫兹1000 2 500Hz2 500 6 250Hz6 250 1
  • 为什么 Python 和 CUDA 不支持半精度复杂浮点运算?

    NumPY 有复杂64 https docs scipy org doc numpy user basics types html对应于两个float32 但它也有 float16 但没有 complex32 怎么会 我有涉及 FFT 的信
  • 如何在 R 中执行*快速* DCT(离散余弦变换)?

    使用 Rprof 发现 dtt 包中的 dct 是一段运行速度相当缓慢的 R 代码中的主要罪魁祸首 将其替换为 stats 包中的 fft 这不是相同的转换 但应该花费相同的时间来计算 我的运行时间显着提高 事实上 我的 Rprof 线路中
  • 对真实输入数据进行高效的 2D FFT?

    我目前正在使用 opencl 对真实输入数据实现二维 FFT 更具体地说是使用 FFT 的快速 2D 卷积 所以我只需要一些行为足够相似的东西来应用卷积 2D FFT 是在行上使用 1D FFT 然后在列上使用 1D FFT 来实现的 为了
  • 傅立叶空间中的滤波器的行为与预期不同

    这是我提出的已回答问题的后续内容 可以找到here https stackoverflow com questions 54022376 inverse fft returns negative values when it should
  • 在 Android 上查找音调

    如何从我的语音记录中找到最小 最大 平均 标准偏差音调 我使用 AudioRecord 来录制我的声音 frequency 8000 channelConfiguration AudioFormat CHANNEL CONFIGURATIO
  • 灰度图像到 NumPy 数组进行傅里叶变换

    目前我正在使用 PIL 和 NumPy 我有一个彩色的png图像 我想要 以灰度读取 转换为 NumPy 数组 对阵列执行 FFT 显示图像 这就是我正在尝试的 在 IPython w pylab flag In 1 import Imag
  • Python 中的帕塞瓦尔定理

    我试图掌握 Python 的 fft 功能 我偶然发现的奇怪的事情之一是帕塞瓦尔定理 http en wikipedia org wiki Parseval 27s theorem似乎不适用 因为它现在给出的差异约为 50 而它应该是 0
  • C 中的二维傅里叶变换

    我使用该网站的方程实现了 2D DFT 和 IDFThttp homepages inf ed ac uk rbf HIPR2 fourier htm http homepages inf ed ac uk rbf HIPR2 fourie
  • DSP 库 - RFFT - 奇怪的结果

    最近我一直在尝试在我的STM32F4 Discovery评估板上进行FFT计算 然后将其发送到PC 我已经调查了我的问题 我认为我对制造商提供的 FFT 函数做错了 我正在使用 CMSIS DSP 库 现在我一直在用代码生成样本 如果工作正
  • 在 MATLAB 中分析 wav 文件

    所以我有这个钢琴录音 wav 格式 我能够做一个FFT整体记录并识别频率 然而 根据我读过的一些文章 最好将 wav 文件分解为多个窗口 其中每个窗口都包含一个特定的音符 为此 我需要首先绘制时域信号的 功率包络 考虑音符平均能量概念 因此
  • 我的傅立叶逆变换中的尖峰

    我正在尝试在 MATLAB 中比较两个数据集 为此 我需要通过傅里叶变换数据来过滤数据集 对其进行过滤 然后对其进行逆傅里叶变换 然而 当我对数据进行逆傅里叶变换时 我在红色数据集的两端都出现了一个尖峰 图片显示了第一个尖峰 它在开始时应该
  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • 如何从傅里叶变换绘制频谱

    我想绘制音乐文件的频谱 就像他们在 Audacity 中所做的那样 因此 我希望 x 轴上以赫兹为单位的频率 y 轴上以振幅 或 desibel 为单位 我将歌曲 大约 2000 万个样本 分成一次 4096 个样本的块 这些块将产生 20

随机推荐

  • Git操作与仓库创建

    Git简介 首先了解一个概念 版本控制 简单来说就是如果你做文案工作 每次提交之后 你的领导会让你修改 一篇稿子可能修改十几次 但是最后定稿的很可能不是最新修改的那一稿 所以就需要有个版本控制的方法 可以回溯到你所修改的任何一版 并且可以拿
  • ServerletContext

    ServerletContext ServerletContext是一种各serverlet项目间互相传输数据的存储器 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img s29palnw 1613542859309
  • c++基础 STL 第三篇:(deque容器和stack容器)

    文章目录 一 deque 的基本概念 二 deque 的构造函数 三 deque 的赋值操作 四 deque 的大小操作 五 deque 的插入和删除 六 deque 的数据获取 七 stack 的基本概念 八 stack 的常用接口 一
  • 配置文件及日志文件脱敏

    配置文件脱敏 使用原因 在项目中 经常需要在配置文件里配置一些敏感信息 比如数据库用户名和密码 redis mq的连接信息等 如果直接写明文 很容易造成密码泄露等安全问题 jasypt简介 Jasypt是一个Java库 它允许开发者以最小的
  • 文档在线预览(四)使用js前端实现word、excel、pdf、ppt 在线预览

    文章目录 实现方案 一 docx文件实现前端预览 1 docx preview 2 Mammoth 二 PDF文件实现前端预览 1 pdf js 2 pdfobject js 3 vue pdf 4 iframe object embed
  • 【高等数学重点题型篇】——一元函数微分学的应用

    本文仅用于个人学习记录 使用的教材为汤家凤老师的 高等数学辅导讲义 本文无任何盈利或者赚取个人声望的目的 如有侵权 请联系删除 文章目录 一 证明f n
  • [当人工智能遇上安全] 7.基于机器学习的安全数据集总结

    您或许知道 作者后续分享网络安全的文章会越来越少 但如果您想学习人工智能和安全结合的应用 您就有福利了 作者将重新打造一个 当人工智能遇上安全 系列博客 详细介绍人工智能与安全相关的论文 实践 并分享各种案例 涉及恶意代码检测 恶意请求识别
  • unity3d小小白之改变地面的颜色质感

    如果不知道怎么建地面 可以看上一个随笔噢 这样看起来很冰山诶 换颜色呢 要先把unity3d自带的基础素材导入噢 如果你有自己的素材也是可以导入的 只不过要放在assets文件中 最好建个专门的文件夹存放图片 pigPhoto catPho
  • 深入 Spring 系列之静态资源处理

    1 背景 前一段时间 WebIDE 开源的过程中 无意间接触到 webjars 觉得比较有趣 于是研究并整理了一下 webjars 是将前端的库 比如 jQuery 打包成 Jar 文件 然后使用基于 JVM 的包管理器 比如 Maven
  • 键盘控制ElementPlus树形控件展开收起选中功能

    需求 1 当树形控件获取焦点后 可通过键盘上下键来选中节点 2 当存在子节点时 键盘左键展开树 键盘右键收起树 注意 通过上下键来选中数据节点时 只有canFocus为true的节点才能被选中 移动键盘上下键 切换树节点选中项 不执行树的点
  • 记一次APP去壳破解重新打包

    1 拿到apk包时 第一步先判断是否加壳 加的是什么壳 在手机上或者虚拟机上用MT管理器找到对应的apk包 可以看的这个包虽然说是未加固 但还有个伪百度加固 其实也就是加了百度的壳的 2 利用BlackDex32进行去壳 在手机或虚拟机上安
  • 泉州港unityAR方面总结

    环境配置 打包apk环境配置 安装jdk 和安卓SDK 版本要足够高 打开unity 中edit目录下的 首选项 选择SDK和JDK路径 3 Ctrl shift B打开 build Settings选项框 点击选择并转换为Android平
  • Java JDBC 基础

    文章目录 快速入门 使用的步骤 JDBC api 数据库连接的方式 获取驱动的两种方式 获取链接的方式 通过写配置文件来获取链接 tips ResultSet结果集 PreparedStatement 编写JDBCUtils工具类 事务 批
  • 【单片机毕业设计】【mcuclub-308】紫外线消毒灯

    设计简介 项目名 基于单片机的紫外线消毒灯控制系统设计 标准版 基于单片机的室内消毒灯控制系统设计 标准版 基于单片机的智能消毒控制系统设计 标准版 单片机 STC89C52 功能简介 1 通过时钟模块获取当前的时间 并能实现掉电保存时间
  • python下的一些特殊属性(几个实例说明)

    python下的一些特殊属性 几个实例说明 实例1 python view plain copy coding UTF 8 class FirstDemo object 这里是一个doc a 10 类属性 def demo self 第一个
  • NTC热敏电阻温度计算方法,B值法

    1 概述 NTC热敏电阻随环境温度 T 升高 电阻值 会下降 反之 当温度 T 下降 电阻值 会上升 NTC热敏电阻的计算公式有Steinhart Hart方程和B值法两种方法 我只熟悉了B值法 常规NTC热敏电阻参数 温度为 R25 时
  • 一文带你读懂Git中的rebase与fast-forward

    在项目开发的过程中 git作为版本管理工具重要性不言而喻 平常大家肯定会使用merge命令来合并分支 然而merge来合并分支有个缺点 就是当分支太多 合并太多 那么提交记录的图谱看起来就非常丑 以上 而rebase就可以解决这个问题 下文
  • 微电网优化调度

    欢迎来到本博客 作者研究 主要研究方向是电力系统和智能算法 机器学习和深度学习 目前熟悉python网页爬虫 机器学习 群智能算法 深度学习的相关内容 希望将计算机和电网有效结合 本文目录如下 目录 0 摘要 1 引言 2 数学模型 3 算
  • C语言_函数指针

    回顾指针概念 int a b 0 int ip a int sp ip int ar 10 ip ar int par 10 ar int pbr 10 int sbr 10 pbr 需要定义一个指向一维整型数组的指针 才能指向pbr数组
  • 快速傅里叶变换FFT总结

    快速傅里叶变换 在竞赛中离散傅里叶变换DFT及其逆变换IDFT尤为常用 主要用于快速求多项式的乘积 形式化地说 多项式就是某个 f x i