音频进阶学习十一——离散傅里叶级数DFS

文章目录


前言

按照傅里叶发展的历史,最先出现的傅里叶公式是傅里叶级数,只不过由于通用性以及核心理论先介绍了DTFT,它描述的是一个连续的频谱,描述了信号在整个频率范围内的频率成分。

对于本章内容离散傅里叶级数DFS,它描述的是离散的频谱,频率成分在周期上重复,本文将深入解析DFS的公式,并对IDFS进行推导,最后会对DFS的性质结合图像进行介绍。

|版本声明:山河君,未经博主允许,禁止转载


一、傅里叶级数

1.定义

傅里叶级数简称为FS,是由法国数学家傅里叶为了进行热解析提出来的——周期信号表示为不同频率的正弦和余弦波的和。它能够将一个复杂的周期函数分解为一系列简单的正弦和余弦函数,从而实现信号的频域分析。

2.周期信号序列

离散周期序列指的是时间域上以固定周期重复出现的离散信号,使用 x ~ [ n ] \tilde{x}[n] x~[n]表示,即:
x ~ [ n ] = x ~ [ n + r T ] , r ∈ Z \tilde{x}[n]=\tilde{x}[n+rT],\quad r\in Z x~[n]=x~[n+rT],rZ
如下图, T = 10 T=10 T=10的周期序列
在这里插入图片描述

3.表达式

DFS

X ~ [ k ] = ∑ n = 0 N − 1 e j ( − 2 π k n N ) x ~ [ n ] \tilde{X}[k]=\sum_{n=0}^{N-1}e^{j(\frac{-2\pi kn}{N})}\tilde{x}[n] X~[k]=n=0N1ej(N2πkn)x~[n]

IDFS

x ~ [ n ] = 1 N ∑ k = 0 N − 1 e j ( 2 π k n N ) X ~ [ k ] \tilde{x}[n]=\frac{1}{N}\sum_{k=0}^{N-1}e^{j(\frac{2\pi kn}{N})}\tilde{X}[k] x~[n]=N1k=0N1ej(N2πkn)X~[k]

参数含义

  • ~:表示为周期序列
  • X ~ [ k ] \tilde{X}[k] X~[k]: 是信号在频域中的分量(傅里叶系数)
  • x ~ [ n ] \tilde{x}[n] x~[n]:是时间域中的周期离散信号
  • N N N:是序列周期
  • k k k:表示频率索引
  • e j ( − 2 π k n N ) e^{j(\frac{-2\pi kn}{N})} ej(N2πkn):复指数,表示信号的频率分量

4.DFS公式解析

1)右边解析

和上一篇解析DTFT一样,我们先解析DFS右边,在此之前,如果对于复指数序列和正交不太理解的同学,还是需要先看音频进阶学习九——离散时间傅里叶变换DTFT这篇文章,里面有对于为什么需要把序列转换成复指数序列的详细解释。
∑ n = 0 N − 1 e j ( − 2 π k n N ) x ~ [ n ] \sum_{n=0}^{N-1}e^{j(\frac{-2\pi kn}{N})}\tilde{x}[n] n=0N1ej(N2πkn)x~[n]

T T T f f f ω \omega ω的关系

我们来梳理一下周期、频率和角频率的关系

  • 频率:指的是某个周期性事件在单位时间内发生的次数, f = 1 T f=\frac{1}{T} f=T1
  • 周期:是一个周期性信号或事件完成一次完整波动所需的时间, T = 1 f T=\frac{1}{f} T=f1
  • 角频率:表示波动或振动的“速率”,即信号的变化速度, ω = 2 π f = 2 π T \omega = 2\pi f=\frac{2\pi}{T} ω=2πf=T2π
求和公式N的释义

上文中提到 N N N是序列周期,并且根据DFS公式也很容易看出来,对于序列的求和范围 n ∈ [ N − 1 ] n \in [N-1] n[N1],也就是序列的长度为 N N N

T T T f f f ω \omega ω的关系,我们得到 ω = 2 π f = 2 π T = 2 π N \omega = 2\pi f=\frac{2\pi}{T} = \frac{2\pi}{N} ω=2πf=T2π=N2π,也就是该周期序列的基波(一个波形的最低频率,是波形的基本振动频率)为 2 π N \frac{2\pi}{N} N2π

求和公式K的释义

对于DFS来说,一个周期序列分解为不同频率的正弦和余弦波的和,从上文中 N N N的作用我们首先得到了基波的频率,那么其他频率怎么来表示呢? 我们知道对于谐波是基频的整数倍频率,例如2倍频(第二谐波)、3倍频(第三谐波)等,而谐波和基波组成了周期序列。

对于 k k k代表了频率索引,即:
2 π N k , k ∈ [ 0 , 1 , 2 , . . . . , N − 1 ] \frac{2\pi}{N}k,k\in[0,1,2,....,N-1] N2πkk[0,1,2,....,N1]

  • k = 0 k=0 k=0时,表示的是直波
  • k = 1 k=1 k=1时,表示的是基波(第一谐波)
  • k = 2 k=2 k=2时,表示的是第二谐波
  • k = N / 2 k=N/2 k=N/2时,对应奈奎斯特频率(即采样定理)

此时我们得到了不同的 ω 0 , ω 1 , ω 2 , . . . , ω N − 1 \omega_0,\omega_1,\omega_2,...,\omega_N-1 ω0,ω1,ω2,...,ωN1,从这里也能看出,对于离散傅里叶级数,频域也是离散的。

e j ( − 2 π k n N ) e^{j(\frac{-2\pi kn}{N})} ej(N2πkn)的释义

其实在音频进阶学习九——离散时间傅里叶变换DTFT文章中已经解释过了,这里再简单解释一遍:

对于欧拉公式将极坐标表示为复指数形式:
e j θ = cos ⁡ ( θ ) + j sin ⁡ ( θ ) e^{j\theta}=\cos(\theta)+j\sin(\theta) ejθ=cos(θ)+jsin(θ)
由此可以得到
e − j ω n = > cos ⁡ ( j ω n ) − j s i n ( ω n ) e^{-j\omega n}=>\cos(j\omega n)-jsin(\omega n) ejωn=>cos(jωn)jsin(ωn)
它表示的是随着 n n n的增长,以频率 ω \omega ω在一个单位圆上以顺时针方式进行周期震荡,可以根据之前文章中的图片进行理解。

∑ n = 0 N − 1 e j ( − 2 π k n N ) x ~ [ n ] \sum_{n=0}^{N-1}e^{j(\frac{-2\pi kn}{N})}\tilde{x}[n] n=0N1ej(N2πkn)x~[n]的释义

而对于序列与复指数相乘,我们可以看作是序列 x ~ [ n ] \tilde{x}[n] x~[n]对于不同谐波上的正交,即求投影。根据欧拉公式的特性,我们可以看到公式
∑ n = 0 N − 1 e j ( ω m − ω l ) n \sum_{n=0}^{N-1}e^{j(\omega_m-\omega_l)n} n=0N1ej(ωmωl)n
ω m ≠ ω l \omega_m\neq \omega_l ωm=ωl时, e j ( ω m − ω l ) n e^{j(\omega_m-\omega_l)n} ej(ωmωl)n表示的是一个周期性复数,几何上表示在复平面上绕原点画圆,如同上文中对于 e − j ω n e^{-j\omega n} ejωn解释的图像,所以对于累加和 ∑ n = 0 N − 1 e j ( ω m − ω l ) n \sum_{n=0}^{N-1}e^{j(\omega_m-\omega_l)n} n=0N1ej(ωmωl)n为0。

也就是说对于 e j ( − 2 π k n N ) × x ~ [ n ] e^{j(\frac{-2\pi kn}{N})} \times \tilde{x}[n] ej(N2πkn)×x~[n],如果 x ~ [ n ] \tilde{x}[n] x~[n]中间不包含特定的 − 2 π k n N \frac{-2\pi kn}{N} N2πkn(当 N , k N,k N,k确定时)的频率,那么对于 ∑ n = 0 N − 1 e j ( − 2 π k n N ) x ~ [ n ] \sum_{n=0}^{N-1}e^{j(\frac{-2\pi kn}{N})}\tilde{x}[n] n=0N1ej(N2πkn)x~[n],求和为零。

2)左边解释

与DTFT相同,对于 X ~ [ k ] \tilde{X}[k] X~[k]同样包含了幅度与相位,这里也简单回顾一下之前的文章。

实部与虚部

我们知道对于欧拉公式:
e j θ = cos ⁡ ( θ ) + j sin ⁡ ( θ ) e^{j\theta}=\cos(\theta)+j\sin(\theta) ejθ=cos(θ)+jsin(θ)
它的实部表示了相位(两波之间的时间或空间偏移),虚部表示了幅度,对于DFS中:
X ~ [ k ] = ∑ n = 0 N − 1 e j ( − 2 π k n N ) x ~ [ n ] X ~ [ k ] = ∑ n = 0 N − 1 x ~ [ n ] cos ⁡ ( 2 π N k ) ⏟ R e ( X ~ [ k ] ) − ∑ n = 0 N − 1 j x ~ [ n ] sin ⁡ ( 2 π N k ) ⏟ I e ( X ~ [ k ] ) \tilde{X}[k]=\sum_{n=0}^{N-1}e^{j(\frac{-2\pi kn}{N})}\tilde{x}[n]\\ \tilde{X}[k]=\underbrace{\sum_{n=0}^{N-1}\tilde{x}[n]\cos(\frac{2\pi}{N}k)}_{Re(\tilde{X}[k])} - \underbrace{\sum_{n=0}^{N-1}j\tilde{x}[n]\sin(\frac{2\pi}{N}k)}_{Ie(\tilde{X}[k])} X~[k]=n=0N1ej(N2πkn)x~[n]X~[k]=Re(X~[k]) n=0N1x~[n]cos(N2πk)Ie(X~[k]) n=0N1jx~[n]sin(N2πk)

  • R e ( X ~ [ k ] ) Re(\tilde{X}[k]) Re(X~[k])是实部
  • I m ( X ~ [ k ] ) Im(\tilde{X}[k]) Im(X~[k])是虚部
幅度与相位
  • 幅度:幅度是频谱中每个频率分量的强度或大小,实部和虚部的模长,可以得出该频率分量的幅度。使用 ∣ X ~ [ k ] ∣ |\tilde{X}[k]| X~[k]表示信号在频率 ω \omega ω处的能量强度或振幅
    ∣ X ~ [ k ] ∣ = R e ( X ~ [ k ] ) 2 + I m ( X ~ [ k ] ) 2 |\tilde{X}[k]|=\sqrt{Re(\tilde{X}[k])^2+Im(\tilde{X}[k])^2} X~[k]=Re(X~[k])2+Im(X~[k])2
  • 相位:相位是频谱中每个频率分量相对于其他频率分量的相位偏移,通过实部和虚部的比值,可以计算相位。使用 arg ⁡ ( X ~ [ k ] ) 或 ∠ ( X ~ [ k ] ) \arg(\tilde{X}[k])或\angle(\tilde{X}[k]) arg(X~[k])(X~[k])表示:
    ∠ ( X ~ [ k ] ) = tan ⁡ − 1 I m ( X ~ [ k ] ) R e ( X ~ [ k ] ) \angle(\tilde{X}[k])=\tan^{-1}\frac{Im(\tilde{X}[k])}{Re(\tilde{X}[k])} (X~[k])=tan1Re(X~[k])Im(X~[k])

二、IDFS推导

离散傅里叶级数的逆公式(Inverse Discrete Fourier Series, IDFS)是将频域信息转换回时间域信号的过程。其推导过程是基于傅里叶变换的性质。其验证如下:

  • DFS
    X ~ [ k ] = ∑ m = 0 N − 1 e j ( − 2 π k n N ) x ~ [ m ] \tilde{X}[k]=\sum_{m=0}^{N-1}e^{j(\frac{-2\pi kn}{N})}\tilde{x}[m] X~[k]=m=0N1ej(N2πkn)x~[m]
  • IDFS
    x ~ [ n ] = 1 N ∑ k = 0 N − 1 e j ( 2 π k n N ) X ~ [ k ] \tilde{x}[n]=\frac{1}{N}\sum_{k=0}^{N-1}e^{j(\frac{2\pi kn}{N})}\tilde{X}[k] x~[n]=N1k=0N1ej(N2πkn)X~[k]
  • 将DFS代入IDFS
    x ~ [ n ] = 1 N ∑ k = 0 N − 1 ( ∑ m = 0 N − 1 e j ( − 2 π k n N ) x ~ [ m ] ) e j ( 2 π k n N ) \tilde{x}[n] =\frac{1}{N}\sum_{k=0}^{N-1}\Big(\sum_{m=0}^{N-1}e^{j(\frac{-2\pi kn}{N})}\tilde{x}[m]\Big)e^{j(\frac{2\pi kn}{N})} x~[n]=N1k=0N1(m=0N1ej(N2πkn)x~[m])ej(N2πkn)
  • 根据交换求和
    x ~ [ n ] = 1 N ∑ m = 0 N − 1 x ~ [ m ] ∑ k = 0 N − 1 e j 2 π k N ( n − m ) \tilde{x}[n] =\frac{1}{N}\sum_{m=0}^{N-1}\tilde{x}[m]\sum_{k=0}^{N-1}e^{j\frac{2\pi k}{N}(n-m)} x~[n]=N1m=0N1x~[m]k=0N1ejN2πk(nm)
  • 内层求和
    ∑ k = 0 N − 1 e j 2 π k N ( n − m ) = { N , n = m 0 , n ≠ m \sum_{k=0}^{N-1}e^{j\frac{2\pi k}{N}(n-m)}=\begin{cases} N, \quad n=m\\ 0,\quad n\neq m\end{cases} k=0N1ejN2πk(nm)={N,n=m0,n=m
  • 将内层求和替换进入
    x ~ [ n ] = 1 N ∑ m = 0 N − 1 x ~ [ m ] × N × δ n , m \tilde{x}[n]=\frac{1}{N}\sum_{m=0}^{N-1}\tilde{x}[m]\times N \times \delta_{n,m} x~[n]=N1m=0N1x~[m]×N×δn,m
  • 简化
    x ~ [ n ] = ∑ m = 0 N − 1 x ~ [ m ] δ ( n − m ) \tilde{x}[n]=\sum_{m=0}^{N-1}\tilde{x}[m]\delta(n-m) x~[n]=m=0N1x~[m]δ(nm)

于是我们有一次得到了冲激分解公式,使用单位冲激序列表示的加权和。

三、DFS的性质

由于DFS和DTFT的相似性,在上一篇文章中音频进阶学习十——DTFT的条件、性质与举例,已经对于各种性质做了详细介绍,并且其推导公式很简单(如果感兴趣推导过程,可以看看北京航空航天大学王俊老师的课程),这里只做简单介绍。

1. 周期性性质

  • 离散傅里叶级数的信号 x [ n ] x[n] x[n] 是周期性的,周期为 N N N
  • 其频域表示 X [ k ] X[k] X[k] 也是周期性的,周期为 N N N,即:
    X ~ [ k ] = X ~ [ k + N ] \tilde X[k]=\tilde X[k+N] X~[k]=X~[k+N]

2.线性性质

离散傅里叶级数具有线性性质,即如果信号 x 1 [ n ] x_1[n] x1[n] x 2 [ n ] x_2[n] x2[n] 的傅里叶系数分别是 X 1 [ k ] X_1[k] X1[k] X 2 [ k ] X_2[k] X2[k],那么任意常数倍的线性组合也满足傅里叶级数的线性性:
x ~ [ n ] = a x ~ 1 [ n ] + b x ~ 2 [ n ] ⟷ D F S X ~ [ k ] = a X ~ 1 [ k ] + b X ~ 2 [ k ] \tilde x[n]=a\tilde x_1[n]+b\tilde x_2[n]\stackrel{DFS}{\longleftrightarrow}\tilde X[k]=a\tilde X_1[k]+b\tilde X_2[k] x~[n]=ax~1[n]+bx~2[n]DFSX~[k]=aX~1[k]+bX~2[k]
在这里插入图片描述

3.时域移位

幅度频不变,相位成线性变化
x ~ [ n − n d ] ⟷ D F S X ~ [ k ] e − j 2 π k N n d \tilde x[n-n_d]\stackrel{DFS}{\longleftrightarrow}\tilde X[k]e^{-j\frac{2\pi k}{N}n_d} x~[nnd]DFSX~[k]ejN2πknd
在这里插入图片描述

4.频域移位

频域的移位相当于时域乘上一个复指数序列
x ~ [ n ] e − j 2 π k N l ⟷ D F S X ~ [ k − l ] \tilde x[n]e^{-j\frac{2\pi k}{N}l}\stackrel{DFS}{\longleftrightarrow}\tilde X[k-l] x~[n]ejN2πklDFSX~[kl]
在这里插入图片描述

5.时间翻转

时域翻转,频域也会相应翻转,即幅度和相位也会翻转
x ~ [ − n ] ⟷ D F S X ~ [ − k ] \tilde x[-n]\stackrel{DFS}{\longleftrightarrow}\tilde X[-k] x~[n]DFSX~[k]
在这里插入图片描述

6.时域卷积

时域卷积等于频域相乘,即 ∗ * 代表卷积运算
x ~ [ n ] ∗ h ~ [ n ] ⟷ D F S X ~ [ k ] × H ~ [ k ] \tilde x[n] *\tilde h[n]\stackrel{DFS}{\longleftrightarrow}\tilde X[k]\times \tilde H[k] x~[n]h~[n]DFSX~[k]×H~[k]
在这里插入图片描述

7.频域卷积

频域卷积等于时域相乘,即 ∗ * 代表卷积运算
x ~ [ n ] × w ~ [ n ] ⟷ D F S 1 N ∑ l = 0 N − 1 X ~ [ l ] ∗ W ~ [ k − l ] \tilde x[n] \times \tilde w[n]\stackrel{DFS}{\longleftrightarrow} \frac{1}{N}\sum_{l=0}^{N-1}\tilde X[l]*\tilde W[k-l] x~[n]×w~[n]DFSN1l=0N1X~[l]W~[kl]
在这里插入图片描述


总结

本篇文章中对于DFS的公式做了详细的介绍,相信对于DFS和IDFS公式的推导和使用有了一定的理解。同时本篇文章也将DFS的性质做了介绍。

DFS和DTFT有着一定的联系和区:对于DFS,它主要用于表示周期性离散时间信号,在频域上是离散的且为周期的,而对于DTFT,它表示非周期性离散时间信号的频谱,在频域上是连续的。也就是说DFS可以看作为 DTFT 在一个周期内的采样。

反正收藏也不会看,请帮忙点个赞吧!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【kafka系列】Topic 与 Partition

Kafka 的 Topic(主题) 和 Partition(分区) 是数据组织的核心概念,它们的映射关系及在 Broker 上的分布直接影响 Kafka 的性能、扩展性和容错能力。以下是详细解析: 一、Topic 与 Partition 的映射关系 Top…

卷积神经网络CNN如何处理语音信号

卷积神经网络(CNN)在处理语音数据时通常不直接处理原始的一维波形信号,而是处理经过预处理的二维语音特征图。以下是CNN处理语音数据时的常见数据类型和步骤: 1. 语音信号预处理 语音信号通常是一维的时间序列(波形信…

【MQ】Spring3 中 RabbitMQ 的使用与常见场景

一、初识 MQ 传统的单体架构,分布式架构的同步调用里,无论是方法调用,还是 OpenFeign 难免会有以下问题: 扩展性差(高耦合,需要依赖对应的服务,同样的事件,不断有新需求&#xff0…

GB/T 43698-2024 《网络安全技术 软件供应链安全要求》标准解读

一、43698-2024标准图解 https://mmbiz.qpic.cn/sz_mmbiz_png/rwcfRwCticvgeBPR8TWIPywUP8nGp4IMFwwrxAHMZ9Enfp3wibNxnfichT5zs7rh2FxTZWMxz0je9TZSqQ0lNZ7lQ/640?wx_fmtpng&fromappmsg 标准在线预览: 国家标准|GB/T 43698-2024 相关标准: &a…

Linux系统-centos防火墙firewalld详解

Linux系统-centos7.6 防火墙firewalld详解 1 firewalld了解 CentOS 7.6默认的防火墙管理工具是firewalld,它取代了之前的iptables防火墙。firewalld属于典型的包过滤防火墙或称之为网络层防火墙,与iptables一样,都是用来管理防火墙的工具&a…

Gitlab中如何进行仓库迁移

需求:之前有一个自己维护的新仓库A,现在需要将这个仓库提交并覆盖另一个旧的仓库B,需要保留A中所有的commit信息。 1.方法一:将原有仓库A导出后再导入到新的仓库B中 适用场景:新的仓库B是一个待建仓库,相当…

微信点餐系统小程序ssm+论文源码调试讲解

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的,在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值,吸引更多的访问者访问系统,以及让来访用户可以花费更多时间停留在系统上,则表明该系统设计得比较专…

01单片机上电后没有正常运行怎么办

单片机上电后没有运转, 首先要检查什么? 1、单片机供电是否正常? &电路焊接检查 如果连最基本的供电都没有,其它都是空谈啊!检查电路断路了没有?短路了没有?电源合适吗?有没有虚焊? 拿起万用表之前,预想一下测量哪里?供电电压应该是多少?对PCB上电压测量点要…

【Java基础】为什么不支持多重继承?方法重载和方法重写之间区别、Exception 和 Error 区别?

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:Java基础面经 📚本系列文章为个…

c++ haru生成pdf输出饼图

#define PI 3.14159265358979323846 // 绘制饼图的函数 void draw_pie_chart(HPDF_Doc pdf, HPDF_Page page, float *data, int data_count, float x, float y, float radius) { float total 0; int i; // 计算数据总和 for (i 0; i < data_count; i) { tot…

Linux 创建进程 fork()、vfork() 与进程管理

Linux 创建进程 fork、vfork、进程管理 一、Linux的0号、1号、2号进程二、Linux的进程标识三、fork() 函数1、基本概念2、函数特点3、用法以及应用场景&#xff08;1&#xff09;父子进程执行不同的代码&#xff08;2&#xff09;进程执行另一个程序 4、工作原理 四、vfork() 函…

【漫话机器学习系列】082.岭回归(或脊回归)中的α值(alpha in ridge regression)

岭回归&#xff08;Ridge Regression&#xff09;中的 α 值 岭回归&#xff08;Ridge Regression&#xff09;是一种 带有 L2​ 正则化 的线性回归方法&#xff0c;用于处理多重共线性&#xff08;Multicollinearity&#xff09;问题&#xff0c;提高模型的泛化能力。其中&am…

电脑重启后vscode快捷方式失效,找不到code.exe

今天打开电脑发现vscode的快捷方式失效了&#xff0c;提示code.exe被删除或移动。 解决方法 查看vscode安装目录&#xff0c;发现多了一个_文件夹&#xff0c;包括code.exe在内的其他文件都被移动到了这个文件夹下。 将里面内容都移动到microsoft vs code文件夹下&#xff0c…

[权限提升] Linux 提权 维持 — 系统错误配置提权 - Sudo 滥用提权

关注这个专栏的其他相关笔记&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01&#xff1a;Sudo 滥用提权原理 Sudo 是一个 Linux 系统管理命令&#xff0c;它允许系统管理员授予普通用户以指定身份执行指定命令的权限。该命令不仅减少了 Root 用户的登录时间和管理时…

激活函数篇 04 —— softmax函数

将模型的输出转换为概率分布&#xff0c;使得模型能够输出每个类别的概率值。 Softmax ( a i ) e a i ∑ j 1 n e a j \text{Softmax}(a_i)\frac{e^{a_i}}{\sum_{j1}^n e^{a_j}} Softmax(ai​)∑j1n​eaj​eai​​ 其中&#xff0c; a i a_i ai​ 是输入向量中的第 i i i 个…

【韩顺平linux】部分上课笔记整理

整理一下一些韩顺平老师上课时候的笔记 课程&#xff1a;【小白入门 通俗易懂】韩顺平 一周学会Linux linux环境&#xff1a;使用阿里云服务器 笔记参考 &#xff1a; [学习笔记]2021韩顺平一周学会Linux 一、自定义函数 基本语法 应用实例&#xff1a; 计算两个参数的和…

redis底层数据结构——简单动态字符串

文章目录 概述什么时候用C里面的字符串什么时候使用SDS使用场景 SDS定义SDS与C语言的字符串差异常数时间复杂度获取字符串长度杜绝缓冲区溢出减少修改字符串时带来的内存重分配次数1.空间预分配2.情性空间释放 二进制安全兼容部分C字符串函数总结 开始讲述动态字符串前我们先问…

使用 POI-TL 和 JFreeChart 动态生成 Word 报告

文章目录 前言一、需求背景二、方案分析三、 POI-TL JFreeChart 实现3.1 Maven 依赖3.3 word模板设置3.2 实现代码 踩坑 前言 在开发过程中&#xff0c;我们经常需要生成包含动态数据和图表的 Word 报告。本文将介绍如何结合 POI-TL 和 JFreeChart&#xff0c;实现动态生成 W…

VLLM历次会议(2024.1)

Azure官宣支持VLLM VLLM支持AMD芯片 支持Mixtral MoE&#xff0c;支持DeepSeek MoE 性能优化 &#xff08;以下4招&#xff0c;总共将吞吐量提升50%&#xff0c;延迟降低40%&#xff09; 1. PageAttention V2 &#xff08;同一个Q&#xff0c;和不同的KV的计算&#xff0c…

第一财经对话东土科技 | 探索工业科技新边界

当前以ChatGPT、Sora等为代表的生成式人工智能快速发展&#xff0c;越来越多面向垂直场景的行业大模型涌现出来&#xff0c;并成为推动制造业智能化改造与数字化转型、加快推进新型工业化&#xff0c;进而培育发展新质生产力的新引擎。 在垂类场景的应用落地&#xff0c;是AI发…