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

[信号与系统]IIR滤波器与FIR滤波器相位延迟定量的推导。

IIR滤波器与FIR滤波器最大的不同:相位延迟

IIR滤波器相位延迟分析

相位响应和延迟

这里讨论一下理想延迟系统的相位延迟。

对于一个给定的系统频率响应 H ( e j w ) H(e^{jw}) H(ejw)可以表示为

H ( e j w ) = ∣ H ( e j w ) ∣ e Φ ( w ) H(e^{jw}) = |H(e^{jw})|e^{Φ(w)} H(ejw)=H(ejw)eΦ(w)

其中 H ( e j w ) H(e^{jw}) H(ejw)是幅度响应, Φ ( w ) Φ(w) Φ(w)是相位响应。

延迟系统的相位响应

对于一个理想的延迟系统,其输出信号是输入信号的延迟版本,即:

y ( n ) = x ( n − τ ) y(n) = x(n-\tau) y(n)=x(nτ)

其中 τ \tau τ是延迟时间,对应的频率响应为 H ( e j w ) = e − j w τ H(e^{jw})=e^{-jw\tau} H(ejw)=ejwτ
这是因为延迟 τ \tau τ样本在时域上相当于在频域上乘以 e − j w τ e^{-jw\tau} ejwτ

傅里叶变换和频域描述

为了理解延迟系统的频率响应,需要用到离散时间傅里叶变换(DTFT)。DTFT将时域信号转换为频域信号。

  • 输入信号 x ( n ) x(n) x(n)的DTFT为:

X ( e j w ) = ∑ n = − ∞ ∞ x ( n ) e − j w n X(e^{jw}) = \sum_{n=-\infty}^{\infty} x(n) e^{-jwn} X(ejw)=n=x(n)ejwn

  • 输出信号 y ( n ) y(n) y(n)的DTFT为:

Y ( e j w ) = ∑ n = − ∞ ∞ y ( n ) e − j w n Y(e^{jw}) = \sum_{n=-\infty}^{\infty} y(n) e^{-jwn} Y(ejw)=n=y(n)ejwn

延迟的影响

根据延迟系统的定义:

y ( n ) = x ( n − τ ) y(n) = x(n - \tau) y(n)=x(nτ)

将这个关系代入到 y ( n ) y(n) y(n)的DTFT公式中:

Y ( e j w ) = ∑ n = − ∞ ∞ x ( n − τ ) e − j w n Y(e^{jw}) = \sum_{n=-\infty}^{\infty} x(n - \tau) e^{-jwn} Y(ejw)=n=x(nτ)ejwn

可以通过变量替换来简化计算。令 k = n − τ k = n - \tau k=nτ,则 n = k + τ n = k + \tau n=k+τ

Y ( e j w ) = ∑ k = − ∞ ∞ x ( k ) e − j w ( k + τ ) Y(e^{jw}) = \sum_{k=-\infty}^{\infty} x(k) e^{-jw(k + \tau)} Y(ejw)=k=x(k)ejw(k+τ)

分离指数部分:

Y ( e j w ) = ∑ k = − ∞ ∞ x ( k ) e − j w k e − j w τ Y(e^{jw}) = \sum_{k=-\infty}^{\infty} x(k) e^{-jwk} e^{-jw\tau} Y(ejw)=k=x(k)ejwkejwτ

注意到:

∑ k = − ∞ ∞ x ( k ) e − j w k = X ( e j w ) \sum_{k=-\infty}^{\infty} x(k) e^{-jwk} = X(e^{jw}) k=x(k)ejwk=X(ejw)

所以:

Y ( e j w ) = X ( e j w ) ⋅ e − j w τ Y(e^{jw}) = X(e^{jw}) \cdot e^{-jw\tau} Y(ejw)=X(ejw)ejwτ

频率响应

系统的频率响应 H ( e j w ) H(e^{jw}) H(ejw)定义为输出频域表示与输入频域表示的比值:

H ( e j w ) = Y ( e j w ) X ( e j w ) H(e^{jw}) = \frac{Y(e^{jw})}{X(e^{jw})} H(ejw)=X(ejw)Y(ejw)

将上面的结果代入:

H ( e j w ) = e − j w τ H(e^{jw}) = e^{-jw\tau} H(ejw)=ejwτ

相位响应的推导

我们可以从延迟系统的频率响应H(e^jw)推导出其相位响应:

H ( e j w ) = e − j w τ H(e^{jw})=e^{-jw\tau} H(ejw)=ejwτ

从上述式子可以看到,频率响应的相位部分为 Φ ( w ) = − w τ Φ(w)=-w\tau Φ(w)=wτ


至此我们知道了系统的延迟是如何表达和推导的,那么我们现在来说一下为什么IIR滤波器和FIR滤波器在相位延迟上会有这么大差别。

IIR滤波器相位延迟分析

考虑一个IIR滤波器的频率响应函数,应当如下:

一般来说,一个IIR滤波器的输出可以表示为:

y ( n ) = ∑ k = 0 N b k x ( n − k ) − ∑ k = 1 M a k y ( n − k ) y(n) = \sum_{k=0}^{N} b_k x(n-k) - \sum_{k=1}^{M} a_k y(n-k) y(n)=k=0Nbkx(nk)k=1Maky(nk)

其中, b k b_k bk a k a_k ak是滤波器的系数。

IIR滤波器的频率响应 H ( e j ω ) H(e^{j\omega}) H(e)通常表示为:

H ( e j ω ) = B ( e j ω ) A ( e j ω ) H(e^{j\omega}) = \frac{B(e^{j\omega})}{A(e^{j\omega})} H(e)=A(e)B(e)

其中, B ( e j ω ) B(e^{j\omega}) B(e) A ( e j ω ) A(e^{j\omega}) A(e)分别是分子和分母多项式:

B ( e j ω ) = ∑ k = 0 N b k e − j ω k B(e^{j\omega}) = \sum_{k=0}^{N} b_k e^{-j\omega k} B(e)=k=0Nbkejωk
A ( e j ω ) = 1 + ∑ k = 1 M a k e − j ω k A(e^{j\omega}) = 1 + \sum_{k=1}^{M} a_k e^{-j\omega k} A(e)=1+k=1Makejωk

相位响应 ϕ ( ω ) \phi(\omega) ϕ(ω)是频率响应的相位部分:

H ( e j ω ) = ∣ H ( e j ω ) ∣ e j ϕ ( ω ) H(e^{j\omega}) = |H(e^{j\omega})| e^{j\phi(\omega)} H(e)=H(e)ejϕ(ω)
ϕ ( ω ) = arg ⁡ ( H ( e j ω ) ) \phi(\omega) = \arg(H(e^{j\omega})) ϕ(ω)=arg(H(e))

为了定量地分析IIR滤波器的延迟,我们需要计算相位响应的频率导数,即群延迟 τ g ( ω ) \tau_g(\omega) τg(ω)

τ g ( ω ) = − d ϕ ( ω ) d ω \tau_g(\omega) = -\frac{d\phi(\omega)}{d\omega} τg(ω)=dωdϕ(ω)

由于IIR滤波器的相位响应不是线性的,所以其群延迟通常是频率的函数,即延迟是频率依赖的。

定量推导(纯数学计算)

我们以一个简单的一阶IIR滤波器为例,分析其延迟特性。考虑一个一阶IIR滤波器,其差分方程为:

y ( n ) = x ( n ) − a y ( n − 1 ) y(n) = x(n) - a y(n-1) y(n)=x(n)ay(n1)

其频率响应为:

H ( e j ω ) = 1 1 − a e − j ω H(e^{j\omega}) = \frac{1}{1 - a e^{-j\omega}} H(e)=1ae1

  1. 计算频率响应的相位

H ( e j ω ) = 1 1 − a e − j ω H(e^{j\omega}) = \frac{1}{1 - a e^{-j\omega}} H(e)=1ae1

我们将其写成极坐标形式:

H ( e j ω ) = 1 1 − 2 a cos ⁡ ( ω ) + a 2 e j ϕ ( ω ) H(e^{j\omega}) = \frac{1}{\sqrt{1 - 2a\cos(\omega) + a^2}} e^{j\phi(\omega)} H(e)=12acos(ω)+a2 1ejϕ(ω)

其中,

ϕ ( ω ) = − tan ⁡ − 1 ( a sin ⁡ ( ω ) 1 − a cos ⁡ ( ω ) ) \phi(\omega) = -\tan^{-1}\left(\frac{a \sin(\omega)}{1 - a \cos(\omega)}\right) ϕ(ω)=tan1(1acos(ω)asin(ω))

  1. 计算群延迟

τ g ( ω ) = − d ϕ ( ω ) d ω \tau_g(\omega) = -\frac{d\phi(\omega)}{d\omega} τg(ω)=dωdϕ(ω)

ϕ ( ω ) = − tan ⁡ − 1 ( a sin ⁡ ( ω ) 1 − a cos ⁡ ( ω ) ) \phi(\omega) = -\tan^{-1}\left(\frac{a \sin(\omega)}{1 - a \cos(\omega)}\right) ϕ(ω)=tan1(1acos(ω)asin(ω))

利用导数链式法则,

τ g ( ω ) = − d d ω [ − tan ⁡ − 1 ( a sin ⁡ ( ω ) 1 − a cos ⁡ ( ω ) ) ] \tau_g(\omega) = -\frac{d}{d\omega} \left[-\tan^{-1}\left(\frac{a \sin(\omega)}{1 - a \cos(\omega)}\right)\right] τg(ω)=dωd[tan1(1acos(ω)asin(ω))]

计算导数:

τ g ( ω ) = a ( 1 − a cos ⁡ ( ω ) ) cos ⁡ ( ω ) + a 2 sin ⁡ 2 ( ω ) ( 1 − a cos ⁡ ( ω ) ) 2 + a 2 sin ⁡ 2 ( ω ) \tau_g(\omega) = \frac{a \left(1 - a \cos(\omega)\right)\cos(\omega) + a^2 \sin^2(\omega)}{\left(1 - a \cos(\omega)\right)^2 + a^2 \sin^2(\omega)} τg(ω)=(1acos(ω))2+a2sin2(ω)a(1acos(ω))cos(ω)+a2sin2(ω)

简化后得到:

τ g ( ω ) = a ( 1 − a cos ⁡ ( ω ) + a cos ⁡ 2 ( ω ) ) 1 − 2 a cos ⁡ ( ω ) + a 2 \tau_g(\omega) = \frac{a \left(1 - a \cos(\omega) + a \cos^2(\omega)\right)}{1 - 2a \cos(\omega) + a^2} τg(ω)=12acos(ω)+a2a(1acos(ω)+acos2(ω))

由于公式较为复杂,我们可以直接用数值方法计算和绘制IIR滤波器的群延迟特性。

举个例子

我们来搞个示例,这样好懂一点:

考虑一个简单的一阶滤波器

H ( e j w ) = 1 1 − a e − j w H(e^jw)=\frac{1}{1-ae^{-jw}} H(ejw)=1aejw1

其相位响应为:

ϕ ( w ) = − a r g ( 1 − a e − j w ) ϕ(w)=-arg(1-ae^{-jw}) ϕ(w)=arg(1aejw)

我们可以看到,这个相位响应显然是非线性的,会随着w的不停变化,其变化率也会发生变化,说着说导数的比值会随着w的变化而变化,这显然是我们不想要看到的结果。

FIR滤波器相位延迟分析

FIR滤波器的相位延迟推导

FIR(有限脉冲响应)滤波器的延迟特性通常是线性的,这源于其非递归结构和对称系数设计。下面我们详细推导FIR滤波器的相位延迟,并展示如何利用KaTeX进行Markdown文档的编写。

FIR滤波器的基本形式

一个FIR滤波器的输出可以表示为:

y ( n ) = ∑ k = 0 N b k x ( n − k ) y(n) = \sum_{k=0}^{N} b_k x(n-k) y(n)=k=0Nbkx(nk)

其中, b k b_k bk 是滤波器的系数, N N N 是滤波器的阶数。

频率响应和相位响应

FIR滤波器的频率响应 H ( e j ω ) H(e^{j\omega}) H(e) 可以表示为:

H ( e j ω ) = ∑ k = 0 N b k e − j ω k H(e^{j\omega}) = \sum_{k=0}^{N} b_k e^{-j\omega k} H(e)=k=0Nbkejωk

相位响应 ϕ ( ω ) \phi(\omega) ϕ(ω) 是频率响应的相位部分:

H ( e j ω ) = ∣ H ( e j ω ) ∣ e j ϕ ( ω ) H(e^{j\omega}) = |H(e^{j\omega})| e^{j\phi(\omega)} H(e)=H(e)ejϕ(ω)
ϕ ( ω ) = arg ⁡ ( H ( e j ω ) ) \phi(\omega) = \arg(H(e^{j\omega})) ϕ(ω)=arg(H(e))

线性相位的条件

为了实现线性相位,我们通常设计FIR滤波器的系数使其具有对称性或反对称性。对于一个长度为 N + 1 N+1 N+1 的对称FIR滤波器,其系数满足:

b k = b N − k b_k = b_{N-k} bk=bNk

对于反对称FIR滤波器,其系数满足:

b k = − b N − k b_k = -b_{N-k} bk=bNk

这两种对称性保证了滤波器的相位响应是线性的,即:

ϕ ( ω ) = − ω τ \phi(\omega) = -\omega \tau ϕ(ω)=ωτ

其中, τ \tau τ 是一个常数,表示恒定的群延迟。

定量推导

考虑一个对称的FIR滤波器,其冲激响应 h ( n ) h(n) h(n) 为:

h ( n ) = h ( N − 1 − n ) h(n) = h(N-1-n) h(n)=h(N1n)

其频率响应为:

H ( e j ω ) = ∑ k = 0 N − 1 h ( k ) e − j ω k H(e^{j\omega}) = \sum_{k=0}^{N-1} h(k) e^{-j\omega k} H(e)=k=0N1h(k)ejωk

由于 h ( n ) h(n) h(n) 的对称性,我们可以将其拆分并合并:

H ( e j ω ) = ∑ k = 0 ( N − 1 ) / 2 h ( k ) ( e − j ω k + e − j ω ( N − 1 − k ) ) H(e^{j\omega}) = \sum_{k=0}^{(N-1)/2} h(k) \left( e^{-j\omega k} + e^{-j\omega (N-1-k)} \right) H(e)=k=0(N1)/2h(k)(ejωk+e(N1k))

利用欧拉公式,我们有:

e − j ω ( N − 1 − k ) = e − j ω ( N − 1 ) e j ω k e^{-j\omega (N-1-k)} = e^{-j\omega (N-1)} e^{j\omega k} e(N1k)=e(N1)ejωk

合并后得到:

H ( e j ω ) = e − j ω ( N − 1 ) / 2 ∑ k = 0 ( N − 1 ) / 2 h ( k ) ( e − j ω ( k − ( N − 1 ) / 2 ) + e j ω ( k − ( N − 1 ) / 2 ) ) H(e^{j\omega}) = e^{-j\omega (N-1)/2} \sum_{k=0}^{(N-1)/2} h(k) \left( e^{-j\omega (k - (N-1)/2)} + e^{j\omega (k - (N-1)/2)} \right) H(e)=e(N1)/2k=0(N1)/2h(k)(e(k(N1)/2)+e(k(N1)/2))

这表明相位响应是线性的:

ϕ ( ω ) = − ω N − 1 2 \phi(\omega) = -\omega \frac{N-1}{2} ϕ(ω)=ω2N1

相关文章:

[信号与系统]IIR滤波器与FIR滤波器相位延迟定量的推导。

IIR滤波器与FIR滤波器最大的不同:相位延迟 IIR滤波器相位延迟分析 相位响应和延迟 这里讨论一下理想延迟系统的相位延迟。 对于一个给定的系统频率响应 H ( e j w ) H(e^{jw}) H(ejw)可以表示为 H ( e j w ) ∣ H ( e j w ) ∣ e Φ ( w ) H(e^{jw}) |H(e^{jw…...

Python海量数据处理脚本大集合:pyWhat

pyWhat:精简海联数据,直达数据弱点要害- 精选真开源,释放新价值。 概览 pyWhat是Github社区上一款比较实用的开源Python脚本工具。它能够快速提取信息中的 IP 地址、邮箱、信用卡、数字货币钱包地址、YouTube 视频等内容。当你遇到了一串莫名…...

postgresql搭建

搭建postgresql-11.3,和客户端工具 1,准备对应的包,右键直接下一步安装完即可, 将postgresql设置为本地服务,方便启动, 2,用对应客户端软件连接,新建一个数据库controlDB 新建用户…...

Web 品质标准

Web 品质标准 引言 随着互联网的快速发展,Web应用已经渗透到我们生活的方方面面。为了确保Web应用的质量,提高用户体验,Web品质标准应运而生。这些标准涵盖了多个方面,包括性能、安全性、可访问性、用户体验等。本文将详细介绍这些标准,并探讨它们在实际开发中的应用。 …...

深入理解PyTorch:原理与使用指南

文章目录 引言一、PyTorch的原理1. 动态计算图2. 自动微分3. 张量计算4. 高效的并行计算 二、PyTorch的使用1. 环境配置2. 加载数据3. 构建模型4. 训练模型5. 验证和测试模型 三、PyTorch的安装与配置四、PyTorch的使用示例总结 引言 在深度学习和机器学习的广阔领域中&#x…...

【MySQL事务】深刻理解事务隔离以及MVCC

文章目录 什么叫事务事务的提交方式常见的事务操作方式事务的开始与回滚总结 事务的隔离设置隔离级别解释脏读解释幻读解释不可重复读为什么可重复读不能解决幻读问题?总结 数据库并发的场景MVCC隐藏列字段undo日志Read view RR和RC的本质区别总结 什么叫事务 在My…...

关于Mac mini 10G网口的问题

问题: 购入一个10G网口的Mac mini M2,将其和自己的2.5G交换机连接,使用共享屏幕进行远程操作的过程中出现了频率极高的卡顿,几乎是几秒钟卡一下,使用ping进行测试发现卡的时候就ping不通了。测试使用Mac mini的无线网和雷电转2.5G…...

计算机网络-第4章 网络层

4.1网络层的几个重要概念 4.1.1网络层提供的两种服务 电信网面向连接通信方式,虚电路VC。 互联网设计思路:网络层要设计得尽量简单,向其上层只提供简单灵活的,尽最大努力交付的数据报服务。 网络层不提供服务质量的承诺&#…...

pytorch跑手写体实验

目录 1、环境条件 2、代码实现 3、总结 1、环境条件 pycharm编译器pytorch依赖matplotlib依赖numpy依赖等等 2、代码实现 import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms import matpl…...

利用Java的`java.util.concurrent`包优化多线程性能

利用Java的java.util.concurrent包优化多线程性能 一、引言 在Java的多线程编程中,性能优化是一个永恒的话题。随着多核CPU的普及和计算任务的日益复杂,多线程编程已经成为提高应用程序性能的重要手段。然而,多线程编程也带来了一系列的问题…...

软件著作权申请:开发者的重要保障与助力

一、引言 随着信息技术的飞速发展,软件产业已成为推动经济增长的重要动力。然而,在软件开发过程中,保护创作者的权益、防止抄袭和侵权行为显得尤为重要。软件著作权作为保护软件开发者权益的重要法律工具,其申请和登记流程对于软…...

WLAN Hostapd配置参数详解 - CN

想必大家平台在调试Hostapd时,针对某些特殊的参数,很难一下子理清楚其用法,这里对hostapd使用的配置参数进行一个归纳,以供大家参考( 其英文参考为:WLAN Hostapd配置参数详解 - EN-CSDN博客)&am…...

Excel 宏录制与VBA编程 ——VBA编程技巧篇一 (Union方法、Resize方法、Cells方法、UseSelect方法、With用法)

Uniom方法 使用Union方法可以将多个非连续区域连接起来成为一个区域,从而可以实现对多个非连续区域一起进行操作。 Resize方法 使用Range对象的Resize属性调整指定区域的大小,并返回调整大小后的单元格区域。 Cells方法 Cells属性返回一个Range对象。 Us…...

基于路径长度的样条插补算法(自动驾驶和路径跟踪控制适用)

以前在做车辆跟踪控制的时候发现在针对有多个X和多个Y对应的路径插补时候,总是报错,因为MATLAB里面的interp1插补函数它要求x要唯一对应一个y,当路径以单独的x或者y来求插补时候的时候就报错。由于在使用Matlab的interp1函数进行插值时&#…...

net Framework OAuth2.0

grant_type client_credentials 客户端凭证password 密码模式 用于资源所有者密码凭据token 隐藏式 、 简化式 简化模式又称为隐式授权码模式,它是授权码模式的一个简化版本authorization_code 授权码 A. 第三方程序向资源拥有者(用户)发送授权请求&#xf…...

速盾:服务器cdn加速超时如何解决?

CDN(Content Delivery Network,内容分发网络)是一种将网站内容分布到全球各地服务器上的技术,以提高网站的访问速度和用户体验。然而,在使用CDN时,有时候会遇到服务器CDN加速超时的问题,即CDN服…...

2024年6月总结及随笔之打卡网红点

1. 回头看 日更坚持了547天。 读《人工智能时代与人类未来》更新完成读《AI未来进行式》开更并更新完成读《AI新生:破解人机共存密码》开更并持续更新 2023年至2024年6月底累计码字1267912字,累计日均码字2317字。 2024年6月码字90659字,…...

《Windows API每日一练》7.4 状态报告上使用计时器

这一节我们使用计时器,每隔一秒获取当前鼠标坐标位置的像素值,并显示在窗口,这就相当于是一个简单的取色器了。 本节必须掌握的知识点: 第47练:取色器 7.4.1 第47练:取色器 /*----------------------------…...

python实现API调用缓存

python实现API调用缓存 1.代码2.输出3.保存的json数据 想把python某些函数的参数及返回值记录下来,如果之前已计算过,则直接返回缓存中的数据 1.代码 import jsondef get_variable_name(var):变量转变量名local_varsglobals()return [name for name, value in local_vars.ite…...

传输距离3000M|低延迟|48K采样音频传输模块-SA356大功率发射模块

无线音频应用中,远距离音频传输在许多领域具有广泛的应用需求,例如大型会议系统、公共广播、户外活动和音乐演出等。为了满足这些需求,音频传输模块需要具备一些关键特性,包括长距离传输能力、高音质、低延迟、稳定性以及抗干扰能…...

前端css性能优化

前端css性能优化 1. 减少样式表数量和压缩文件大小: 通过合并多个样式表、删除未使用的样式、压缩样式表等方式来减少样式表数量和大小,从而减少网络请求和提高加载速度。 通常来说,样式文件会被浏览器缓存,进入到其他页面样式文件…...

如何在Windows上使用Docker搭建PHP开发环境

前言 在本地搭建开发环境我好像没几年就要折腾一次,因为本地开发电脑使用的是windows,早些年的时候,用过很多类似WAMP之类的东西,但最终都有或多或少不满意的地方,前两年的时候,还折腾过WSL,但…...

java 单例模式

Java中实现单例模式的常见方式有两种:懒汉式和饿汉式。以下是这两种方式的简单示例: 饿汉式 饿汉式单例模式在类加载时就完成了实例的初始化,以空间换时间,确保了实例的唯一性。 public class Singleton {// 在自己内部定义自己…...

爬虫 属性 方法

在Python中,爬虫常用于从网页上抓取数据。BeautifulSoup是一个流行的库,用于从HTML或XML文件中提取数据。它创建了一个解析树,方便你从文档中查找、修改或导航数据。 安装BeautifulSoup 首先,你需要安装BeautifulSoup和lxml&…...

HEX文件

什么是hex文件 以*.hex为后缀的文件我们称之为HEX文件。hex是intel规定的标准,hex的全称是Intel HEX,此类文件通常用于传输将被存于ROM或EEPROM中的程序和数据。是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。HEX的英语原始意思是16进制…...

人机融合的智能操作系统

操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。它的职责常包括对硬件的直接监管、对各种计算资源(如内存、处理器时间等)的管理、以及提供诸如…...

数据结构之二叉树概念

数据结构之二叉树 二叉树简介分类普通二叉树平衡二叉树满二叉树二叉搜索树(二叉排序树、二叉查找树),平衡二叉树红黑树 B树类型B树(B-树、B_树)B树B*树 二叉树 简介 二叉树(Binary Tree) :是一种非常重要…...

Linux源码阅读笔记08-进程调度API系统调用案例分析

kthread_create_on_node kthread_create_on_node函数功能&#xff1a;指定存储节点创建新内核线程。源码如下&#xff1a; 操作实战 #include <linux/module.h> #include <linux/pid.h> #include <linux/sched.h> #include <linux/kthread.h> #inclu…...

短视频抓取:成都柏煜文化传媒有限公司

短视频抓取&#xff1a;技术挑战、法律边界与未来趋势 随着移动互联网的迅猛发展&#xff0c;短视频平台如雨后春笋般涌现&#xff0c;成为现代人生活娱乐的重要组成部分。然而&#xff0c;在海量短视频内容中&#xff0c;如何高效、准确地抓取目标视频&#xff0c;成为了一个…...

proto的前后端使用

首先定义一个input.proto文件 内容如下 syntax "proto3";message InputData {int32 UserId 1; // 将 number 改为 int32 或 int64string UserInput 2;string DrunkState 3; }message ResponseData {string AIResponse 1;string prompt 2;string emoti…...

华为解决固态硬盘致命弱点:延长30~50%的SSD寿命

如今的SSD容量越做越大&#xff0c;企业级SSD容量已达30TB、60TB的、甚至120TB。但SSD寿命一直是“致命伤”&#xff0c;越大容量的盘&#xff0c;出现故障后&#xff0c;丢失的数据就越多。 近日&#xff0c; 华为数据存储发文&#xff0c;揭开华为全闪分布式存储让SSD大盘更“…...

登录验证码高扩展性设计方案

登录验证码高扩展性建设方案 本文分享了一种登录验证码高扩展性的建设方案&#xff0c;通过工厂模式策略模式&#xff0c;增强了验证码服务中验证码生成器、验证码存储器、验证码图片生成器的扩展性&#xff0c;实现了服务组件的多样化&#xff0c;降低了维护成本 登录验证码高…...

Spring MVC数据绑定和响应——数据回写(一)普通字符串的回写

接下来通过HttpServletResponse输出数据的案例&#xff0c;演示普通字符串的回写&#xff0c;案例具体实现步骤如下。 1、创建一个数据回写类DataController&#xff0c;在DataController类中定义showDataByResponse()方法&#xff0c;用于测试在Spring MVC中普通字符串的回写…...

怎样才能更好地保护个人账号的安全

怎样才能更好地保护个人账号的安全 保护个人账号安全是网络安全的重要组成部分&#xff0c;以下是一些有效的措施来增强账号的安全性&#xff1a; 1. 使用强密码 复杂性&#xff1a;创建包含大小写字母、数字和特殊字符的密码。长度&#xff1a;密码至少应有12个字符长。唯一…...

react native优质开源项目

React Native 是一个非常流行的用于构建跨平台移动应用程序的框架&#xff0c;开源社区贡献了许多优质的项目和库。以下是一些备受认可的 React Native 开源项目&#xff0c;适合用来学习和参考&#xff1a; ### 1. **React Native Elements** [React Native Elements](https:…...

速盾:海外cdn有哪些优缺点呢?

海外 CDN&#xff08;内容分发网络&#xff09;是一种通过在全球多个节点上分布内容来加速网站访问速度的服务。它通过将网站的静态内容缓存到全球各地的服务器上&#xff0c;使用户可以从最近的服务器获取内容&#xff0c;从而提高网站的响应速度和用户体验。然而&#xff0c;…...

Unity Shader 软粒子

Unity Shader 软粒子 前言项目Shader连连看项目渲染管线设置 鸣谢 前言 当场景有点单调的时候&#xff0c;就需要一些粒子点缀&#xff0c;此时软粒子就可以发挥作用了。 使用软粒子与未使用软粒子对比图 项目 Shader连连看 这里插播一点&#xff0c;可以用Vertex Color与…...

nextTick的应用和原理理解

一.代码的理解 <template><div id"app"><div></div><button click"fn" ref"box"> {{ name }}</button></div> </template><script> export default {data: function () {return {n…...

.Net Core 微服务之Consul

目录 一、微服务架构 vs 单体架构 1. 单体架构介绍 2. 微服务架构介绍 3. 微服务架构 vs 单体架构的区别 4. 适用场景和选择 4.1 微服务架构的适用场景和选择 复杂度和规模需求高的应用程序: 技术栈的灵活性需求: 快速迭代和持续交付: 高可用性和容错性的要求: 4…...

速盾:cdn流量调度

CDN&#xff08;Content Delivery Network&#xff09;是指内容分发网络&#xff0c;它是一种通过部署在不同地理位置的服务器来传递互联网内容的技术。CDN的主要目标是通过将内容放置在离用户最近的服务器上&#xff0c;来提高用户访问网站的响应速度和性能。 CDN的流量调度是…...

Windows批处理入门:快速掌握批处理脚本的基本技巧

一、前言 在Windows操作系统中&#xff0c;批处理文件&#xff08;Batch File&#xff09;是一种非常实用的工具&#xff0c;它允许用户通过简单的命令行脚本来自动化各种任务。无论是系统管理员、开发人员&#xff0c;还是普通用户&#xff0c;掌握批处理文件的基本知识都能极…...

【C++之unordered_set和unordered_map的模拟实现】

C学习笔记---025 C之unordered_set和unordered_map的模拟实现1、unordered_set的模拟实现2、unordered_map的模拟实现 C之unordered_set和unordered_map的模拟实现 前言&#xff1a; 前面篇章学习了C对unordered_set和unordered_map的认识和应用&#xff0c;接下来继续学习&am…...

服务器使用别人的conda

很多台机器都共用一个conda时候&#xff0c;可以在conda的bin目录下运行./conda init来使得该环境机器用这个conda作为默认的conda。 但是有个环境报错&#xff1a; -bash: ./conda: /apdcephfs_cq8/share_1367250/jaimeji/anaconda/jaime_conda/bin/python: bad interpreter:…...

农村程序员陈随易2024年中总结

今天是 2024年7月1日&#xff0c;时间如白驹过隙&#xff0c;今年已去其一半。 总结一下今年上半年的情况&#xff0c;给大家提供一些参考和建议。 希望大家关注一下公众号 陈随易&#xff0c;有些内容只在公众号发表。 先看看我的年初计划&#xff0c;这个在今年年初的时候&…...

Spring Boot中的日志管理最佳实践

Spring Boot中的日志管理最佳实践 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨一下在Spring Boot应用中如何有效管理日志&#xff0c;确保系统…...

python基础语法 004-2流程控制- for遍历

1 遍历 1.1 什么是遍历&#xff1f; 可以遍历的元素&#xff1a;字符串、列表、元组、字典、集合字符串是可以进行for 循环。&#xff08;容器对象&#xff0c;序列&#xff09;可迭代对象iterable 例子&#xff1a; 1 &#xff09;、for遍历字符串&#xff1a; name xiao…...

【高考志愿】医学

目录 一、明确职业定位与兴趣 二、选择大学与专业 三、考虑身体条件 四、了解录取规则 五、考虑选科与成绩 六、注意志愿填报策略 七、关注就业前景 八、资深医生的建议 高考志愿填报学医时&#xff0c;考生需要综合考虑多个因素&#xff0c;确保自己能够做出明智的选择…...

音视频开发31 FFmpeg 编码- avcodec_find_encoder和avcodec_find_encoder_by_name

avcodec_find_encoder /** * Find a registered encoder with a matching codec ID. * * param id AVCodecID of the requested encoder * return An encoder if one was found, NULL otherwise. */ AVCodec *avcodec_find_encoder(enum AVCodecID id); 那么这个 AVCodec…...

大模型压缩:基于贝叶斯优化的自适应低秩分解

1.方法 1.1 基于特征的高维空间低秩分解 PCA已经是老朋友了&#xff0c;每次一说主成分都会出现PCA。这篇文章1利用预训练数据的子集作为校准数据集 D c a l { x i } i 1 n \mathcal{D}_{cal}\{x_{i}\}_{i1}^{n} Dcal​{xi​}i1n​&#xff0c;首先用校准数据集的样本协方差…...

【Python函数编程实战】:从基础到进阶,打造代码复用利器

文章目录 &#x1f68b;前言&#x1f680;一、认识函数&#x1f308;二、函数定义❤️三、函数调用⭐四、实参与形参&#x1f4a5;1. 形式参数&#x1f6b2;2. 实际参数&#x1f525;1. 位置参数☔2. 关键字参数&#x1f3ac;3. 默认参数&#x1f525;4. 可变数量参数(不定长参…...

web前端开发(概述篇)

一、概念 Web是Internet上的一种多媒体信息服务系统&#xff0c;整个系统由Web服务器、浏览器和通信协议组成。 通信协议HTTP能够传输任意类型的数据对象&#xff0c;满足Web服务器与客户之间的多媒体通信的需求。 一般来说&#xff0c;Web开发分为前端&#xff08;Front-en…...

前端根据目录生成模块化路由routes

根据约定大于配置的逻辑&#xff0c;如果目录结构约定俗成&#xff0c;前端是可以根据目录结构动态生成路由所需要的 route 结构的&#xff0c;这个过程是要在编译时 进行&#xff0c;生成需要的代码&#xff0c;保证运行时的代码正确即可 主流的打包工具都有对应的方法读取文…...

使用各向异性滤波器和图像处理方法进行脑肿瘤检测(MATLAB)

医学图像分割一直以来都是计算机辅助诊断领域的研究热点。在医学图像的处理和分析中&#xff0c;对图像中感兴趣区域的准确分割尤其关键。要对感兴趣区域进行分类识别&#xff0c;首先要从图像中把感兴趣区域精确分割出来&#xff0c;然后有针对性地对感兴趣区域提取特征并分类…...

docker部署简单的Kafka

文章目录 1. 拉取镜像2. 运行创建网络运行 ZooKeeper 容器运行 Kafka 容器 3. 简单的校验1. 检查容器状态2. 检查 ZooKeeper 日志3. 检查 Kafka 日志4. 使用 Kafka 命令行工具检查5. 创建和删除测试主题 1. 拉取镜像 选择一组兼容性好的版本。 docker pull bitnami/kafka:3.6…...

探索 SecureCRT:强大的终端 SSH 工具

SecureCRT 是一款功能强大、备受赞誉的终端 SSH 工具&#xff0c;适用于 Mac 和 Windows 操作系统&#xff0c;为用户提供了便捷、高效、安全的远程连接和管理体验。 SecureCRT 拥有直观友好的用户界面&#xff0c;即使是初次使用的用户也能迅速上手。其支持多种协议&#xff…...

Linux学习笔记(一)

命令格式 command [-options] [parameter] command&#xff1a;命令名&#xff0c;相应功能的英文单词或单词的缩写 [-options]&#xff1a;选项&#xff0c;可用来对命令进行控制&#xff0c;也可以省略 parameter&#xff1a;传给命令的参数&#xff0c;可以是零个、一个或者…...

皓影SUV价格大放送,五月购车至高补贴4.5万!

随着五月的来临,汽车市场迎来新一轮的竞争热潮。在这场激烈的角逐中,皓影以其强大的综合实力和极具吸引力的价格攻势,再次成为市场的焦点。这款全场景宝藏SUV凭借“置换补贴至高11000,购车补贴至高34000,混动车型至高享受24期0息”的优惠政策,成功吸引了大批消费者的目光…...

Open3D-Geometry-2:Mesh网格的一些基础操作示例

0. 引言 Open3D 有一个名为 的 3D 三角形网格数据结构TriangleMesh。下面的代码显示了如何从ply文件中读取三角形网格并打印其顶点和三角形。 import open3d as o3d import numpy as npprint("Testing mesh in Open3D...") armadillo_mesh = o3d.data.ArmadilloMes…...

Flutter 中的 NestedScrollViewViewport 小部件:全面指南

Flutter 中的 NestedScrollViewViewport 小部件&#xff1a;全面指南 Flutter 是一个功能丰富的 UI 工具集&#xff0c;它提供了多种布局和控件来帮助开发者构建美观且功能强大的应用。在 Flutter 的滚动控件中&#xff0c;NestedScrollView 是一个特别的存在&#xff0c;它允…...

Nginx配置若依前后端分离项目验证码不显示,403,405,404错误解决方式

server { listen 80; server_name 域名; location / { # 静态文件服务配置&#xff08;可选&#xff09; 前端打包后的位置dist里面的文件root /www/wwwroot/web; index index.html; try_files $uri $uri/ /index.html; } # 根据文件前端项目 .env.production里面内容进…...

设计模式 19 模板模式 Template Pattern

设计模式 19 模板模式 Template Pattern 1.定义 模板模式&#xff08;Template Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;将一些步骤的具体实现延迟到子类中。在模板模式中&#xff0c;定义了一个抽象类&#xff0c;其中包含了一个…...

Redis教程(二十):Redis中Lua脚本的使用

Lua脚本 Lua 脚本主要在于提供一种强大且灵活的方式来扩展和定制应用程序的功能。在不同的场景和平台上,Lua 脚本的作用各不相同,以下是一些主要的用途: 嵌入式脚本 Lua 最初设计的目的就是作为一个嵌入到应用程序中的脚本语言。这使得应用开发者可以提供一种途径,让最…...