数字滤波器设计---FIR 滤波器设计

news2024/11/26 5:23:30

数字滤波器设计---FIR 滤波器设计

FIR 滤波器与 IIR 滤波器的比较

与无限持续时间冲激响应 (IIR) 滤波器相比,具有有限持续时间冲激响应的数字滤波器(全零或 FIR 滤波器)既有优点又有缺点。

FIR 滤波器具有以下主要优点:

  • 它们可以具有精确的线性相位。

  • 它们始终稳定。

  • 设计方法通常是线性的。

  • 它们可以在硬件中高效实现。

  • 滤波器启动瞬态具有有限持续时间。

FIR 滤波器的主要缺点是,要达到同样的性能水平,其所需阶数远高于 IIR 滤波器。相应地,这些滤波器的延迟通常比同等性能的 IIR 滤波器大得多。

FIR 滤波器概述

FIR 滤波器

滤波器设计方法

描述

滤波器函数

加窗

对指定的矩形滤波器的截断傅里叶逆变换应用加窗

fir1, fir2, kaiserord

多频带(包含过渡带)

对频率范围的子带使用等波纹或最小二乘方法

firls, firpm, firpmord

约束最小二乘

根据最大误差约束,在整个频率范围内最小化平方积分误差

fircls, fircls1

任意响应

任意响应,包括非线性相位和复滤波器

cfirpm

升余弦

具有平滑正弦过渡的低通响应

rcosdesign

线性相位滤波器

除 cfirpm 外,所有 FIR 滤波器设计函数都只设计线性相位滤波器。这些滤波器系数或“抽头”遵循偶数或奇数对称关系。根据这种对称性以及滤波器的阶数 n 是偶数还是奇数,线性相位滤波器(存储在长度为 n +1 的向量 b 中)对其频率响应有一定的固有限制。

线性相位滤波器类型滤波器阶数系数的对称性响应 H(f)、f = 0响应 H(f)、f = 1(奈奎斯特)

I 类

偶数

偶数:

b(k)=b(n+2−k), k=1,...,n+1

无限制

无限制

II 类

奇数

偶数:

b(k)=b(n+2−k), k=1,...,n+1

无限制

H(1) = 0

III 类

偶数

奇数:

b(k)=−b(n+2−k), k=1,...,n+1

H(0) = 0

H(1) = 0

IV 类

奇数

奇数:

b(k)=−b(n+2−k), k=1,...,n+1

H(0) = 0

无限制

线性相位 FIR 滤波器的相位延迟和群延迟在整个频带内相等且恒定。对于 n 阶线性相位 FIR 滤波器,群延迟为 n/2,滤波后的信号延迟 n/2 个时间步(其傅里叶变换的幅值按滤波器的幅值响应进行缩放)。该属性保持通带中信号的波形;也就是说,没有相位失真。

默认情况下,函数 fir1、fir2、firls、firpm、fircls 和 fircls1 都可用于设计 I 类和 II 类线性相位 FIR 滤波器。rcosdesign 只用于设计 I 类滤波器。在给定 'hilbert' 或 'differentiator' 标志的情况下,firls 和 firpm 都可用于设计 III 和 IV 类线性相位 FIR 滤波器。cfirpm 可用于设计任何类型的线性相位滤波器和非线性相位滤波器。

注意

由于 II 类滤波器在奈奎斯特频率(“高”频率)下的频率响应为零,fir1 不用于设计 II 类高通和带阻滤波器。在这些情况下,如果 n 为奇数值,fir1 将阶加 1,并返回 I 类滤波器。

加窗方法

假设一个截止频率为 ω0 弧度/秒的理想的矩形数字低通滤波器。该滤波器在幅值小于 ω0 的所有频率上都具有幅值 1,在幅值介于 ω0 和 π 之间的频率上具有幅值 0。其冲激响应序列 h(n) 为

h(n)=12π∫π−πH(ω)ejωndω=12π∫ω0−ω0ejωndω=sinω0nπn

该滤波器不可实现,因为它的冲激响应是无限的和非因果的。要创建有限持续时间冲激响应,请通过应用加窗来截断它。通过在此截断中保留冲激响应的中心部分,可以获得线性相位 FIR 滤波器。例如,一个低通截止频率 ω0 为 0.4 π 弧度/秒的、长度为 51 的滤波器为

b = 0.4*sinc(0.4*(-25:25));

此处应用的加窗是简单的矩形窗。根据 Parseval 定理,长度为 51 的滤波器在积分最小二乘意义上最接近理想的低通滤波器。以下命令在 FVTool 中显示滤波器的频率响应:

fvtool(b,1)

请注意,下图中显示的 y 轴采用幅值的二次方。您可以通过右键点击轴标签并从菜单中选择幅值平方来进行此设置。

响应中会出现振铃和波纹,尤其是在频带边缘附近。这种“吉布斯效应”不会随着滤波器长度的增加而消失,但非矩形窗会减小其幅值。在时域中将信号乘以一个窗函数会使信号在频域中发生卷积或平滑。将长度为 51 的汉明窗应用于滤波器,并使用 FVTool 显示结果:

b = 0.4*sinc(0.4*(-25:25));
b = b.*hamming(51)';
fvtool(b,1)

请注意,下图中显示的 y 轴采用幅值的二次方。您可以通过右键点击轴标签并从菜单中选择幅值平方来进行此设置。

使用汉明窗可以大大降低振铃。这一改善以过渡带宽度和最优性为代价:加窗的滤波器需要更长时间从通带下降到阻带,且无法最小化平方误差积分。

标准频带 FIR 滤波器设计:fir1

fir1 使用最小二乘逼近计算滤波器系数,然后通过加窗对冲激响应进行平滑处理。有关加窗及其属性的概述,请参阅加窗法。fir1 类似于 IIR 滤波器的设计函数,因为它用于设计标准频带配置(低通、带通、高通和带阻)条件下的滤波器。

以下语句

n = 50;
Wn = 0.4;
b = fir1(n,Wn);

创建行向量 b,其中包含 n 阶汉明窗滤波器的系数。这是一个低通线性相位 FIR 滤波器,截止频率为 WnWn 是介于 0 和 1 之间的数字,其中 1 对应于奈奎斯特频率,即采样频率的一半。(与其他方法不同,此处 Wn 对应于 6 dB 点。)要获得高通滤波器,只需将 'high' 添加到函数的参数列表中。要获得带通或带阻滤波器,请将 Wn 指定为包含通带边缘频率的二元素向量。为带阻配置追加 'stop'

b = fir1(n,Wn,window) 使用列向量 window 中指定的窗口进行设计。向量 window 的长度必须为 n+1 个元素。如果未指定窗口,fir1 将应用汉明窗。

凯塞窗阶估计.  kaiserord 函数估计滤波器阶数、截止频率和凯塞窗 β 参数,使之满足一组给定的滤波器设定。在给定频带边缘向量和对应的幅值向量以及最大允许波纹的情况下,kaiserord 为 fir1 函数返回适当的输入参数。

多频带 FIR 滤波器设计:fir2

fir2 函数还可用于设计加窗的 FIR 滤波器,但具有任意形状的分段线性频率响应。这与 fir1 不同,后者仅设计具有标准低通、高通、带通和带阻配置的滤波器。

以下命令

n = 50;
f = [0 .4 .5 1];
m = [1  1  0 0];
b = fir2(n,f,m);

返回行向量 b,其中包含 n 阶 FIR 滤波器的 n+1 个系数,其频率幅值特征与向量 f 和 m 给出的频率幅值特征相匹配。f 是频率点的向量,范围从 0 到 1,其中 1 代表奈奎斯特频率。m 是向量,包含 f 中指定点的指定幅值响应。(该函数的对应 IIR 函数是 yulewalk,后者还可基于任意分段线性幅值响应设计滤波器。有关详细信息,请参阅 IIR 滤波器设计。)

具有过渡带的多频带 FIR 滤波器设计

与 fir1 和 fir2 函数相比,firls 和 firpm 函数提供更通用的指定理想滤波器的方法。这些函数用于设计希尔伯特变换器、微分器和其他具有奇数对称系数(III 类和 IV 类线性相位)的滤波器。它们还允许您包括误差没有最小化的过渡或“不重要”区域,并执行最小化的频带相关加权。

firls 函数是 fir1 和 fir2 函数的扩展,它用于最小化指定频率响应和实际频率响应之间误差平方的积分。

firpm 函数实现帕克斯-麦克莱伦算法,该算法使用雷米兹交换算法和切比雪夫逼近理论来设计在指定频率响应和实际频率响应之间具有最佳拟合的滤波器。这种滤波器可最小化指定频率响应和实际频率响应之间的最大误差,从这种意义上而言,它们是最优的滤波器;它们有时被称为 minimax 滤波器。以这种方式设计的滤波器在频率响应方面表现出等波纹特性,因此也称为等波纹滤波器。帕克斯-麦克莱伦 FIR 滤波器设计算法可能是最流行和最广泛使用的 FIR 滤波器设计方法。

firls 和 firpm 的语法相同;唯一的区别体现在最小化方案上。下一个示例说明用 firls 和 firpm 设计的滤波器如何反映这些不同方案。

基本配置

firls 和 firpm 的默认操作模式是设计 I 类或 II 类线性相位滤波器,具体取决于您所需的阶是偶数还是奇数。以下低通示例在 0 到 0.4 Hz 逼近振幅 1,在 0.5 到 1.0 Hz 逼近振幅 0:

n = 20;                    % Filter order
f = [0 0.4 0.5 1];         % Frequency band edges
a = [1  1  0 0];           % Amplitudes
b = firpm(n,f,a);

从 0.4 Hz 到 0.5 Hz,firpm 不执行误差最小化;这是一个过渡带或“不重要”区域。过渡带将您关心的频带中的误差降至最低,但代价是过渡速率变慢。在这种方式下,这些类型的滤波器具有固有折衷,类似于加窗的 FIR 设计。

要将最小二乘与等波纹滤波器设计进行比较,请使用 firls 创建一个类似的滤波器。键入

bb = firls(n,f,a);

并使用 FVTool 比较其频率响应:

fvtool(b,1,bb,1)

请注意,下图中显示的 y 轴采用幅值的二次方。您可以通过右键点击轴标签并从菜单中选择幅值平方来进行此设置。

使用 firpm 设计的滤波器表现出等波纹行为。另请注意,firls 滤波器在大部分通带和阻带上都有更好的响应,但在频带边缘(f = 0.4 和 f = 0.5)处,响应不如 firpm 滤波器的响应理想。这表明,firpm 滤波器在通带和阻带上的最大误差较小,事实上,对于该频带边缘配置和滤波器长度来说,这是可能的最小值。

可以将频带视为短频率区间内的线。firpm 和 firls 使用此方案来表示具有任何过渡带的任何分段线性频率响应函数。firls 和 firpm 用于设计低通、高通、带通和带阻滤波器;以下是一个带通示例

f = [0 0.3  0.4  0.7  0.8  1];   % Band edges in pairs
a = [0  0    1    1    0   0];   % Bandpass filter amplitude

从技术上讲,这些 f 和 a 向量定义五个频带:

  • 两个阻带,从 0.0 到 0.3 和从 0.8 到 1.0

  • 一个通带,从 0.4 到 0.7

  • 两个过渡带,从 0.3 到 0.4 和从 0.7 到 0.8

以下为高通和带阻滤波器的示例

f = [0 0.7  0.8  1];            % Band edges in pairs
a = [0  0    1   1];            % Highpass filter amplitude
f = [0 0.3  0.4  0.5  0.8  1];  % Band edges in pairs
a = [1  1    0    0    1   1];  % Bandstop filter amplitude

以下是多频带带通滤波器的示例

f = [0 0.1 0.15 0.25 0.3 0.4 0.45 0.55 0.6 0.7 0.75 0.85 0.9 1];
a = [1  1   0    0    1   1   0    0    1   1   0    0    1  1];

另一种可能的滤波器具有连接通带和阻带的线作为过渡区域;这有助于控制宽过渡区域的“失控”幅值响应:

f = [0 0.4 0.42 0.48 0.5  1];
a = [1 1 0.8 0.2 0 0];   % Passband, linear transition, 
                         %  stopband
权重向量

firls 和 firpm 都允许您有所侧重地将某些频带的误差降至最低。为此,请在频率和振幅向量后指定权重向量。在以下低通等波纹滤波器示例中,阻带中的波纹比通带中的小 10 倍

n = 20;              % Filter order
f = [0 0.4 0.5 1];   % Frequency band edges
a = [1  1   0  0];   % Amplitudes
w = [1 10];          % Weight vector
b = firpm(n,f,a,w);

合法权重向量始终是 f 和 a 向量长度的一半;每个频带只能有一个对应权重。

反对称滤波器/希尔伯特变换器

当用尾部 'h' 或 'Hilbert' 选项调用时,firpm 和 firls 会设计奇对称的 FIR 滤波器,即 III 类(偶数阶)或 IV 类(奇数阶)线性相位滤波器。理想的希尔伯特变换器具有这种反对称属性,且在整个频率范围内振幅为 1。尝试以下逼近希尔伯特变换器,并使用 FVTool 对其绘图:

b = firpm(21,[0.05 1],[1 1],'h');       % Highpass Hilbert
bb = firpm(20,[0.05 0.95],[1 1],'h');   % Bandpass Hilbert
fvtool(b,1,bb,1)

通过这些滤波器,您可以求得信号 x 的延迟希尔伯特变换。

fs = 1000;            % Sampling frequency
t = (0:1/fs:2)';      % Two second time vector
x = sin(2*pi*300*t);  % 300 Hz sine wave example signal
xh = filter(bb,1,x);  % Hilbert transform of x

对应于 x 的分析信号是以 x 为实部、以 x 的希尔伯特变换为虚部的复信号。对于这种 FIR 方法(hilbert 函数的替代方法),您必须将 x 延迟一半滤波器阶数才能创建分析信号:

xd = [zeros(10,1); x(1:length(x)-10)];	    % Delay 10 samples
xa = xd + j*xh;                            % Analytic signal

这种方法不能直接用于奇数阶滤波器,因为奇数阶滤波器需要非整数延迟。在这种情况下,希尔伯特变换中所述的 hilbert 函数可估算解析信号。或者,使用 resample 函数将信号延迟非整数个样本。

微分器

信号在时域中的微分等效于信号的傅里叶变换乘以虚斜坡函数。也就是说,要对信号求导,请将其传递给具有响应 H(ω) = jω 的滤波器。使用 firpm 或 firls 和 'd' 或 'differentiator' 选项逼近理想的微分器(有延迟):

b = firpm(21,[0 1],[0 pi],'d');

对于 III 类滤波器,微分频带不应超过奈奎斯特频率,振幅向量必须反映此变化,以确保斜率正确:

bb = firpm(20,[0 0.9],[0 0.9*pi],'d');

在 'd' 模式下,firpm 在非零振幅频带中对误差加权 1/ω,以最小化最大相对误差。在 'd' 模式下,firls 在非零振幅频带中对误差加权 (1/ω)2。

下图显示上述微分器的幅值响应。

fvtool(b,1,bb,1)
legend('Odd order','Even order','Location','best')

约束最小二乘 FIR 滤波器设计

使用约束最小二乘 (CLS) FIR 滤波器设计函数时,您无需显式定义幅值响应过渡带即可设计 FIR 滤波器。省略过渡带设定的功能在很多情况下都很有用。例如,如果噪声和信号信息一起出现在同一个频带中,可能不清楚严格定义的过渡带应该出现在哪里。同样,如果过渡带的出现仅仅是为了控制滤波器响应中出现的吉布斯现象的结果,则可以省略过渡带设定。有关这种方法的讨论,请参阅 Selesnick、Lang 和 Burrus·[2]。

对于您指定的响应,CLS 方法不定义通带、阻带和过渡区域,而是接受截止频率(对于高通、低通、带通或带阻情况)或者通带和阻带边缘(对于多频带情况)。通过这种方式,CLS 方法可以隐式(而不是显式)定义过渡区域。

CLS 方法的主要特点是它使您能够定义上阈值和下阈值,其中包含幅值响应中允许的最大波纹。在给定此约束的情况下,该方法在滤波器响应的频率范围内(而不是在特定频带上)应用最小二乘误差最小化方法。误差最小化包括理想的矩形响应中的任何不连续区域。另一个好处是,该方法使您能够指定吉布斯现象产生的任意小的峰值。

有两个工具箱函数可实现这种设计方法。

描述

函数

约束最小二乘多频带 FIR 滤波器设计

fircls

低通和高通线性相位滤波器的约束最小二乘滤波器设计

fircls1

有关这些函数的调用语法的详细信息,请参阅函数参考中相应的参考说明。

基本低通和高通 CLS 滤波器设计

最基本的 CLS 设计函数 fircls1 使用这种方法设计低通和高通 FIR 滤波器。例如,假设您要设计一个 61 阶冲激响应滤波器,其截止频率为 0.3(归一化形式)。此外,还需要将约束设计过程的上限和下限定义为:

  • 与 1 的最大通带偏差(通带波纹)为 0.02。

  • 与 0 的最大阻带偏差(阻带波纹)为 0.008。

要使用 fircls1 逼近此设计问题,请使用以下命令:

n = 61;
wo = 0.3;
dp = 0.02;	
ds = 0.008;
h = fircls1(n,wo,dp,ds);
fvtool(h,1)

请注意,下面显示的 y 轴以幅值平方表示。您可以通过右键点击轴标签并从菜单中选择幅值平方来进行此设置。

多频带 CLS 滤波器设计

fircls 使用相同的方法设计具有指定分段常量幅值响应的 FIR 滤波器。在本例中,您可以指定频带边缘的向量和对应的频带振幅向量。此外,您可以指定每个频带的最大波纹量。

例如,假设滤波器调用的设定为:

  • 从 0 到 0.3(归一化):振幅 0,上限 0.005,下限 –0.005

  • 从 0.3 到 0.5:振幅 0.5,上限 0.51,下限 0.49

  • 从 0.5 到 0.7:振幅 0,上限 0.03,下限 –0.03

  • 从 0.7 到 0.9:振幅 1,上限 1.02,下限 0.98

  • 从 0.9 到 1:振幅 0,上限 0.05,下限 –0.05

设计一个冲激响应阶数为 129 的 CLS 滤波器,满足以下设定:

n = 129;
f = [0 0.3 0.5 0.7 0.9 1];
a = [0 0.5 0 1 0];
up = [0.005 0.51 0.03 1.02 0.05];
lo = [-0.005 0.49 -0.03 0.98 -0.05];
h = fircls(n,f,a,up,lo);
fvtool(h,1)

请注意,下面显示的 y 轴以幅值平方表示。您可以通过右键点击轴标签并从菜单中选择幅值平方来进行此设置。

加权 CLS 滤波器设计

加权 CLS 滤波器设计可用于设计低通或高通 FIR 滤波器,每个频带中具有误差最小化的相对加权。您可以使用 fircls1 函数指定最小二乘加权函数的通带和阻带边缘,还可指定表示阻带与通带加权比率的常数 k

例如,假设要设计一个冲激响应阶数为 55、归一化截止频率为 0.3 的 FIR 滤波器。还假设最大允许通带波纹为 0.02,最大允许阻带波纹为 0.004。此外,还需要添加以下加权要求:

  • 权重函数为 0.28(归一化)的通带边缘

  • 权重函数为 0.32 的阻带边缘

  • 阻带中的加权误差最小化是通带中的 10 倍

要使用 fircls1 逼近此问题,请键入

n = 55;
wo = 0.3;
dp = 0.02;
ds = 0.004;
wp = 0.28;
ws = 0.32;
k = 10;
h = fircls1(n,wo,dp,ds,wp,ws,k);
fvtool(h,1)

请注意,下面显示的 y 轴以幅值平方表示。您可以通过右键点击轴标签并从菜单中选择幅值平方来进行此设置。

任意响应滤波器设计

cfirpm 滤波器设计函数为设计具有任意复响应的 FIR 滤波器提供工具。它与其他滤波器设计函数的不同之处在于如何指定滤波器的频率响应:它接受函数的名称,该函数返回在频率网格上计算的滤波器响应。这种能力使 cfirpm 成为一种高度通用和强大的滤波器设计方法。

这种设计方法可用于生成非线性相位 FIR 滤波器、不对称频率响应滤波器(具有复系数)或更多具有自定义频率响应的对称滤波器。

该设计算法使用扩展的雷米兹交换算法优化切比雪夫(或 minimax)误差来获得初始估计值。如果使用这种交换算法未能获得最佳滤波器,将改用上升-下降算法继续以收敛至最佳解。

多频带滤波器设计

以具有以下特殊频域特征的多频带滤波器为例。

频带

振幅

优化权重

[–1 –0.5]

[5 1]

1

[–0.4 +0.3]

[2 2]

10

[+0.4 +0.8]

[2 1]

5

可以使用预定义的频率响应函数 multiband 设计线性相位多频带滤波器,如下所示:

b = cfirpm(38, [-1 -0.5 -0.4 0.3 0.4 0.8], ...
               {'multiband', [5 1 2 2 2 1]}, [1 10 5]);

对于多频带滤波器的特定情况,我们可以使用类似于 firpm 语法的简化滤波器设计表示法:

b = cfirpm(38,[-1 -0.5 -0.4 0.3 0.4 0.8], ...
              [5 1 2 2 2 1], [1 10 5]);

与 firpm 一样,频带边缘向量被传递给 cfirpm。该向量定义执行优化的频带;请注意,有两个过渡带,从 –0.5 到 –0.4 和从 0.3 到 0.4。

采用上述任一方法,您都可以获得频率响应,并在 FVTool 中使用线性刻度绘制响应:

fvtool(b,1)

请注意,下面显示的数据范围是 (-pi,pi)

此多频带滤波器具有复数响应,这是预期的结果,因为频域不对称。您也可以从 FVTool 工具栏中选择绘制冲激响应,如下所示。

减少延迟的滤波器设计

假设要设计一个具有半奈奎斯特截止频率的 62 抽头低通滤波器。如果我们为 lowpass 滤波器设计函数指定一个负偏移值,则该设计的群延迟偏移会明显小于标准线性相位设计的群延迟偏移。此滤波器设计的计算如下:

b = cfirpm(61,[0 0.5 0.55 1],{'lowpass',-16});

由此产生的幅值响应为

fvtool(b,1)

y 轴采用幅值平方,您可以通过右键点击轴标签并从菜单中选择幅值平方来进行此设置。

滤波器的群延迟显示偏移已从 N/2 减小到 N/2-16(即从 30.5 到 14.5)。然而,现在通带区域中的群延迟不再平坦。要创建此图,请点击工具栏上的群延迟响应按钮。

如果我们将此非线性相位滤波器与有精确的 14.5 个样本的群延迟的线性相位滤波器进行比较,得到的滤波器的阶数为 2*14.5,即 29。使用 b = cfirpm(29,[0 0.5 0.55 1],'lowpass') 时,29 阶滤波器的通带和阻带波纹要大得多。这些比较可以帮助您决定哪种滤波器更适合特定的应用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java中的反射机制

获取字节码文件对象的三种方式 1,(常用)源代码阶段,Class.forName("全类名") 2,(传参)加载阶段 类名.class 3,(前提有对象)运行阶段 对象.getClas…

LeetCode算法心得——全排列(回溯型排列)

大家好,我是晴天学长,排列型的回溯,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1) .全排列 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按…

外贸企业GMS认证|SD-WAN专线解决方案支持 IPv6、IPv4

IP地址是英文internet protocol的缩写,是网络之间互连的协议。互联网诞生后,很长一段时间都是使用v4版本的IP协议,也就是 IPv4 ,目前全球使用互联网的人数达到了48.8亿,而IPv4的地址库总共约43亿个地址,每个…

CCLink转Modbus TCP网关_MODBUS报文配置

兴达易控CCLink转Modbus TCP网关是一种功能强大的设备,可实现两个不同通信协议之间的无缝对接。它能够将CCLink协议转换为Modbus TCP协议,并通过报文配置实现灵活的通信设置。兴达易控CCLink转Modbus TCP网关可以轻松实现CCLink和Modbus TCP之间的数据转…

竞赛 车道线检测(自动驾驶 机器视觉)

0 前言 无人驾驶技术是机器学习为主的一门前沿领域,在无人驾驶领域中机器学习的各种算法随处可见,今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂,看上去无从下手。那么面对这样极其…

2011年09月06日 Go生态洞察:Go语言的反射法则

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

STM32——STM32F4系统架构

文章目录 前言STM32F4XX系统架构 前言 本篇文章为STM32F4系列的系统架构,因为最近在学习F4的板子,暂时先更F4的,有需要F1的后续再更新。 主系统由 32 位多层 AHB 总线矩阵构成,可实现以下部分的互连: STM32F4XX系统架…

(自适应移动端)响应式门窗定制pbootcms板 门窗门业网站板下载-带视频功能

(自适应移动端)响应式门窗定制pbootcms模板 门窗门业网站模板下载-带视频功能 PbootCMS内核开发的网站模板,该模板适用于门窗门业网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可; 自适应移动端,…

款网络拓扑自动扫描工具

Topology-Scanner是WeOps团队免费开放的一个网络拓扑自动扫描模块,可以自动发现网络设备的类型、网络设备之间的互联 使用方式 java -jar ./topology-scanner.jar --config_path./config/ 配置说明 1. 拓扑发现请求参数文件(request.json) ips [全网发现] 模式时…

2023/11/10 JAVA学习

取文件夹本身大小 打开文件 文件改名案例 输出流,文件依照你起的文件名自动创建 哪个流后创建,哪个流先关闭 虚拟机退出跑不了 finally别返回值

记一次上位机软件线程泄露的分析及解决

上位机软件在客户现场隔一段时间说操作了没反应,但是上位机又没死,出现了一些奇怪现象: 左上角的时间不走了(本来是1s运行一次)使用任务管理器查看,内存占用1.5G,线程有3000多个,正常情况下&am…

【chat】2:vs2022 连接远程ubuntu服务器远程cmake开发

大神们是使用vs远程连接和调试的:C++搭建集群聊天室(三):配置远程代码编辑神器 VScode我尝试过vs++ 和 clion 都不错。在 Visual Studio 中配置 Linux CMake 项目 比较麻烦的就是要配置CMakeSettings.json ,而且会自动做复制指定远程 Linux 目标,则会将源复制到远程系统 …

【K8s集群离线安装-kubeadm】

1、kubeadm概述 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。这个工具能通过两条指令快速完成一个kubernetes集群的部署。 2、环境准备 2.1 软件环境 软件版本操作系统CentOS 7Docker19.03.13K8s1.23 2.2 服务器 最小硬件配置:2核CPU、2G内存…

软件研发团队适用的项目管理工具推荐

Zoho Projects是一款专为大型产研团队设计的项目管理工具,它也是许多软件开发行业高速成长背后的生产线。与其他项目管理产品相比,Zoho Projects最大的不同之处在于其独特的流程设计。在软件上线初期,Zoho Projects能够有效地帮助软件研发公司…

xcorr函数的用法和程序举例

xcorr函数的用法和程序举例 xcorr函数返回两个离散时间序列的互相关。互相关测量向量 x 和移位(滞后)副本向量y 的之间的相似性,形式为滞后的函数。如果 x 和 y 的长度不同,函数会在较短向量的末尾添加零,使其长度与另…

代码随想录-广度优先搜索理论基础及相关习题

广度优先搜索理论基础 广搜的搜索方式就适合于解决两个点之间的最短路径问题。因为广搜是从起点出发,以起始点为中心一圈一圈进行搜索,一旦遇到终点,记录之前走过的节点就是一条最短路。 广搜是一圈一圈的遍历方式,如下图&#x…

香港科技大学广州|机器人与自主系统学域博士招生宣讲会—武汉大学专场!!!(暨全额奖学金政策)

在机器人和自主系统领域实现全球卓越—机器人与自主系统学域 硬核科研实验室,浓厚创新产学研氛围! 教授亲临现场,面对面答疑解惑助攻申请! 一经录取,享全额奖学金1.5万/月! 🕙时间:…

C#时间类的使用方法

在C#编程中,日期和时间的处理是常见的任务之一。C#提供了多个类来处理日期、时间和时区的操作,包括DateTime、TimeSpan和DateTimeOffset。 目录 1. DateTime类1.1 创建DateTime对象1.2 获取日期和时间信息1.3 格式化日期和时间1.4 比较日期和时间 2. Tim…

The Sandbox于香港举办全球首个创作者日,推出「公开发布」功能,并为 GameMakerFund提供1亿$SAND基金!

新的 NFT 铸造、无需编码的 Game Maker 软件升级、其他支持 Web3 创作者的功能优化。 2023 年 11 月 3 日——The Sandbox 举办了首届全球创作者日活动,并在活动期间宣布了其在 2024 年的计划,包括为创作者赋能,在地图上呈现 2000 个用户生成…

Unity 制作血量滑动条(Slider)

1.创建UI slider 层级面板点击右键-UI-slider 2.调整UI位置 选择2D视图,调整锚点和滑动条位置 3.PS中制作UI 导出2个图层,PNG格式。 4.改成精灵模式(sprite2d) 把两个PNG导入Unity仓库中,选中两个图,右…