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

音频进阶学习十六——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;这里会将差分方程和有理分式进行结合来看…...

css实现左右切换平滑效果

2025.02.25今天我学习了如何用css实现平滑效果 一、html相关代码 &#xff08;1&#xff09;设置往左、往右的动画属性&#xff0c;样式可以放在同一级。 &#xff08;2&#xff09;必须设置唯一key进行刷新数据&#xff0c;使用v-show来展示每次渲染的组件数量。 <tran…...

详解Tomcat下载安装以及IDEA配置Tomcat(2023最新)

目录 步骤一&#xff1a;首先确认自己是否已经安装JDK步骤二&#xff1a;下载安装Tomcat步骤三&#xff1a;Tomcat配置环境变量步骤四&#xff1a;验证Tomcat配置是否成功步骤五&#xff1a;为IDEA配置Tomcat 步骤一&#xff1a;首先确认自己是否已经安装JDK jdk各版本通用安…...

Docker快速使用指南

docker pull ubuntu:22.04 //先拉取一个基础镜像&#xff0c;一般是操作系统创建一个Dockerfile&#xff0c;放在任意目录下&#xff0c;内容如下 # 使用 Ubuntu 22.04 作为基础镜像 FROM ubuntu:22.04# 设置环境变量&#xff0c;避免安装过程中出现交互提示 ENV DEBIAN_FRONT…...

【Project】基于Prometheus监控docker平台

一、设计背景 1.1项目简介 本项目旨在创建一个全面的容器化应用程序监控解决方案&#xff0c;基于Prometheus监控Docker平台上的各种服务。在当今的软件开发环境中&#xff0c;容器化技术已成为一种关键的工具&#xff0c;使应用程序能够更快速、可靠地交付和扩展。然而&…...

Binder通信协议

目录 一,整体架构 二,Binder通信协议 三&#xff0c;binder驱动返回协议 四&#xff0c;请求binder驱动协议 一,整体架构 二,Binder通信协议 三&#xff0c;binder驱动返回协议 binder_driver_return_protocol共包含18个命令&#xff0c;分别是&#xff1a; 四&#xff0c…...

使用 Postman 访问 Keycloak 端点

1. 引言 在本教程中&#xff0c;我们将首先快速回顾 OAuth 2.0、OpenID 和 Keycloak。然后&#xff0c;我们将了解 Keycloak REST API 以及如何在 Postman 中调用它们。 2. OAuth 2.0 OAuth 2.0 是一个授权框架&#xff0c;它允许经过身份验证的用户通过令牌向第三方授予访问…...

uniapp-X 对象动态取值

有个对象&#xff0c;例如 const data{age:12,list:[1,2,3,4]} 有个函数如下 export function getValueByPath(obj:UTSJSONObject, path:string):any {const current obj.getAny(path) as any;// 返回最终的值return current; } 期待 通过执行getValueByPath("xx.xx…...

建模软件Blender与Blender GIS插件安装教程

Blender&#xff08;blender.org - Home of the Blender project - Free and Open 3D Creation Software&#xff09;是一款功能强大的开源3D创作套件&#xff0c;它支持整个3D管道—建模、渲染、动画制作、模拟、渲染、合成和运动跟踪&#xff0c;甚至视频编辑和游戏制作&…...

数据解析与处理

数据解析与处理是数据科学、分析或开发中的核心步骤&#xff0c;涉及从原始数据中提取、清洗、转换和存储有效信息的过程。 一、数据解析 数据解析就是将原始数据&#xff08;如文本、二进制、日志、API响应等&#xff09;转换为结构化格式&#xff08;如表格、字典、JSON等&…...

强化学习概览

强化学习的目标 智能体&#xff08;Agent&#xff09;通过与环境&#xff08;Environment&#xff09;交互&#xff0c;学习最大化累积奖励&#xff08;Cumulative Reward&#xff09;​的策略。 数学抽象 马尔科夫决策过程&#xff08;MDP&#xff09; 收益 由于马尔科夫决…...

如何在netlify一键部署静态网站

1. 准备你的项目 确保你的静态网站文件&#xff08;如 HTML、CSS、JavaScript、图片等&#xff09;都在一个文件夹中。通常&#xff0c;项目结构如下&#xff1a; my-static-site/ ├── index.html ├── styles/ │ └── styles.css └── scripts/└── script.js…...

2024中国信通院“集智”蓝皮书合集(附下载)

【目 录】 1. 数字政府一体化建设蓝皮书&#xff08;2024年&#xff09; 2. 数字乡村发展实践蓝皮书&#xff08;2023年&#xff09; 3. 中国工业互联网发展成效评估报告&#xff08;2024年&#xff09; 4. 云计算蓝皮书&#xff08;2024年&#xff09; 5. 具身智能发展报告…...

springboot单机支持1w并发,需要做哪些优化

Spring Boot单机如何支持1万并发&#xff0c;需要做哪些优化。 首先&#xff0c;我得回想一下Spring Boot处理高并发的关键点在哪里。可能涉及到多个层面&#xff0c;比如Web服务器配置、数据库优化、代码层面的调整&#xff0c;还有JVM调优之类的。 首先&#xff0c;用户可能…...

HBuilderx 插件开发变量名称翻译 ,中文转(小驼峰,大驼峰,下划线,常量,CSS类名)

HBuilderx 插件开发变量名称翻译 &#xff0c;中文转&#xff08;小驼峰&#xff0c;大驼峰&#xff0c;下划线&#xff0c;常量&#xff0c;CSS类名&#xff09; 插件开发文档 工具HBuilderx &#xff0c;创建项目 创建成功后目录 插件需求 开发时 用来将中文转为&#xff0…...

岳阳市美术馆预约平台(小程序论文源码调试讲解)

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

C++ | 高级教程 | 文件和流

&#x1f47b; 概念 文件流输出使用标准库 fstream&#xff0c;定义三个新的数据类型&#xff1a; 数据类型描述ofstream输出文件流&#xff0c;用于创建文件并向文件写入信息。ifstream输入文件流&#xff0c;用于从文件读取信息。fstream文件流&#xff0c;且同时具有 ofst…...

Starlink卫星动力学系统仿真建模第九讲-滑模(SMC)控制算法原理简介及卫星控制应用

滑模控制&#xff08;Sliding Mode Control&#xff09;算法详解 一、基本原理 滑模控制&#xff08;Sliding Mode Control, SMC&#xff09;是一种变结构控制方法&#xff0c;通过设计一个滑模面&#xff08;Sliding Surface&#xff09;&#xff0c;迫使系统状态在有限时间内…...

JVM相关面试题

1. 类加载与双亲委派机制 聊一下你对类加载器的理解。 类加载器是JVM用来加载类文件到内存的组件。它负责将字节码文件解析为java.lang.Class实例&#xff0c;并存储到运行时数据区的方法区中。类加载器分为Bootstrap ClassLoader、Extension ClassLoader和Application ClassLo…...

WiFi定位:宠物安全的“秘密武器”

从「全网寻狗」到「实时掌控」的进化史 凌晨三点收到邻居转发的「寻狗启事」&#xff0c;配图里的金毛犬项圈上赫然挂着某品牌定位器 —— 这样的魔幻场景在养宠圈并不罕见。随着宠物经济突破 3000 亿规模&#xff0c;智能定位器早已从「小众玩具」变成「刚需装备」。但你知道…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...