当前位置: 首页 > article >正文

音频进阶学习十六——LTI系统的差分方程与频域分析一(频率响应)

文章目录

  • 前言
  • 一、差分方程的有理式
    • 1.差分方程的有理分式
    • 2.因果系统和ROC
    • 3.稳定性与ROC
  • 二、频率响应
    • 1.定义
    • 2.幅频响应
    • 3.相频响应
    • 4.群延迟
  • 总结


前言

本篇文章会先复习Z变换的有理分式,这是之前文章中提过的内容,这里会将差分方程和有理分式进行结合来看。主要是通过有理分式进行对于冲激响应的表达,以及根据导函数对于频率响应的介绍。

本文会对Z变换的频率响应中的幅频响应、相频响应以及群延迟的表达式进行推导。

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


一、差分方程的有理式

1.差分方程的有理分式

在音频进阶学习十三——Z变换二(有理z变换、稳定性与反变换)中,其实已经对于差分方程进行有里分式的转换,对于差分方程:
y [ n ] = ∑ k = 1 N a k y [ n − k ] + ∑ i = 0 M b i x [ n − i ] y[n]= \sum_{k=1}^Na_ky[n-k] +\sum_{i = 0}^M b_ix[n-i] y[n]=k=1Naky[nk]+i=0Mbix[ni]
通过展开,然后对于Z变换的线性和时移性得到:
Y ( z ) − ( a 1 z − 1 Y ( z ) + . . . + a N z − N Y ( z ) ) = b 0 X ( z ) + b 1 z − 1 X ( z ) + . . . + b M z − M X ( z ) Y(z)-(a_1z^{-1}Y(z)+...+a_Nz^{-N}Y(z)) = b_0X(z)+b_1z^{-1}X(z)+...+b_Mz^{-M}X(z) Y(z)(a1z1Y(z)+...+aNzNY(z))=b0X(z)+b1z1X(z)+...+bMzMX(z)
使用有理分式表示为:

H ( z ) = Y ( z ) X ( z ) = b 0 + b 1 z − 1 + . . . + b M z − M 1 − ( a 1 z − 1 + . . . + a N z − N ) = ∑ k = 0 M b k z − k 1 − ∑ k = 1 N b k z − k H(z)=\frac{Y(z)}{X(z)}=\frac{b_0+b_1z^{-1}+...+b_Mz^{-M} }{1-(a_1z^{-1}+...+a_Nz^{-N})} = \frac{\sum_{k=0}^Mb_kz^{-k}}{1 -\sum_{k=1}^Nb_kz^{-k}} H(z)=X(z)Y(z)=1(a1z1+...+aNzN)b0+b1z1+...+bMzM=1k=1Nbkzkk=0Mbkzk

而对于满足松弛条件,也就是在 n < 0 , y [ n ] = 0 n<0,y[n]=0 n<0,y[n]=0时,是一个因果的LTI系统,对于LTI系统根据卷积定理又满足 Y ( z ) = X ( z ) H ( z ) Y(z)=X(z)H(z) Y(z)=X(z)H(z),所以这个导函数为有理分式中, H ( z ) H(z) H(z)是系统的单位冲激响应的Z变换,且 H ( z ) H(z) H(z)需要满足一定收敛

2.因果系统和ROC

对于因果系统,在音频进阶学习三——离散时间信号与系统中说过,是指是在任意时刻 n n n的输出仅仅依赖当前、或者之前时刻的输入,与以后的输入无关。并且在讲解LTI系统时,对于系统因果性判断的依据是 h [ n ] = 0 , n < 0 h[n] = 0, n<0 h[n]=0,n<0,则为因果系统。

在Z变换中,因果系统的必要性是需要满足ROC包含 ∣ z ∣ = + ∞ |z|=+\infty z=+,而充分性如果ROC包含 ∣ z ∣ = + ∞ |z|=+\infty z=+,那么该系统一定为因果系统,证明方法和音频进阶学习十三——Z变换二(有理z变换、稳定性与反变换)中相似

将单位冲激响应的Z变换单独拿出来
X ( z ) = ∑ n = − ∞ − 1 x [ n ] z − n + ∑ n = 0 + ∞ x [ n ] z − n X(z)=\sum_{n=-\infty}^{-1}x[n]z^{-n}+\sum_{n=0}^{+\infty}x[n]z^{-n} X(z)=n=1x[n]zn+n=0+x[n]zn

  • 必要性
    当系统为因果系统时,只需要关注 X ( z ) = ∑ n = 0 + ∞ x [ n ] z − n X(z)=\sum_{n=0}^{+\infty}x[n]z^{-n} X(z)=n=0+x[n]zn,此时满足收敛就要求 ∑ n = 0 + ∞ ∣ x [ n ] ∣ ∣ z ∣ − n < ∞ \sum_{n=0}^{+\infty}|x[n]||z|^{-n} < \infty n=0+x[n]∣∣zn<,即当 ∣ Z ∣ > R |Z|>R Z>R也就是某个圆外部分,所以ROC包含 ∣ z ∣ = + ∞ |z|=+\infty z=+
  • 充分性
    n → − ∞ , − n → + ∞ n\rightarrow -\infty, -n \rightarrow +\infty n,n+,此时对于 ∑ n = − ∞ − 1 x [ n ] z − n \sum_{n=-\infty}^{-1}x[n]z^{-n} n=1x[n]zn部分, x [ n ] x[n] x[n]求和趋于无穷大,那么 z − n z^{-n} zn需要区域无穷小才满足ROC收敛,那么 ∣ z ∣ < 1 |z|<1 z<1和条件 ∣ z ∣ = + ∞ |z|=+\infty z=+不符合,所以当 ∣ z ∣ = + ∞ |z|=+\infty z=+时,不存在左边部分,系统也一定为因果系统。

3.稳定性与ROC

对于LTI系统如果一定稳定,那么 h [ n ] h[n] h[n]一定满足绝对可和,而对于
H ( z ) = ∑ n = − ∞ + ∞ h [ n ] z − n H(z)=\sum_{n=-\infty}^{+\infty}h[n]z^{-n} H(z)=n=+h[n]zn

  • 稳定性的必要条件:当 ∑ n = − ∞ + ∞ ∣ h [ n ] ∣ < ∞ \sum_{n=-\infty}^{+\infty}|h[n]|<\infty n=+h[n]<时,系统稳定的必要条件是ROC一定包含单位圆,当 ∣ z ∣ = 1 |z|=1 z=1时,相当于一定稳定
  • 稳定性的充分条件:当系统为因果系统,那么 H ( z ) H(z) H(z)也一定是绝对可和的,即 ∣ z ∣ = + ∞ |z|=+\infty z=+,因为需要该系统稳定,所以一定要包含单位圆,此时所有的极点应该在单位圆内

二、频率响应

1.定义

在上一篇文章中介绍过对于频率响应是指单位冲激响应在频域上的特征,对于卷积公式使用的是DTFT进行的分析,而对于差分方程,使用的是Z变换的方式对于单位冲激响应在频域上的特征。

而对于LTI系统,上文中给出了传递函数,也就是有理分式表达的单位冲激响应Z变换,根据音频进阶学习十三——Z变换二(有理z变换、稳定性与反变换)中对于有理分式的分析,我们可以把累加变成累积的形式:
H ( z ) = ∑ k = 0 M b k z − k ∑ k = 0 N a k z − k = ∏ m = 1 M ( 1 − c m z − 1 ) ∏ n = 1 N ( 1 − d n z − 1 ) H(z)=\frac{\sum_{k=0}^Mb_kz^{-k}}{\sum_{k=0}^Na_kz^{-k}}=\frac{\prod_{m=1}^M(1-c_mz^{-1})}{\prod_{n=1}^N(1-d_nz^{-1})} H(z)=k=0Nakzkk=0Mbkzk=n=1N(1dnz1)m=1M(1cmz1)

  • c m c_m cm:是频率响应的零点,存在 M M M
  • d n d_n dn:是频率响应的极点,存在 N N N

由于使用连乘形式对于频率响应分析比较方便,下文中使用的是连乘的方式来进行表示,同时以 z = e j ω z=e^{j\omega} z=e为单位圆方便分析。即:

对于Z变换中 H ( z ) = H ( e j ω ) ∣ z = e j ω H(z)=H(e^{j\omega})|_{z=e^{j\omega}} H(z)=H(e)z=e,也就是 z = e j ω z=e^{j\omega} z=e为单位圆时,有:
H ( e j ω ) = ∑ k = 0 M b k e j ω ∑ k = 0 N a k e j ω = b 0 a 0 ∏ m = 1 M ( 1 − c m e j ω ) ∏ n = 1 N ( 1 − d n e j ω ) H(e^{j\omega})=\frac{\sum_{k=0}^Mb_ke^{j\omega}}{\sum_{k=0}^Na_ke^{j\omega}}=\frac{b_0}{a_0}\frac{\prod_{m=1}^M(1-c_me^{j\omega})}{\prod_{n=1}^N(1-d_ne^{j\omega})} H(e)=k=0Nakek=0Mbke=a0b0n=1N(1dne)m=1M(1cme)

2.幅频响应

和DTFT一样,对于幅频响应一样是计算Z变换的模,对于模长的求解应该还记得吧,就是虚部和实部的平方求根,具体可看音频进阶学习九——离散时间傅里叶变换DTFT中对于实部和虚部的介绍,而对于Z变换的模,就是分子和分母的幅频相除
∣ H ( e j ω ) ∣ = b 0 a 0 ∏ m = 1 M ∣ ( 1 − c k e j ω ) ∣ ∏ n = 1 N ∣ ( 1 − d k e j ω ) ∣ |H(e^{j\omega})|=\frac{b_0}{a_0}\frac{\prod_{m=1}^M|(1-c_ke^{j\omega})|}{\prod_{n=1}^N|(1-d_ke^{j\omega})|} H(e)=a0b0n=1N(1dke)m=1M(1cke)
为了方便分析,对于Z变换中幅频响应一般是看模平方,也就是:
∣ H ( e j ω ) ∣ 2 = H ( e j ω ) × H ∗ ( e j ω ) |H(e^{j\omega})|^2=H(e^{j\omega})\times H^*(e^{j\omega}) H(e)2=H(e)×H(e)
代入进去,分子和分母也用共轭表示为:
∣ H ( e j ω ) ∣ 2 = ( b 0 a 0 ) 2 ∏ m = 1 M ( 1 − c k e j ω ) ( 1 − c k ∗ e j ω ) ∏ n = 1 N ( 1 − d k e j ω ) ( 1 − d k ∗ e j ω ) |H(e^{j\omega})|^2=\Big(\frac{b_0}{a_0}\Big)^2\frac{\prod_{m=1}^M(1-c_ke^{j\omega})(1-c_k^*e^{j\omega})}{\prod_{n=1}^N(1-d_ke^{j\omega})(1-d_k^*e^{j\omega})} H(e)2=(a0b0)2n=1N(1dke)(1dke)m=1M(1cke)(1cke)
如果使用对数,表示为:
20 log ⁡ 10 ∣ H ( e j ω ) ∣ = 20 log ⁡ 10 ( b 0 a 0 ) + ∑ k = 1 M 20 log ⁡ 10 ( 1 − c k e j ω ) − ∑ k = 1 N 20 log ⁡ 10 ( 1 − d k e j ω ) 20\log_{10}|H(e^{j\omega})|=20\log_{10}\Big(\frac{b_0}{a_0}\Big)+\sum_{k=1}^M20\log_{10}(1-c_ke^{j\omega})-\sum_{k=1}^N20\log_{10}(1-d_ke^{j\omega}) 20log10H(e)=20log10(a0b0)+k=1M20log10(1cke)k=1N20log10(1dke)

  • c k c_k ck:是频率响应的零点,存在 M M M
  • d k d_k dk:是频率响应的极点,存在 N N N

3.相频响应

对于上文中的 H ( e j ω ) H(e^{j\omega}) H(e)
H ( e j ω ) = ∑ k = 0 M b k e j ω ∑ k = 0 N a k e j ω = B ( e j ω ) A ( e j ω ) H(e^{j\omega})=\frac{\sum_{k=0}^Mb_ke^{j\omega}}{\sum_{k=0}^Na_ke^{j\omega}}=\frac{B(e^{j\omega})}{A(e^{j\omega})} H(e)=k=0Nakek=0Mbke=A(e)B(e)
而对于 H ( e j ω ) H(e^{j\omega}) H(e)的实部和虚部分别为

  • H R e ( e j ω ) = R e ( B ( e j ω ) ) R e ( A ( e j ω ) ) + I m ( B ( e j ω ) ) I m ( A ( e j ω ) ) R e ( A ( e j ω ) ) 2 + I m ( B ( e j ω ) 2 H_{Re}(e^{j\omega}) = \frac{Re(B(e^{j\omega}))Re(A(e^{j\omega}))+Im(B(e^{j\omega}))Im(A(e^{j\omega}))}{Re(A(e^{j\omega}))^2+Im(B(e^{j\omega})^2} HRe(e)=Re(A(e))2+Im(B(e)2Re(B(e))Re(A(e))+Im(B(e))Im(A(e))
  • H I e ( e j ω ) = I m ( B ( e j ω ) ) R e ( A ( e j ω ) ) − R e ( B ( e j ω ) ) I m ( A ( e j ω ) ) R e ( A ( e j ω ) ) 2 + I m ( B ( e j ω ) 2 H_{Ie}(e^{j\omega}) = \frac{Im(B(e^{j\omega}))Re(A(e^{j\omega}))-Re(B(e^{j\omega}))Im(A(e^{j\omega}))}{Re(A(e^{j\omega}))^2+Im(B(e^{j\omega})^2} HIe(e)=Re(A(e))2+Im(B(e)2Im(B(e))Re(A(e))Re(B(e))Im(A(e))

而对于相频响应有:
∠ H ( e j ω ) = tan ⁡ − 1 H I m ( e j ω ) H R e ( e j ω ) = ∠ H I m ( e j ω ) + ∠ H R e ( e j ω ) \angle H(e^{j\omega})=\tan^{-1}\frac{H_{Im}(e^{j\omega})}{H_{Re}(e^{j\omega})}=\angle{H_{Im}(e^{j\omega})}+\angle{H_{Re}(e^{j\omega})} H(e)=tan1HRe(e)HIm(e)=HIm(e)+HRe(e)
但是这里值得注意的是,对于DTFT,如果满足则一定收敛,而我们在分析相位响应时,默认周期是在 [ − π , π ] [-\pi,\pi] [π,π]之间。

而对于Z变换,当 r = 1 r=1 r=1时,Z变换和DTFT一样,但是由于 z z z存在系统稳定性、极点和零点的问题,会在整个复平面上的变换,相位也会随着复平面中 z z z的变化而连续变化。

我们对于相位响应的分析是为了相位的变化率,此时就存在一个相位卷绕的问题:当相位从 π \pi π − π -\pi π时,会出现相位跳跃,下一篇文章会有图片直观看到。此时则需要区分:

  • 主值相位:描述的相位变换在 [ − π , π ] [-\pi,\pi] [π,π]之间,对于DTFT而言,它意味着相位不连续,但这种不连续性在离散时间信号处理中并不会影响信号的分析。
  • 连续相位:相位变换在 θ + 2 k π \theta + 2k\pi θ+2,其中 k k k为整数,为了保证保持相位的平滑变化Z变换需要考虑连续相位

综上对于Z变换它的相位响应使用 A R G ARG ARG表示为主值响应,使用 a r g arg arg表示为连续相位响应

  • 主值相频响应:
    A R G [ H ( e j ω ) ] ∈ [ − π , π ] = tan ⁡ − 1 H I m ( e j ω ) H R e ( e j ω ) ARG[H(e^{j\omega})]\in[-\pi, \pi]=\tan^{-1}\frac{H_{Im}(e^{j\omega})}{H_{Re}(e^{j\omega})} ARG[H(e)][π,π]=tan1HRe(e)HIm(e)
  • 连续相位响应:
    a r g [ H ( e j ω ) ] = A R G [ H ( e j ω ) ] + 2 π r arg[H(e^{j\omega})] = ARG[H(e^{j\omega})]+2\pi r arg[H(e)]=ARG[H(e)]+2πr

根据上文可知,对于相频响应将有理式进行展开,分别将实部和虚部进行归纳转换(复数相位的性质,分子和分母相位之差即为整体相位响应),最终可以表示为

  • 主值相频响应:
    ∠ ∣ H ( e j ω ) ∣ = ∠ [ b 0 a 0 ] + ∠ ∑ k = 1 M [ 1 − c k e j ω ] − ∠ ∑ k = 1 N [ 1 − d k e j ω ] \angle|H(e^{j\omega})|=\angle\Big[\frac{b_0}{a_0}\Big]+\angle\sum_{k=1}^M[1-c_ke^{j\omega}]-\angle\sum_{k=1}^N[1-d_ke^{j\omega}] ∠∣H(e)=[a0b0]+k=1M[1cke]k=1N[1dke]
  • 连续相频响应:
    ∠ ∣ H ( e j ω ) ∣ = A R G [ b 0 a 0 ] + A R G ∑ k = 1 M [ 1 − c k e j ω ] − A R G ∑ k = 1 N [ 1 − d k e j ω ] + 2 π r \angle|H(e^{j\omega})|=ARG\Big[\frac{b_0}{a_0}\Big]+ARG\sum_{k=1}^M[1-c_ke^{j\omega}]-ARG\sum_{k=1}^N[1-d_ke^{j\omega}]+2\pi r ∠∣H(e)=ARG[a0b0]+ARGk=1M[1cke]ARGk=1N[1dke]+2πr

4.群延迟

由上文一样可以知道群延迟(信号不同频率分量通过系统的延迟)就是求相位响应的导数,下式为连续相位响应的群延迟:
g r d [ H ( e j ω ] = − d d w a r g [ H ( e j ω ) ] = > − ∑ k = 1 M d d ω ( arg ⁡ [ 1 − c k e j ω ] ) + ∑ k = 1 N d d ω ( arg ⁡ [ 1 − d k e j ω ] ) grd[H(e^{j\omega}]=-\frac{d}{dw}arg[H(e^{j\omega})]=>-\sum_{k=1}^M\frac{d}{d\omega}(\arg[1-c_ke^{j\omega}])+\sum_{k=1}^N\frac{d}{d\omega}(\arg[1-d_ke^{j\omega}]) grd[H(e]=dwdarg[H(e)]=>k=1Mdωd(arg[1cke])+k=1Ndωd(arg[1dke])
负值的原因是因为相位和频率之间的反向关系。

对于主值相位响应群延迟和连续相位响应群延迟可以使用下图表示:
在这里插入图片描述
可以看到对于不同的 r r r,主值相位响应式跳跃的,而连续相位响应式连续的。


总结

由于受到篇幅的原因,本篇文章只是对Z变换的频率响应中的幅频响应、相频响应以及群延迟进行了推导。但是在本篇文章中,反复提及了Z变换中的零点与极点,那么极点和零点到底有什么作用,会对于系统带来什么影响,这会在下一篇文章中进行介绍。

反正收藏也不会看,不如点个赞吧

相关文章:

音频进阶学习十六——LTI系统的差分方程与频域分析一(频率响应)

文章目录 前言一、差分方程的有理式1.差分方程的有理分式2.因果系统和ROC3.稳定性与ROC 二、频率响应1.定义2.幅频响应3.相频响应4.群延迟 总结 前言 本篇文章会先复习Z变换的有理分式&#xff0c;这是之前文章中提过的内容&#xff0c;这里会将差分方程和有理分式进行结合来看…...

JavaWeb-ServletContext应用域接口

文章目录 ServletContext接口简介获取一个ServletContext对象ServletContext接口中的相关方法获取应用域配置参数关于应用域参数的配置要求getContextPath获取项目路径getRealPath获取真实路径log系列方法添加相关日志增删查应用域属性 ServletContext接口简介 ServletContext…...

为什么@Autowired 在属性上被警告,在 setter 方法上不被警告

在 Spring 开发中&#xff0c;Autowired 注解常用于实现依赖注入。它可以应用于类的 属性、构造器 或 setter 方法 上。然而&#xff0c;当 Autowired 注解在 属性 上使用时&#xff0c;IntelliJ IDEA 等 IDE 会给出 Field injection is not recommended 的警告&#xff0c;而在…...

SQL命令详解之操作数据表

​​​​​ 操作数据表 操作数据表是数据库管理系统中用于存储、管理和操作数据的核心结构。数据表通常由行和列组成&#xff0c;每一列代表一种数据类型&#xff08;例如&#xff0c;整数、字符、日期等&#xff09;&#xff0c;而每一行代表一条记录&#xff08;即数据项&a…...

Linux 下使用tracepath进行网络诊断分析

简介 tracepath 命令是 Linux 中的一个网络诊断工具&#xff0c;类似于 traceroute &#xff0c;但专门用于跟踪到目标主机的网络路径&#xff0c;同时自动处理路径MTU发现。这是一种简单的方法&#xff0c;可以找出机器和远程目的地之间的跃点&#xff0c;同时还可以识别沿途…...

四、表关系与复杂查询

一、表关系设计与约束 1. 表关系类型与实现 关系类型实现方式示例场景一对一共享主键 或 外键唯一约束用户 ↔ 用户详细信息一对多外键约束部门 ↔ 员工多对多中间表 联合主键学生 ↔ 课程 2. 核心约束类型 -- 完整表创建示例&#xff08;含约束&#xff09; CREATE TABLE…...

Qt 中,**信号与槽(Signals Slots)机制

在 Qt 中&#xff0c;信号与槽&#xff08;Signals & Slots&#xff09;机制 是实现对象间通信的核心模式&#xff0c;通常也被视为一种高效的“通知者模式”。它允许对象在特定事件发生时通知其他对象&#xff0c;且完全解耦。 核心概念 信号&#xff08;Signal&#xff0…...

Javaweb后端数据库多表关系一对多,外键,一对一

多表关系 一对多 多的表里&#xff0c;要有一表里的主键 外键 多的表上&#xff0c;添加外键 一对一 多对多 案例...

使用Apache Lucene构建高效的全文搜索服务

使用Apache Lucene构建高效的全文搜索服务 在现代应用程序中&#xff0c;全文搜索功能是不可或缺的一部分。无论是电子商务网站、内容管理系统&#xff0c;还是数据分析平台&#xff0c;快速、准确地搜索大量数据是提升用户体验的关键。Apache Lucene 是一个强大的全文搜索引擎…...

VScode在Windows11中配置MSVC

因为MSVC编译器在vs当中&#xff0c;所以我们首先要安装vs的一部分组件。如果只是需要MSVC的话&#xff0c;工作负荷一个都不需要勾选&#xff0c;在单个组件里面搜索MSVC和windows11 SDK&#xff0c;其中一个是编译器&#xff0c;一个是头文件然后右下角安装即可。搜索Develop…...

【洛谷贪心算法题】P2240部分背包问题

【解题思路】 贪心策略选择 对于部分背包问题&#xff0c;关键在于如何选择物品放入背包以达到最大价值。由于物品可以分割&#xff0c;遍历排序后的物品数组&#xff0c;根据物品重量和背包剩余容量的关系&#xff0c;决定是将整个物品放入背包还是分割物品放入背包&#xff…...

DevOps原理和实现面试题及参考答案

解释 DevOps 的核心目标与文化价值观,如何理解 “CAMS” 模型? DevOps 的核心目标是打破开发(Development)和运维(Operations)之间的壁垒,通过自动化、协作和持续反馈,实现软件的快速、可靠交付,以更好地满足业务需求和客户期望。具体来说,DevOps 旨在缩短软件的交付…...

《Somewhat Practical Fully Homomorphic Encryption》笔记 (BFV 源于这篇文章)

文章目录 一、摘要二、引言1、FHE 一般分为三个逻辑部分2、噪声的管理3. 贡献点4. 文章思路 三、基础数学知识四、基于 RLWE 的加密1. LWE 问题2. RLWE 问题3. RLWE 问题的难度和安全性 五、加密方案1. LPR.ES 加密方案2. Lemma 1 (引理 1)3. Optimisation/Assumption 1 (优化/…...

SpringBoot 2 后端通用开发模板搭建(异常处理,请求响应)

目录 一、环境准备 二、新建项目 三、整合依赖 1、MyBatis Plus 数据库操作 2、Hutool 工具库 3、Knife4j 接口文档 4、其他依赖 四、通用基础代码 1、自定义异常 2、响应包装类 3、全局异常处理器 4、请求包装类 5、全局跨域配置 补充&#xff1a;设置新建类/接…...

DeepSeek本地部署与Dify结合创建私有知识库指南

python调用本地deepseek+Dify的API使用--测试WX自动发送信息-CSDN博客 DeepSeek,一家在人工智能领域具有显著技术实力的公司,凭借其千亿参数规模的AI大模型,以及仅需0.5元人民币即可进行百万tokens的API调用成本,已经取得了令人瞩目的成就。不仅如此,DeepSeek的模…...

Nginx 报错:413 Request Entity Too Large

做web开发时&#xff0c;对于上传附件的功能&#xff0c;如果nginx没有调整配置&#xff0c;上传大一点的文件就会发生下面这种错误&#xff1a; 要解决上面的问题&#xff0c;只需要调整Nginx配置文件中的 client_max_body_size 参数即可&#xff0c;这个配置参数一般在http配…...

Arduino项目实战:使用MQ-2气体传感器与OLED屏幕监测环境气体

概述 在这个项目中,MQ-2气体传感器是一个多功能的气体检测设备,能够感知多种常见气体,如甲烷、丁烷、丙烷、酒精和烟雾等。你可以把它想象成一个超级灵敏的“嗅觉”,能够帮助你实时检测环境中的各种有害气体。与Arduino板连接后,MQ-2传感器把捕捉到的气体浓度数据传送给A…...

泛微Ecode新增Button调用服务器中的JSP页面里的方法

前言 前端Ecode调用 后端接口编写 JSP文件方法 总结 前言 因为我们是从之前E8版本升级到E9的&#xff0c;所以会有一些接口是通过jsp文件来实现前后端调用的&#xff0c;这里介绍的就是如果你有接口是写在jsp文件里面调用的&#xff0c;但是你又想在Ecode中调用的对应的接…...

C#实现本地Deepseek模型及其他模型的对话

前言 1、C#实现本地AI聊天功能 WPFOllamaSharpe实现本地聊天功能,可以选择使用Deepseek 及其他模型。 2、此程序默认你已经安装好了Ollama。 在运行前需要线安装好Ollama,如何安装请自行搜索 Ollama下载地址&#xff1a; https://ollama.org.cn Ollama模型下载地址&#xf…...

【ESP32S3接入讯飞在线语音识别】

视频地址: 【ESP32S3接入讯飞在线语音识别】 1. 前言 使用Seeed XIAO ESP32S3 Sense开发板接入讯飞实现在线语音识别。自带麦克风模块用做语音输入,通过串口发送字符“1”来控制数据的采集和上传。 语音识别对比 平台api教程评分百度...

【51单片机】快速入门

动手实践 > 理论空谈&#xff01;从点亮LED开始&#xff0c;逐步扩展功能&#xff0c;2周可入门基础。 一、51单片机基础概念 什么是51单片机&#xff1f; 基于Intel 8051架构的8位微控制器&#xff0c;广泛用于嵌入式开发。 核心特性&#xff1a;4KB ROM、128B RAM、32个…...

leetcode707----设计链表【链表增删改打印等操作】

目录 一、题目介绍 二、单链表 2.1 创建链表类 2.1.1 定义链表节点结构体代码块 2.1.2 MyLinkedList类的构造函数 2.1.3 私有成员变量 2.2 接口1&#xff1a;获取第下标为index的节点的值 2.3 接口2&#xff1a;头部插入节点 2.4 接口3&#xff1a;尾部插入节点 2.5 接…...

【问题记录】Go项目Docker中的consul访问主机8080端口被拒绝

【问题记录】Go项目Docker中的consul访问主机8080端口被拒绝 问题展示解决办法 问题展示 在使用docker中的consul服务的时候&#xff0c;通过命令行注册相应的服务&#xff08;比如cloudwego项目的demo_proto以及user服务&#xff09;失败。 解决办法 经过分析&#xff0c;是…...

【缓存】缓存雪崩与缓存穿透:高并发系统的隐形杀手

缓存雪崩与缓存穿透&#xff1a;高并发系统的隐形杀手 在高并发系统中&#xff0c;缓存是提升性能的重要手段。然而&#xff0c;缓存使用不当也会带来一系列问题&#xff0c;其中最常见的就是缓存雪崩和缓存穿透。这两个问题如果不加以解决&#xff0c;可能会导致系统崩溃&…...

网络协议 HTTP、HTTPS、HTTP/1.1、HTTP/2 对比分析

1. 基本定义 HTTP&#xff08;HyperText Transfer Protocol&#xff09; 应用层协议&#xff0c;用于客户端与服务器之间的数据传输&#xff08;默认端口 80&#xff09;。 HTTP/1.0&#xff1a;早期版本&#xff0c;每个请求需单独建立 TCP 连接&#xff0c;效率低。HTTP/1.1&…...

DeepSeek实现FunctionCalling调用API查询天气

什么是FunctionCalling Function Calling&#xff08;函数调用&#xff09;是大型语言模型&#xff08;如 OpenAI 的 GPT 系列&#xff09;提供的一种能力&#xff0c;允许模型在生成文本的过程中调用外部函数或工具&#xff0c;以完成更复杂的任务。通过 Function Calling&am…...

从 Spring Boot 2 升级到 Spring Boot 3 的终极指南

一、升级前的核心准备 1. JDK 版本升级 Spring Boot 3 强制要求 Java 17 及以上版本。若当前项目使用 Java 8 或 11&#xff0c;需按以下步骤操作&#xff1a; 安装 JDK 17&#xff1a;从 Oracle 或 OpenJDK 官网下载&#xff0c;配置环境变量&#xff08;如 JAVA_HOME&…...

C#设计模式深度解析:经典实现与现代演进 ——基于《设计模式》的.NET技术实践

一、设计模式与C#语言特性融合 C#凭借其面向对象特性、泛型、委托/事件、LINQ等能力&#xff0c;为设计模式提供了更优雅的实现方式。以下通过典型模式展现其技术融合&#xff1a; 1. 工厂方法模式 泛型约束 public interface IProduct<T> where T : new() {void O…...

原子性(Atomicity)和一致性(Consistency)的区别?

原子性&#xff08;Atomicity&#xff09;和一致性&#xff08;Consistency&#xff09;是数据库事务ACID特性中的两个核心概念&#xff0c;虽然它们密切相关&#xff0c;但解决的问题和侧重点完全不同。原子性关注事务的操作完整性&#xff0c;而一致性关注数据的逻辑正确性。…...

windows设置暂停更新时长

windows设置暂停更新时长 win11与win10修改注册表操作一致 &#xff0c;系统界面不同 1.打开注册表 2.在以下路径 \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 右键新建 DWORD 32位值&#xff0c;名称为FlightSettingsMaxPauseDays 根据需求填写数…...