音频进阶学习二十四——IIR滤波器设计方法
文章目录
- 前言
- 一、滤波器设计要求
- 1.选频滤波器种类
- 2.通带、阻带、过度带
- 3.滤波器设计指标
- 二、IIR滤波器的设计过程
- 1.设计方法
- 2.常见的模拟滤波器设计
- 1)巴特沃斯滤波器(Butterworth Filter)
- 2)切比雪夫滤波器(Chebyshev Filter)
- 3)椭圆滤波器(Elliptic Filter)
- 3.三种滤波器设计对比
- 三、matlab代码
- 1.巴特沃斯滤波器(Butterworth Filter)
- 2.切比雪夫滤波器(Chebyshev Filter)
- 3.椭圆滤波器(Elliptic Filter)
- 总结
前言
本章内容会先介绍滤波器的指标。设计一个IIR滤波器需要考虑到它的通带、阻带和过渡带,以及它的应用场景。随后再介绍设计IIR滤波器的方法和流程。
其中在设计数字滤波器时,需要考虑它的通带截止频率和阻带截止频率。而数字滤波器的设计方法时是依靠逼近模拟滤波器的方式实现,所以本文中会介绍三种常见的模拟滤波器,通过这三种模拟滤波器可以设计出在计算机中应用的数字滤波器。
|版本声明:山河君,未经博主允许,禁止转载
一、滤波器设计要求
1.选频滤波器种类
在音频进阶学习十四——滤波器的种类和实现方式总已经对于滤波器的种类做了介绍,这里复习一下:
| 选频滤波器种类 | 原理 | 作用 |
|---|---|---|
| 低通滤波器(Low-Pass Filter, LPF) | 允许低频信号通过,阻止高频信号 | 如从含噪声的信号中去除高频噪声 |
| 高通滤波器(High-Pass Filter, HPF) | 允许高频信号通过,阻止低频信号 | 如去除信号中的低频干扰,如电力线噪声 |
| 带通滤波器(Band-Pass Filter, BPF) | 允许某一频段范围内的信号通过,抑制其他频段的信号 | 如在通信系统中提取特定频段的信号 |
| 带阻滤波器(Band-Stop Filter, BSF) | 阻止某一频段的信号通过,而允许其他频段信号通过 | 如去除50 Hz或60 Hz的电源噪声 |
| 全通滤波器(All-Pass Filter) | 允许所有频率的信号通过,但会改变它们的相位而不是幅度 | 主要用于调整信号的相位响应 |
对于这几种滤波器可以以下图表示出来,其中左边高的地方允许频率通过,而右边方框内的是允许频率通过,其中两个红线以内的是一个周期内部的表现。

对于理想滤波器而言,系统的冲激响应应该是非因果和无限长的,而这种基本上是不可实现的,所以在数字滤波器中,是允许幅度响应存在一定范围内的误差,并且存在过度使得幅度响应变化更平滑。
2.通带、阻带、过度带
我们知道滤波器是一个系统,而滤波器作用的本质就是通过其冲激响应函数对输入信号进行卷积,从而得到输出信号。上文中对于幅度响应的误差的表述,在滤波器的频率响应中使用通带、阻带和过渡带来表征,它们帮助定义滤波器如何处理信号的不同频率成分。
结合图像表示

- 通带
- 定义:通带是指滤波器允许信号通过的频率范围。在这个频率范围内,信号几乎没有衰减,或者衰减非常小。
- δ p \delta_p δp是通带峰波纹值, ω p \omega_p ωp是通带截止频率
- 特征:在通带内,信号的幅度几乎保持不变。对于低通滤波器,通带是低频范围;对于高通滤波器,通带是高频范围;对于带通滤波器,通带是位于两个截止频率之间的频率范围。
- 过度带
- 定义:过渡带是指从通带到阻带的过渡区域,也就是说,是滤波器频率响应发生明显变化的区域。例如上图中 [ δ s , δ p ] [\delta_s,\delta_p] [δs,δp]之间。
- 特征:过渡带的宽度决定了滤波器的频率响应变化的速率。过渡带越宽,滤波器的设计越简单;过渡带越窄,滤波器的设计越复杂。
- 阻带
- 定义:阻带是指滤波器显著衰减或完全阻止信号通过的频率范围。在这个范围内,信号的幅度衰减很大。例如上图中的 [ 0 , δ s ] [0,\delta_s] [0,δs]区间内。
- δ s \delta_s δs是阻带峰波纹值, ω s \omega_s ωs是阻带截止频率
- 特征:在阻带内,信号的幅度几乎被完全抑制。对于低通滤波器,阻带是高频范围;对于高通滤波器,阻带是低频范围;对于带通滤波器,阻带是位于两个截止频率外的频率范围。
值得注意的是: ω \omega ω是 Ω \Omega Ω的归一化处理,即 ω = 2 π f Ω \omega=\frac{2\pi f}{\Omega} ω=Ω2πf,例如采样率是 16 k H z 16kHz 16kHz,截止频率是 500 H z 500Hz 500Hz,那么 ω p = 2 π 5 × 1 0 2 16 × 1 0 3 = 0.0625 π \omega_p=\frac{2\pi 5\times 10^2}{16\times 10^3}=0.0625\pi ωp=16×1032π5×102=0.0625π
3.滤波器设计指标
滤波器设计的主要目标是使其满足特定的性能要求,不同的应用场景和要求会导致不同的滤波器设计指标。常见的滤波器设计指标包括:
- 截止频率
- 定义:滤波器区分通带和阻带的频率点,通常称为截止频率。对于低通滤波器,截止频率是信号通过的最高频率;对于高通滤波器,则是信号通过的最低频率;对于带通和带阻滤波器,则有两个截止频率。
- 要求:需要明确设定在哪个频率处滤波器的行为发生显著变化。
- 通带
- 定义:滤波器允许信号通过的频率范围,在此范围内信号不受衰减或损失,或者衰减非常小(通常小于某个特定的阈值)。
- 指标:需要指定通带的频率范围和最大允许的衰减(通常称为通带波动或通带增益)。
- 阻带
- 定义:滤波器抑制信号的频率范围,在此范围内信号的幅度应该被显著减少或完全抑制。
- 指标:需要指定阻带的频率范围和最小的衰减量(通常称为阻带衰减)。
- 过渡带
- 定义:从通带到阻带的过渡区域,表示频率响应从允许信号通过到完全衰减的区域。过渡带越窄,滤波器的设计越复杂。
- 要求:设计时需要控制过渡带的宽度,过渡带的宽度与滤波器的阶数密切相关,阶数越高,过渡带越窄。
- 衰减量
- 定义:滤波器在阻带内的信号衰减量,通常用分贝 (dB) 来表示。较高的衰减值表示滤波器能够更好地抑制不需要的频率。
- 指标:需要指定阻带的最小衰减量,通常需要大于某个值(例如40 dB、60 dB等),计算方式为 d b = 20 log 10 ∣ H ( e j ω ) ∣ db=20\log_{10}|H(e^{j\omega})| db=20log10∣H(ejω)∣。
- 通带波动
- 定义:滤波器在通带内的频率响应波动,表示在通带范围内的增益变化。
- 指标:指定通带波动的最大值,通常以dB为单位。较小的通带波动意味着滤波器在通带内更加平坦,信号失真较小。
- 群延迟
- 要求:群延迟表示信号的各个频率成分在通过滤波器时的延迟差异。理想情况下,滤波器应该具有恒定的群延迟,以避免信号的相位失真。
- 群延迟应尽可能平坦,以减少信号的相位失真。
- 滤波器阶数
- 要求:滤波器的阶数通常与其复杂度和过渡带的宽度成正比。阶数越高,滤波器的设计越复杂,过渡带越窄,性能越好,但计算量也增加。
- 通过选择适当的阶数来平衡性能和计算复杂度。
二、IIR滤波器的设计过程
1.设计方法
在之前的文章音频进阶学习十四——滤波器的种类和实现方式总中,我们介绍过FIR滤波器和IIR滤波器的区别,IIR的存在反馈机制而FIR不存在反馈机制,因此IIR的表述方式是差分方程而FIR的表述方式是卷积和,这也就意味着IIR在设计时需要考虑极点在单位圆上(FIR不存在极点)才能保证系统稳定。
设计IIR滤波器的设计方法通常是由模拟滤波器设计的结果进行转换,过程如下图

而通过模拟滤波器来转换数字滤波器的原因有:
- 直接设计数字滤波器需要考虑采样频率、量化误差、稳定性、失真度、复杂性等等因素
- 模拟逼近技术可以保证精度更准确,更平滑,且有大量成熟的图表
- 从模拟滤波器的 s s s域(拉普拉斯变换用于分析连续时间复平面)转为数字滤波器中的 z z z域方法成熟且稳定
- s s s域的虚轴 j Ω j\Omega jΩ能够映射到 z z z平面的单位圆上
- 稳定的模拟传递函数可以变成稳定的数字传递函数
值得注意的是:这种模拟滤波器转换方法不保证相位特性(FIR滤波器通常追求线性相位)。
2.常见的模拟滤波器设计
1)巴特沃斯滤波器(Butterworth Filter)
巴特沃斯滤波器是一种具有最大平坦频率响应的滤波器设计。巴特沃斯逼近技术通过最大化通带内频率响应的平坦性来设计滤波器,其特点是:
- 滤波器的通带没有波纹(响应非常平坦)。
- 频率响应的衰减速度相对较慢。
它幅频响应表示为:
∣ H a ( j Ω ) ∣ 2 = 1 1 + ( Ω Ω c ) 2 N |H_a(j\Omega)|^2=\frac{1}{1+(\frac{\Omega}{\Omega_c})^{2N}} ∣Ha(jΩ)∣2=1+(ΩcΩ)2N1
- ∣ H a ( j Ω ) ∣ 2 |H_a(j\Omega)|^2 ∣Ha(jΩ)∣2:滤波器的幅频响应
- Ω \Omega Ω:频率分量
- Ω c \Omega_c Ωc:截止频率
- N N N:滤波器阶数
使用matlab(代码见下文)画出来对于不同的滤波器阶数 2 , 4 , 6 , 8 2,4,6,8 2,4,6,8为:

2)切比雪夫滤波器(Chebyshev Filter)
切比雪夫逼近设计技术采用的是最小误差逼近的方法,这种方法允许滤波器在通带和阻带之间引入波纹,但是通过优化波纹的分布,使得总体的误差最小。切比雪夫滤波器分为两种:
- 切比雪夫 I 型:在通带内有波纹,而在阻带内具有较快的衰减。
- 切比雪夫 II 型:在阻带内有波纹,而在通带内具有较快的衰减。
切比雪夫逼近技术通常用于对快速衰减有较高要求,但可以容忍通带波纹的场景。
它幅频响应表示为:
∣ H a ( j Ω ) ∣ 2 = 1 1 + ε 2 C N 2 ( Ω Ω c ) |H_a(j\Omega)|^2=\frac{1}{1+\varepsilon^2C_N^2(\frac{\Omega}{\Omega_c})} ∣Ha(jΩ)∣2=1+ε2CN2(ΩcΩ)1
- ∣ H a ( j Ω ) ∣ 2 |H_a(j\Omega)|^2 ∣Ha(jΩ)∣2:滤波器的幅频响应
- Ω \Omega Ω:频率分量
- Ω c \Omega_c Ωc:截止频率
- N N N:滤波器阶数
- C N C_N CN:N阶切比雪夫多项式。这个常数影响滤波器的频率响应特性。
- ε \varepsilon ε:波纹系数。它决定了滤波器的频率响应的形状,尤其是在过渡带的宽度。

3)椭圆滤波器(Elliptic Filter)
椭圆逼近技术允许在通带和阻带之间同时引入波纹,这样可以进一步优化滤波器的性能,使得通带和阻带之间的过渡更快。椭圆滤波器的设计可以达到最佳的频率选择性,但也会有较大的波纹。
它幅频响应表示为:
∣ H a ( j Ω ) ∣ 2 = 1 1 + ε 2 J N 2 ( Ω Ω c ) |H_a(j\Omega)|^2=\frac{1}{1+\varepsilon^2J_N^2(\frac{\Omega}{\Omega_c})} ∣Ha(jΩ)∣2=1+ε2JN2(ΩcΩ)1
- ∣ H a ( j Ω ) ∣ 2 |H_a(j\Omega)|^2 ∣Ha(jΩ)∣2:滤波器的幅频响应
- Ω \Omega Ω:频率分量
- Ω c \Omega_c Ωc:截止频率
- N N N:滤波器阶数
- J N J_N JN:这是N阶雅克比椭圆函数。这个常数影响滤波器的频率响应特性。
- ε \varepsilon ε:波纹系数。它决定了滤波器的频率响应的形状,尤其是在过渡带的宽度。

3.三种滤波器设计对比
| 滤波器类型 | 通带特性 | 阻带特性 | 过渡带陡峭度 | 相位响应 |
|---|---|---|---|---|
| 巴特沃斯 | 平滑无波纹 | 平滑无波纹 | 过渡带较宽,较缓慢 | 相位线性,延迟小 |
| 切比雪夫 I | 有通带波纹 | 阻带单调衰减 | 过渡带比巴特沃斯更陡 | 相位失真较大 |
| 切比雪夫 II | 通带单调 | 阻带有波纹 | 过渡带比巴特沃斯更陡 | 相位失真较大 |
| 椭圆滤波器 | 通带和阻带都有波纹 | 过渡带最陡峭 | 最短过渡带 | 相位失真最大 |
三、matlab代码
1.巴特沃斯滤波器(Butterworth Filter)
% 设定滤波器的截止频率(以单位频率表示,1为Nyquist频率的一半)
cutoff_freq = 0.3;% 设定采样频率(假设采样频率为1)
sampling_freq = 1;% 定义滤波器的阶数
orders = [2, 4, 6, 8];figure;
hold on;for i = 1:length(orders)% 设计巴特沃斯低通滤波器[b, a] = butter(orders(i), cutoff_freq);% 绘制频率响应[h, f] = freqz(b, a, 512, sampling_freq);plot(f, abs(h), 'DisplayName', ['Order ' num2str(orders(i))]);
endlegend show;
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Butterworth Filter Frequency Response (Different Orders)');
grid on;
hold off;
2.切比雪夫滤波器(Chebyshev Filter)
% 设置滤波器的截止频率
cutoff_freq = 0.3; % 截止频率,归一化到Nyquist频率% 设置滤波器的阶数
orders = [2, 4, 6, 8];% 设置切比雪夫滤波器的波纹大小
ripple_cheby1 = 1; % 以dB为单位,通带波纹大小
ripple_cheby2 = 20; % 以dB为单位,II型滤波器的阻带波纹大小,较小的波纹使阻带更低figure;
hold on;
for i = 1:length(orders)% 设计切比雪夫I型低通滤波器[b1, a1] = cheby1(orders(i), ripple_cheby1, cutoff_freq);[h1, f] = freqz(b1, a1, 512, 1);plot(f, abs(h1), 'DisplayName', ['Chebyshev I - Order ' num2str(orders(i))]);
endlegend show;
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Chebyshev I Filter Frequency Response (Different Orders)');
grid on;
hold off;figure;
hold on;
for i = 1:length(orders)% 设计切比雪夫II型低通滤波器[b2, a2] = cheby2(orders(i), ripple_cheby2, cutoff_freq);[h2, f] = freqz(b2, a2, 512, 1);plot(f, abs(h2), '--', 'DisplayName', ['Chebyshev II - Order ' num2str(orders(i))]);
endlegend show;
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Chebyshev II Filter Frequency Response (Different Orders)');
grid on;
hold off;
3.椭圆滤波器(Elliptic Filter)
% 设置滤波器的截止频率
cutoff_freq = 0.3; % 截止频率,归一化到Nyquist频率% 设置滤波器的阶数和波纹大小
orders = [2, 4, 6, 8]; % 不同阶数
ripple_pass = 1; % 通带波纹大小(dB)
ripple_stop = 30; % 阻带波纹大小(dB)% 创建一个图形窗口
figure;
hold on;% 绘制不同阶数的椭圆滤波器频率响应
for i = 1:length(orders)% 设计椭圆滤波器[b, a] = ellip(orders(i), ripple_pass, ripple_stop, cutoff_freq);% 计算频率响应[h, f] = freqz(b, a, 512, 1);% 绘制频率响应plot(f, abs(h), 'DisplayName', ['Order ' num2str(orders(i))]);
end% 添加图例、标签和标题
legend show;
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Elliptic Filter Frequency Response (Different Orders)');
grid on;
hold off;
总结
本文中给出了滤波器设计时的指标,并且根据逼近模拟滤波器的方法设计数字滤波器的过程。其中通过模拟滤波器传递函数转换为数字滤波器的传递函数有两种方法:冲激响应不变法、双线性交换法。这两种方法各有优缺点和应用场景。
在文章最后,给出了常见的三种模拟滤波器以及通过matlab画出的幅频响应,那么下一章中,将使用巴特沃斯滤波器通过冲激响应不变法设计出一个低通滤波器。
反正收藏也不会看,不如点个赞吧!
相关文章:
音频进阶学习二十四——IIR滤波器设计方法
文章目录 前言一、滤波器设计要求1.选频滤波器种类2.通带、阻带、过度带3.滤波器设计指标 二、IIR滤波器的设计过程1.设计方法2.常见的模拟滤波器设计1)巴特沃斯滤波器(Butterworth Filter)2)切比雪夫滤波器(Chebyshev…...
OpenBMC:BmcWeb 处理http请求2 查找路由对象
OpenBMC:BmcWeb 处理http请求1 生成Request和AsyncResp对象_bmc web-CSDN博客 当接收到http请求,并且完成解析后,调用了App::handle处理请求 而App::handle又调用了router.handle(req, asyncResp);来处理请求 1.Router::handle void handle(const std::shared_ptr<Requ…...
MVC编程
MVC基本概述 例子——显示本地文件系统结构 先分别拖入ListView,TableView,TreeView 然后在进行布局 在widget.cpp 结果 mock测试 1,先加入json测试对象 2.创建后端目录 3,在src添加新文件 在models文件夹里 在mybucket.h,添加测试用例的三个字段 4.在…...
怎么对asp.web api进行单元测试?
在 ASP.NET Web API 中进行单元测试是一种确保代码质量和功能正确性的重要实践。单元测试的重点是针对 API 控制器中的逻辑进行测试,而不依赖于外部依赖(如数据库、文件系统或网络请求)。以下是实现 ASP.NET Web API 单元测试的步骤和方法&am…...
Qt进阶开发:对象树与拥有权
文章目录 一、对象树的概念二、对象拥有权(Ownership)三、Qt Widgets 中的特殊情况四、对象树与拥有权的实例 一、对象树的概念 在 Qt 中,对象树(Object Tree)与对象的拥有权(Ownership)密切相…...
Django:构建高性能Web应用
引言:为何选择Django? 在当今快速发展的互联网时代,Web应用的开发效率与可维护性成为开发者关注的核心。Django作为一款基于Python的高级Web框架,以其"开箱即用"的特性、强大的ORM系统、优雅的URL路由设计,…...
C语言基础系列【32】指针进阶5:指针与常量
博主介绍:程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇…...
TS 中 interface 和 type 详解
在 TypeScript 中,interface 和 type 都可以用来定义类型,但它们有一些关键的区别。以下是它们的详细对比: 1. 基本定义 interface 用于声明对象的形状(属性和方法),是面向对象编程中“接口”概念的体现。 …...
文法 2025/3/3
文法的定义 一个文法G是一个四元组:G(,,S,P) :一个非空有限的终极符号集合。它的每个元素称为终极符号或终极符,一般用小写字母表示。终极符号是一个语言不可再分的基本符号。 :一个非空有限的非终极符号集合。它的每个元素称为…...
蚂蚁集团主导的ISO密码学国际标准立项,纳入国产算法
蚂蚁集团主导的ISO密码学国际标准 ISO 25330-3 立项, 国产算法Ferret成为标准方案。 近日,在美国弗吉尼亚州举行的 ISO/IEC JTC 1/SC 27 全体会议上,ISO/IEC 25330第三部分《Information Security — Oblivious Transfer — Part 3: Obliv…...
nginx的用户认证
[rootserver100 html]# htpasswd -cm /usr/local/nginx/.htpasswd lee 创建用户给密码 编写nginx的配置文件 [rootserver100 html]# echo lee > /data/web/lee/index.html 写入实验内容 访问成功 用户访问认证的设定 用户认证的设定成功...
为什么要指针压缩,为什么能指针压缩?原理是什么?
指针压缩(Compressed Oops)的原理与实现 指针压缩是 JVM 在 64 位环境 下优化内存占用的关键技术,通过减少对象指针的内存开销,提升缓存利用率和性能。以下是其核心原理与设计细节: 一、为什么要指针压缩?…...
pyproj 库中Geod类—geod.npts()方法讲解
二、pyproj 库中Geod类geod.npts()方法讲解 geod.npts() 方法用于在起点和终点之间生成沿测地线均匀分布的中间点 示例演示 from pyproj import Geod# 初始化 WGS84 椭球体 geod Geod(ellps"WGS84")# 起点:北京 (116.4, 39.9),终点ÿ…...
使用DeepSeek API进行情感分析:超简单
文章目录 1. 引言1.1 情感分析概述1.2 为什么选择DeepSeek API1.3 本文目标 2. 技术方案对比2.1 传统情感分析方法2.2 基于LLM的方法DeepSeek API优势 3. DeepSeek 情感分析实战3.1 Few-shot Learning方法3.2 完整的DeepSeek API调用示例3.3 案例演示 4. DeepSeek开发情感分析工…...
一套SaaS多租户医疗云his源码,基于云计算的医院信息管理系统(云HIS)
基于云计算的医院信息管理系统(云HIS),通过SaaS服务模式提供。这种云HIS系统设计考虑了模板化、配置化、智能化和可扩展性,覆盖了基层医疗机构的核心工作流程,并且能够与监管系统无缝对接,满足未来的扩展需…...
数据处理与机器学习入门
一、数据处理概述 数据处理是通过统计学、机器学习和数据挖掘方法从原始数据中提取有价值信息的过程。数据处理的目标是将杂乱无章的原始数据转化为可用于分析和建模的结构化数据。对于小规模数据处理,常用工具分为两类: • 可视化分析工具:…...
Qt中绘制不规则控件
在Qt中绘制不规则控件可通过设置遮罩(Mask)实现。以下是详细步骤: 继承目标控件:如QPushButton或QWidget。重写resizeEvent:当控件大小变化时,更新遮罩形状。创建遮罩区域:使用QRegion或QPain…...
【SPP】深入解析蓝牙 L2CAP 协议在SPP中的互操作性要求 —— 构建可靠的蓝牙串口通信基础
在蓝牙协议体系中,L2CAP(Logical Link Control and Adaptation Protocol)作为基带协议与高层协议之间的桥梁,承担着数据分帧、协议复用、QoS协商等核心功能。当涉及串行端口通信时,L2CAP的规范实现直接决定了设备间数据…...
21 模板方法(Template Method)模式
模板方法模式 1.1 分类 (类)行为型 1.2 提出问题 做一款数据挖掘的程序,需要支持不同格式的数据文件,虽然文件格式不同,实现步骤基本一致。 1.3 解决方案 定义一个算法骨架,而将一些步骤延迟到子类。…...
一些练习 C 语言的小游戏
一些练习 C 语言的小游戏 — 1. 猜数字游戏 描述:程序随机生成一个数字,玩家需要猜测这个数字,并根据提示(太高或太低)调整猜测,直到猜中为止。 功能点: 随机数生成 (rand() 函数)。循环和…...
【AI News | 20250331】每日AI进展
AI Repos 1、MCP-Chinese-Getting-Started-Guide 模型上下文协议(MCP)是一个创新的开源协议,旨在标准化大语言模型(LLM)与外部数据源及工具的连接方式,类似AI应用的“USB-C接口”。其核心功能包括资源、提…...
程序化广告行业(45/89):RTB竞价后续流程、结算规则及相关要点解读
程序化广告行业(45/89):RTB竞价后续流程、结算规则及相关要点解读 大家好!一直以来,我都希望能和大家一起在程序化广告这个领域不断探索、共同成长,这也是我写这系列博客的初衷。之前我们了解了程序化广告…...
Python人工智能大模型入门教程:从零构建高性能预测模型
引言:AI大模型时代的技术革命 在AlphaGo战胜人类棋手的里程碑事件后,人工智能技术进入爆发式发展阶段。本教程将带您从零开始,使用Python构建一个工业级神经网络模型。通过本教程,您不仅能掌握GPU加速训练、混合精度计算等前沿技…...
C++/数据结构:哈希表知识点
目录 哈希表 理解哈希表 哈希值(整形) BKDR哈希 异或组合 hash_combine 哈希函数 直接定址法 除留余数法 平方取中法 基数转换法 哈希冲突 开放定址法 哈希桶 unordered_map和unorder_set如何共用一个哈希桶模板类 stl的哈希桶中Insert如…...
基于SpringBoot的求职招聘网站系统(源码+数据库)
473基于SpringBoot的求职招聘网站系统,本系统共分为2个角色:系统管理员、用户,主要功能如下 【前台功能】 用户角色功能: 1. 注册和登录:注册账户并登录系统,以便访问更多功能。 2. 个人信息管理&#x…...
Linux : System V 共享内存
目录 一 前言 二 共享内存概念 三 共享内存创建 四 查看共享内存 五 共享内存的删除 六 共享内存的关联 七 共享内存去关联 八 共享内存的使用(通信) 九 共享内存的特点 一 前言 共享内存区是最快的IPC形式(进程间通信࿱…...
端到端语音识别案例
《DeepSeek大模型高性能核心技术与多模态融合开发(人工智能技术丛书)》(王晓华)【摘要 书评 试读】- 京东图书 语音识别这一技术正如其名,是通过精密地解析说话人的语音来识别并准确转写出其所说的内容。它不仅仅是一个简单的转录过程&#…...
【软件系统架构】微服务架构
一、引言 随着互联网技术的快速发展,传统的单体应用架构在面对复杂业务需求时逐渐暴露出诸多问题,如开发效率低、部署困难、扩展性差等。为了解决这些问题,微服务架构应运而生。本文将详细介绍微服务架构的定义、发展历史、特点、细分类型、优…...
【Kafka】消费者幂等性保障全解析
文章目录 消费者幂等性的重要性基于消息唯一标识的幂等处理消息去重表缓存去重 基于事务的幂等处理消费者事务与幂等性 幂等性保障的挑战与应对性能开销数据一致性 总结 在 Kafka 生态系统中,我们往往着重关注生产者端的幂等性,确保…...
Linux内核设计——(一)进程管理
目录 一、进程及线程简介 二、进程描述符 2.1 进程描述符简介 2.2 分配进程描述符 2.3 进程标识值 2.4 进程状态 2.5 进程上下文 三、进程创建 3.1 写时拷贝 3.2 fork()和vfork() 四、线程 4.1 Linux线程实现 4.2 内核线程 五、进程终结 5.1 删除进程描述符 5.…...
