实验七 用 MATLAB 设计 FIR 数字滤波器

实验目的

  1. 加深对窗函数法设计 FIR 数字滤波器的基本原理的理解。

  2. 学习用 Matlab 语言的窗函数法编写设计 FIR 数字滤波器的程序。

  3. 了解 Matlab 语言有关窗函数法设计 FIR 数字滤波器的常用函数用法。

  4. 掌握 FIR 滤波器的快速卷积实现原理。

  5. 不同滤波器的设计方法具有不同的优缺点,因此要全面、客观看待可能面对或出现的问题。

实验原理

用窗函数法设计FIR 数字滤波器

FIR数字滤波器的系统函数为

H ( z ) = ∑ n = 0 N − 1 h ( n ) z − n H(z)=\sum_{n=0}^{N-1} h(n) z^{-n} H(z)=n=0N1h(n)zn

这个公式也可以看成是离散 LSI 系统的系统函数

H ( z ) = Y ( z ) X ( z ) = b ( z ) a ( z ) = ∑ m = 0 M b m z − m 1 + ∑ k = 1 N a k z − k = b 0 + b 1 z − 1 + b 2 z − 2 + ⋯ + b m z − m 1 + a 1 z − 1 + a 2 z − 2 + ⋯ + a k z − k H(z)=\frac{Y(z)}{X(z)}=\frac{b(z)}{a(z)}=\frac{\sum_{m=0}^M b_m z^{-m}}{1+\sum_{k=1}^N a_k z^{-k}}=\frac{b_0+b_1 z^{-1}+b_2 z^{-2}+\cdots+b_m z^{-m}}{1+a_1 z^{-1}+a_2 z^{-2}+\cdots+a_k z^{-k}} H(z)=X(z)Y(z)=a(z)b(z)=1+k=1Nakzkm=0Mbmzm=1+a1z1+a2z2++akzkb0+b1z1+b2z2++bmzm

分母 a 0 a_0 a0 为 1, 其余 a k a_k ak 全都为 0时的一个特例。由于极点全部集中在零点, 稳定和线性相位特性是 FIR滤波器的突出优点, 因此在实际中广泛使用。

FIR 滤波器的设计任务是选择有限长度的 h ( n ) h(n) h(n), 使传输函数 H ( e j ω ) H\left(e^{j\omega}\right) H(e)满足技术要求。主要设计方法有窗函数法、频率采样法和切比雪夫等波纹逼近法等。本实验主要介绍窗函数法。

用窗函数法设计 FIR 数字滤波器的基本步骤如下:

(1) 根据过渡带和阻带衰减指标选择窗函数的类型, 估算滤波器的阶数 N N N

(2) 由数字滤波器的理想频率响应 H ( e j ω ) H\left(e^{j\omega}\right) H(e)求出其单位冲激响应 h d ( n ) h_{d}(n) hd(n)。 可用自定义函数 ideal_lp \text{ideal\_lp} ideal_lp实现理想数字低通滤波器频率响应的求解。程序清单如下:

function hd = ideal_lp(wc, N) % 点 0 到 N-1 之间的理想脉冲响应% wc = 截止频率 (弧度)% N = 理想滤波器的长度tao = (N-1)/2;n = [0:(N-1)];m = n - tao + eps; % 加一个小数以避免 0 作除数hd = sin(wc * m) ./ (pi * m);
end    

其它选频滤波器可以由低通频响特性合成。如一个通带在 ω c 1 ∼ ω c 2 \omega_{c1} \sim \omega_{c2} ωc1ωc2 之间的带通滤波器在给定 N N N值的条件下,可以用下列程序实现:

Hd = ideal_lp(wc2, N) - ideal_lp(wc1, N);

(3) 计算数字滤波器的单位冲激响应 h ( n ) = w ( n ) h d ( n ) h(n) = w(n)hd(n) h(n)=w(n)hd(n)

(4) 检查设计的滤波器是否满足技术指标。

如果设计的滤波器不满足技术指标,则需要重新选择或调整窗函数的类型,估算滤波器的阶数 N N N。再重复前面的四个步骤,直到满足指标。

常用的窗函数有矩形窗、三角形窗、汉宁窗、哈明窗、切比雪夫窗、布莱克曼窗、凯塞窗等,Matlab均有相应的函数可以调用。另外,MATLAB 信号处理工具箱还提供了 'firl’函数,可以用于窗函数法设计 FIR 滤波器。

由于第一类线性相位滤波器 (类型 I)能进行低通、高通、带通、带阻滤波器的设计,因此,本实验所有滤波器均采用第一类线性相位滤波器。

各种窗函数特性的比较

窗函数旁瓣峰值/dB近似过渡带宽精确过渡带宽阻带最小衰减/dB
矩形窗-13 4 π / N 4\pi/N 4π/N 1.8 π / N 1.8\pi/N 1.8π/N21
三角形窗-25 8 π / N 8\pi/N 8π/N 6.1 π / N 6.1\pi/N 6.1π/N25
汉宁窗-31 8 π / N 8\pi/N 8π/N 6.2 π / N 6.2\pi/N 6.2π/N44
哈明窗-41 8 π / N 8\pi/N 8π/N 6.6 π / N 6.6\pi/N 6.6π/N53
布莱克曼窗-57 12 π / N 12\pi/N 12π/N 11 π / N 11\pi/N 11π/N74
凯塞窗-57 10 π / N 10\pi/N 10π/N80

信号的整数倍零值内插

x ( n ) x(n) x(n) 是连续信号 x a ( t ) x_a(t) xa(t) 的采样序列,其采样频率为 f 1 = 1 T 1 ( Hz ) , T 1 f_1 = \frac{1}{T_1} (\text{Hz}), T_1 f1=T11(Hz),T1是采样间隔。如果将其采样频率降低到原来的 1 D \frac{1}{D} D1 D D D 为大于 1的整数,称为抽取因子),最简单的方法是对 x ( n ) x(n) x(n) D − 1 D-1 D1 个点抽取 1点,组成一个新的序列 y ( n ) y(n) y(n)。由于 y ( n ) y(n) y(n) 的采样间隔 T 2 = D T 1 T_2 = DT_1 T2=DT1,除非抽取后仍能满足采样定理,否则会引起频谱混叠现象。信号抽取前后的频谱关系见教材第8 章的 8.2节。为了避免抽取后的频率混叠,在抽取前先采用一个抗混叠低通滤波器对信号滤波,把信号的频带限制在某个频率以下。

抗混叠滤波器的系统函数为:

H ( e j ω ) = { 1 ∣ ω ∣ < π D 0 π D ≤ ∣ ω ∣ ≤ π H(e^{j\omega}) = \begin{cases} 1 & |\omega| < \frac{\pi}{D} \\ 0 & \frac{\pi}{D} \leq |\omega| \leq \pi \end{cases} H(e)={10ω<DπDπωπ

例题

例2-2 选择合适的窗函数设计一个FIR 数字低通滤波器

要求:通带截止频率为ωp=0.3 π ,Rp=0.05dB;阻带截止频率为ωs=0.45 π ,As=50dB。描绘该滤波器的脉冲响应、窗函数及滤波器的幅频响应曲线和相频响应曲线。分析:根据设计指标要求,并查表2-1,选择哈明窗。程序清单如下:

addpath('.\2024-2025(1)《信号处理实验》资料(请拷贝到u盘中,每次试验带到实验室)\实验中用到的一些函数和音频图像文件');
wp = 0.3*pi;
ws = 0.45*pi;
deltaw = ws - wp;
N0 = ceil(6.6*pi/deltaw);N = N0 + mod(N0 + 1, 2); % 为实现 FIR 类型 1 偶对称滤波器,应确保 N 为奇数
windows = (hamming(N))';
wc = (ws + wp) / 2;hd = ideal_lp(wc, N);
b = hd .* windows;[H, w] = freqz(b, 1, 1000, 'whole');
H = (H(1:501))';
w = (w(1:501))';mag = abs(H);
db = 20 * log10((mag + eps) / max(mag));pha = angle(H);
n = 0:N-1;
dw = 2 * pi / 1000;Rp = -(min(db(1:wp/dw + 1))); % 检验通带波动
As = -round(max(db(ws/dw + 1:501))); % 检验最小阻带衰减subplot(2, 2, 1);
stem(n, b);
axis([0, N, 1.1 * min(b), 1.1 * max(b)]);
title('实际脉冲响应');
xlabel('n');
ylabel('h(n)');subplot(2, 2, 2);
stem(n, windows);
axis([0, N, 0, 1.1]);
title('窗函数特性');
xlabel('n');
ylabel('wd(n)');subplot(2, 2, 3);
plot(w/pi, db);
axis([0, 1, -80, 10]);
title('幅度频率响应');
xlabel('频率(单位:\pi)');
ylabel('H(e^{j\omega})');
set(gca, 'XTickMode', 'manual', 'XTick', [0, wp/pi, ws/pi, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [-50, -20, -3, 0]);
grid on;subplot(2, 2, 4);
plot(w/pi, pha);
axis([0, 1, -4, 4]);
title('相位频率响应');
xlabel('频率(单位:\pi)');
ylabel('\phi(\omega)');set(gca, 'XTickMode', 'manual', 'XTick', [0, wp/pi, ws/pi, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [-3.1416, 0, 3.1416, 4]);
grid on;

例2-3 用Matlab 信号处理工具箱的fir1 函数设计一个FIR 数字低通滤波器

要求:通带截止频率为ωp=0.3 π ,Rp=0.05dB;阻带截止频率为ωs=0.45 π ,As=50dB。

close;clear;wp = 0.3*pi;
ws = 0.45*pi;
deltaw = ws - wp;
N0 = ceil(6.6*pi/deltaw);
N = N0 + mod(N0 + 1, 2); % 为实现 FIR 类型 1 偶对称滤波器,应确保 N 为奇数
windows = hamming(N); % 使用哈明窗,此句可省略
wc = (ws + wp) / 2 / pi; % 截止频率取归一化通阻带频率的平均值
b = fir1(N-1, wc, windows); % 用 fir1 函数求系统函数系数,windows 可省略[H, w] = freqz(b, 1, 1000, 'whole');
H = (H(1:501))';
w = (w(1:501))';mag = abs(H);
db = 20*log10((mag + eps) / max(mag));
pha = angle(H);n = 0:N-1;
dw = 2*pi/1000;Rp = -(min(db(1:wp/dw + 1))); % 检验通带波动
As = -round(max(db(ws/dw + 1:501))); % 检验最小阻带衰减draw(n,b,N,windows,w,db,wp,ws,pha,As);

实验内容

1、阅读并输入实验原理中介绍的例题程序,观察输出的数据和图形,结合基本原理理解每一条语句的含义。

2、选择合适的窗函数设计FIR 数字低通滤波器

要求:ωp=0.24 π ,Rp=0.1dB;ωs=0.3 π ,As=60dB。描绘该滤波器的脉冲响应、窗函数及滤波器的幅频响应曲线和相频响应曲线。

close;clear;
As=60;
wp = 0.24*pi;
ws = 0.3*pi;
deltaw = ws - wp;
N0 = ceil(11*pi/deltaw);
N = N0 + mod(N0 + 1, 2); % 为实现 FIR 类型 1 偶对称滤波器,应确保 N 为奇数
windows = blackman(N); % 使用布莱克曼窗
wc = (ws + wp) / 2 / pi; % 截止频率取归一化通阻带频率的平均值
b = fir1(N-1, wc, windows); % 用 fir1 函数求系统函数系数,windows 可省略[H, w] = freqz(b, 1, 1000, 'whole');
H = (H(1:501))';
w = (w(1:501))';mag = abs(H);
db = 20*log10((mag + eps) / max(mag));
pha = angle(H);n = 0:N-1;
dw = 2*pi/1000;% Rp = -(min(db(1:wp/dw + 1))); % 检验通带波动
% As = -round(max(db(ws/dw + 1:501))); % 检验最小阻带衰减draw(n,b,N,windows,w,db,wp,ws,pha,As);

3、调用信号产生函数xtg 产生具有加性噪声的信号x(t),并显示信号及其频谱。

addpath('.\2024-2025(1)《信号处理实验》资料(请拷贝到u盘中,每次试验带到实验室)\实验中用到的一些函数和音频图像文件');
[xt,tf]=xtg(1000);

4、采用实验内容步骤2 中设计的FIR 数字低通滤波器

调用Matlab 快速卷积函数fftfilt 实现对x(t)的滤波,从高频噪声中提取x(t)中的单频调幅信号。绘图显示滤波器的频率响应特性曲线、滤波器输出信号的幅频特性图和时域波形图。

yt = fftfilt(b, xt);Hyk = abs(fft(yt));
figure;subplot(2, 1, 1);
plot(tf, yt);
axis([0, 1, -2, 2]);subplot(2, 1, 2);
stem(Hyk);axis([80, 120, min(Hyk), max(Hyk)]);

5、 选做题 ,读取音频信号 motherland.wav,得到 xn

1 对 xn进行 I=2的整数倍 0值内插,得到音频信号 yn1

2 设计一个 镜像 低通滤波器(可在实验内容 2的代码上进行修改)

3 对 yn1进行 滤波,得到音频信号 yn2。

①音频播放: 依次播放 原音频 信号 xn、 yn1和 yn2,体验 整数倍 0值内插后的 音质。

close;clear;
[xn,fs]=audioread('motherland.wav');% 读取音频信号
% sound(xn,fs); % 播放音频信号,
% pause(length(xn)/fs); % 暂停执行程序 length(xn)/fs秒,确保音频播 放完。
I=2; % 实现 I=2的整数倍 0值内插
for i=1:length(xn);
yn1(I*i-1)=xn(i);
yn1(I*i)= 0;
end
% sound(yn1,I*fs); %采样频率变大了,为 I*fs

②取原音频某段信号,如 n=8000~8199 。画出该段信号模拟域幅度谱(横坐标为 f Hz );画出该段信号 I=2 内插后的模拟域幅度谱;画出该段信号内插后再经过镜像滤波后的模拟域幅度谱。

addpath('.\2024-2025(1)《信号处理实验》资料(请拷贝到u盘中,每次试验带到实验室)\实验中用到的一些函数和音频图像文件');
wp = 0.48*pi;
ws = 0.52*pi;
deltaw = ws - wp;
N0 = ceil(6.6*pi/deltaw);
N = N0 + mod(N0 + 1, 2); % 为实现 FIR 类型 1 偶对称滤波器,应确保 N 为奇数
windows = (hamming(N))';
wc = (ws + wp) / 2;hd = ideal_lp(wc, N);
b = hd .* windows;
b
b = 1x165    0.0000    0.0003   -0.0000   -0.0003    0.0000    0.0004   -0.0000   -0.0004    0.0000    0.0005   -0.0000   -0.0005    0.0000    0.0006    0.0000   -0.0007    0.0000    0.0009   -0.0000   -0.0010    0.0000    0.0012   -0.0000   -0.0013   -0.0000    0.0015   -0.0000   -0.0018    0.0000    0.0020    0.0000   -0.0023   -0.0000    0.0026   -0.0000   -0.0029    0.0000    0.0033   -0.0000   -0.0037   -0.0000    0.0042   -0.0000   -0.0047    0.0000    0.0052   -0.0000   -0.0059   -0.0000    0.0065
[H, w] = freqz(b, 1, 1000, 'whole');
H = (H(1:501))';
w = (w(1:501))';mag = abs(H);
db = 20 * log10((mag + eps) / max(mag));pha = angle(H);
n = 0:N-1;
dw = 2 * pi / 1000;

N=2048;
Xn=1/fs*fft(xn(8000:8199),N); % 从 xn中取 200点做谱分析, N可取 2048
plot((0:N/2-1)*fs/N,abs(Xn(1:N/2)));% 模拟域幅度谱
Yn1=1/(I*fs)*fft(yn1(16000:16399),N); % 内插后,200点长变成了400点长
plot((0:N/2-1)*I*fs/N,abs(Yn1(1:N/2)));
yn2=filter(b,1,yn1); % 对yn1进行滤波,b为所设计的镜像滤波器
Yn2=1/(I*fs)*fft(yn2(16000:16399),N); % 内插后,200点长变成了400点长
plot((0:N/2-1)*I*fs/N,abs(Yn2(1:N/2)));

思考题

根据下面指标要求设计四种不同类型的FIR 线性相位数字滤波器,要求画出h(n),幅频特性曲线、幅频衰减特性曲线,相频特性曲线,标注相关信息,包括横坐标,纵坐标的单位,曲线名称。

close;clear;wp = 0.2*pi;
ws = 0.3*pi;
deltaw = ws - wp;
N0 = ceil(6.1*pi/deltaw);
N = N0 + mod(N0 + 1, 2); % 为实现 FIR 类型 1 偶对称滤波器,应确保 N 为奇数
windows = triang(N); % 使用哈明窗,此句可省略
wc = (ws + wp) / 2 / pi; % 截止频率取归一化通阻带频率的平均值
b = fir1(N-1, wc, windows); % 用 fir1 函数求系统函数系数,windows 可省略
[H, w] = freqz(b, 1, 1000, 'whole');
H = (H(1:501))';
w = (w(1:501))';mag = abs(H);
db = 20*log10((mag + eps) / max(mag));
pha = angle(H);n = 0:N-1;
dw = 2*pi/1000;Rp = -(min(db(1:wp/dw + 1))); % 检验通带波动
As = -round(max(db(ws/dw + 1:501))); % 检验最小阻带衰减draw2(n,b,N,w,db,wp,ws,mag,pha,As);

close;clear;wp = 0.6*pi;
ws = 0.4*pi;
deltaw = wp - ws;
N0 = ceil(6.2*pi/deltaw);
N = N0 + mod(N0 + 1, 2); % 为实现 FIR 类型 1 偶对称滤波器,应确保 N 为奇数
windows = hanning(N); % 使用哈明窗,此句可省略
wc = (ws + wp) / 2 / pi; % 截止频率取归一化通阻带频率的平均值
b = fir1(N-1, wc,'high', windows); % 用 fir1 函数求系统函数系数,windows 可省略[H, w] = freqz(b, 1, 1000, 'whole');
H = (H(1:501))';
w = (w(1:501))';mag = abs(H);
db = 20*log10((mag + eps) / max(mag));
pha = angle(H);n = 0:N-1;
dw = 2*pi/1000;Rp = -(min(db(1:wp/dw + 1))); % 检验通带波动
% As = -round(max(db(ws/dw + 1:501))); % 检验最小阻带衰减
As=43;
draw2(n,b,N,w,db,wp,ws,mag,pha,As);

close;clear;wp = [0.2,0.6]*pi;
ws = [0.15,0.65]*pi;
deltaw = wp - ws;
N0 = ceil(6.6*pi./deltaw);
N = max(N0 + mod(N0 + 1, 2)); % 为实现 FIR 类型 1 偶对称滤波器,应确保 N 为奇数
windows = hamming(N); % 使用哈明窗,此句可省略
wc = (ws + wp) / 2 / pi; % 截止频率取归一化通阻带频率的平均值
b = fir1(N-1, wc,'bandpass'); % 用 fir1 函数求系统函数系数,windows 可省略[H, w] = freqz(b, 1, 1000, 'whole');
H = (H(1:501))';
w = (w(1:501))';mag = abs(H);
db = 20*log10((mag + eps) / max(mag));
pha = angle(H);
nextfigure
n = 0:N-1;
dw = 2*pi/1000;Rp = -(min(db(1:wp/dw + 1))); % 检验通带波动
% As = -round(max(db(ws/dw + 1:501))); % 检验最小阻带衰减
As=50;
draw3(n,b,N,w,db,wp,ws,mag,pha,As);

close;clear;wp = [0.2,0.6]*pi;
ws = [0.15,0.65]*pi;
deltaw = wp - ws;
N0 = ceil(6.6*pi./deltaw);
N = max(N0 + mod(N0 + 1, 2)); % 为实现 FIR 类型 1 偶对称滤波器,应确保 N 为奇数
windows = hamming(N); % 使用哈明窗,此句可省略
wc = (ws + wp) / 2 / pi; % 截止频率取归一化通阻带频率的平均值
b = fir1(N-1, wc,'stop'); % 用 fir1 函数求系统函数系数,windows 可省略[H, w] = freqz(b, 1, 1000, 'whole');
H = (H(1:501))';
w = (w(1:501))';mag = abs(H);
db = 20*log10((mag + eps) / max(mag));
pha = angle(H);n = 0:N-1;
dw = 2*pi/1000;Rp = -(min(db(1:wp/dw + 1))); % 检验通带波动
% As = -round(max(db(ws/dw + 1:501))); % 检验最小阻带衰减
As=45;
draw3(n,b,N,w,db,wp,ws,mag,pha,As);

绘图函数

用到的绘图函数,可以以.m文件保存,放在同一路径下。或addpath加入函数的绝对/相对路径。

% function draw(n,b,N,windows,w,db,wp,ws,pha,As)
% subplot(2, 2, 1);
% stem(n, b);
% axis([0, N, 1.1 * min(b), 1.1 * max(b)]);
% title('实际脉冲响应');
% xlabel('n');
% ylabel('h(n)');
% 
% subplot(2, 2, 2);
% stem(n, windows);
% axis([0, N, 0, 1.1]);
% title('窗函数特性');
% xlabel('n');
% ylabel('wd(n)');
% 
% subplot(2, 2, 3);
% plot(w/pi, db);
% axis([0, 1, -80, 10]);
% title('幅度频率响应');
% xlabel('频率(单位:\pi)');
% ylabel('H(e^{j\omega})');
% set(gca, 'XTickMode', 'manual', 'XTick', [0, wp/pi, ws/pi, 1]);
% set(gca, 'YTickMode', 'manual', 'YTick', [-As, -20, -3, 0]);
% grid on;
% 
% subplot(2, 2, 4);
% plot(w/pi, pha);
% axis([0, 1, -4, 4]);
% title('相位频率响应');
% xlabel('频率(单位:\pi)');
% ylabel('\phi(\omega)');
% 
% set(gca, 'XTickMode', 'manual', 'XTick', [0, wp/pi, ws/pi, 1]);
% set(gca, 'YTickMode', 'manual', 'YTick', [-3.1416, 0, 3.1416, 4]);
% grid on;
% function draw2(n,b,N,w,db,wp,ws,mag,pha,As)
% subplot(2, 2, 1);
% stem(n, b);
% axis([0, N, 1.1 * min(b), 1.1 * max(b)]);
% title('实际脉冲响应');
% xlabel('n');
% ylabel('h(n)');
% 
% subplot(2, 2, 2);
% plot(w/pi, mag); 
% xlabel('频率(单位:\pi)');
% ylabel('|H|'); 
% title('幅频特性曲线'); 
% axis([0, 1, 0, 1.1]);
% set(gca, 'XTickMode', 'manual', 'XTick', [0, min([wp/pi,ws/pi]), max([wp/pi,ws/pi]), 1]);
% set(gca, 'YTickMode', 'manual', 'YTick', [0, 0.707, 1]);
% grid on;
% 
% subplot(2, 2, 3);
% plot(w/pi, db);
% axis([0, 1, -80, 10]);
% title('幅频衰减特性曲线');
% xlabel('频率(单位:\pi)');
% ylabel('H(e^{j\omega})');
% set(gca, 'XTickMode', 'manual', 'XTick', [0, min([wp/pi,ws/pi]), max([wp/pi,ws/pi]), 1]);
% set(gca, 'YTickMode', 'manual', 'YTick', [min([-As,-20]), max([-As,-20]), -3, 0]);
% grid on;
% 
% subplot(2, 2, 4);
% plot(w/pi, pha);
% axis([0, 1, -4, 4]);
% title('相频特性曲线');
% xlabel('频率(单位:\pi)');
% ylabel('\phi(\omega)');
% 
% set(gca, 'XTickMode', 'manual', 'XTick', [0, min([wp/pi,ws/pi]), max([wp/pi,ws/pi]), 1]);
% set(gca, 'YTickMode', 'manual', 'YTick', [-3.1416, 0, 3.1416, 4]);
% grid on;
% function draw3(n,b,N,w,db,wp,ws,mag,pha,As)
% unique_ticks = unique([0, wp/pi, ws/pi, 1]);
% subplot(2, 2, 1);
% stem(n, b);
% axis([0, N, 1.1 * min(b), 1.1 * max(b)]);
% title('实际脉冲响应');
% xlabel('n');
% ylabel('h(n)');
% 
% subplot(2, 2, 2);
% plot(w/pi, mag); 
% xlabel('频率(单位:\pi)');
% ylabel('|H|'); 
% title('幅频特性曲线'); 
% axis([0, 1, 0, 1.1]);
% set(gca, 'XTickMode', 'manual', 'XTick', unique_ticks);
% set(gca, 'YTickMode', 'manual', 'YTick', [0, 0.707, 1]);
% grid on;
% 
% subplot(2, 2, 3);
% plot(w/pi, db);
% axis([0, 1, -80, 10]);
% title('幅频衰减特性曲线');
% xlabel('频率(单位:\pi)');
% ylabel('H(e^{j\omega})');
% set(gca, 'XTickMode', 'manual', 'XTick', unique_ticks);
% set(gca, 'YTickMode', 'manual', 'YTick', [min([-As,-20]), max([-As,-20]), -3, 0]);
% grid on;
% 
% subplot(2, 2, 4);
% plot(w/pi, pha);
% axis([0, 1, -4, 4]);
% title('相频特性曲线');
% xlabel('频率(单位:\pi)');
% ylabel('\phi(\omega)');
% 
% set(gca, 'XTickMode', 'manual', 'XTick', unique_ticks);
% set(gca, 'YTickMode', 'manual', 'YTick', [-3.1416, 0, 3.1416, 4]);
% grid on;

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day07 接口测试(2)

目录 1、接口用例设计 1.1 接口测试的测试点 1.1.1 功能测试 &#xff01;&#xff01; &#xff08;1&#xff09;单接口功能&#xff1a; &#xff08;见1.3&#xff09; &#xff08;2&#xff09;业务场景功能:&#xff08;见1.4&#xff09; 1.1.2 性能测试&#xf…

CentOS 二进制安装部署MongoDB 4.0

一、安装MongoDB 1. 下载 MongoDB 二进制文件 前往 MongoDB 官方下载页面(https://www.mongodb.com/try/download/community) 选择对应版本的 tar 包。 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.28.tgz 2. 解压并移动至目标目录 解压文件&#xff…

《Scientific Reports》2024最新投稿经验

"Scientific Reports" 是Nature Portfolio旗下一本备受推崇的开放获取多学科期刊&#xff0c;自2011年起被JCR收录。这本月刊致力于发表自然科学、心理学、医学和工程学领域的突破性原创研究。它的收稿范围广泛&#xff0c;覆盖物理学、化学、生物学、地球科学、环境…

C++内存布局以及常用关键字

C内存布局以及常用关键字 C的内存空间 代码存储区域&#xff1a;常量区、代码区、静态区&#xff08;全局区&#xff09;、堆区、栈区 栈区向下增长&#xff0c;堆区向上增长。栈由系统管理&#xff0c;没有内存碎片&#xff0c;每个元素之间都是连续的&#xff0c;大小比较…

设计模式:19、桥接模式

目录 0、定义 1、桥接模式的四种角色 2、桥接模式的UML类图 3、示例代码 0、定义 将抽象部门与实现部分分离&#xff0c;使它们都可以独立地变化。 1、桥接模式的四种角色 抽象&#xff08;Abstraction&#xff09;&#xff1a;一个抽象类&#xff0c;包含实现者&#xf…

Linux中文件操作

文件由文件内容和文件属性构成&#xff0c;因此对文件的操作就是对文件内容或文件属性的操作。所谓的“打开一个文件”就是将文件的属性或内容加载到内存中&#xff0c;而没有被打开的文件存在于磁盘上。打开的文件称作“内存文件”&#xff0c;未被打开的文件称作“磁盘文件”…

elasticsearch基础总结

最近实习&#xff0c;项目用的elasticseatch做的存储库&#xff0c;但是之前对于es接触的不多&#xff0c;查询语法有些不熟&#xff0c;每次想写个DSL查询时都要gpt或者施展搜索大法&#xff0c;所以索性就自己总结总结&#xff0c;以后忘了也方便查。所以这篇文章会持续更新。…

c++ map对其值排序

无法直接排序,转换成vector<std::pair<string,int>> #include <iostream> #include <map> #include <vector> #include <algorithm>// 用于排序的比较函数 bool compareByValue(const std::pair<std::string, int>& a, const …

PysimpleGUI试用版变更免费版

1、PysimpleGUI试用版&#xff1a; 由于5.0版本之后不是免费的 2、变更版本&#xff1a; 打开pycharm-设置-python解释器&#xff1a;点击 搜索PysimpleGUI-指定版本-选择低于5.0的版本&#xff1a;安装软件包 3、重新运行PysimpleGUI&#xff0c;即可获得免费版&#xff1a;…

Grule前端表单post后端执行grule引擎规则

Grule前端表单post后端执行grule引擎规则 编写前端表单和后端接口 编写test.go执行grule引擎规则 示例都是 go test 执行的测试代码&#xff0c;所以将里面的测试代码去除 由于之前 NumberExponentExample_test.go 已经验证可运行, 所以将 err 的异常处理去除 package mai…

STM32串口接收与发送(关于为什么接收不需要中断而发生需要以及HAL_UART_Transmit和HAL_UART_Transmit_IT的区别)

一、HAL_UART_Transmit和HAL_UART_Transmit_IT的区别 1. HAL_UART_Transmit_IT&#xff08;非阻塞模式&#xff09;&#xff1a; HAL_UART_Transmit_IT 是非阻塞的传输函数&#xff0c;也就是说&#xff0c;当你调用 HAL_UART_Transmit_IT 时&#xff0c;它不会等到数据完全发…

使用R语言优雅的获取任意区域的POI,道路,河流等数据

POI是“Polnt of Information”的缩写&#xff0c;中文可以翻译为“信息点”。是地图上任何非地理意义的有意义的点&#xff0c;如商店&#xff0c;酒吧&#xff0c;加油站&#xff0c;医院&#xff0c;车站等。POI&#xff0c;道路网&#xff0c;河流等是我们日常研究中经常需…

七、docker registry

七、docker registry 7.1 了解Docker Registry 7.1.1 介绍 registry 用于保存docker 镜像&#xff0c;包括镜像的层次结构和元数据。启动容器时&#xff0c;docker daemon会试图从本地获取相关的镜像&#xff1b;本地镜像不存在时&#xff0c;其将从registry中下载该镜像并保…

目标跟踪算法:SORT、卡尔曼滤波、匈牙利算法

目录 1 目标检测 2 卡尔曼滤波 3《从放弃到精通&#xff01;卡尔曼滤波从理论到实践》视频简单学习笔记 3.1 入门 3.2 进阶 3.2.1 状态空间表达式 3.2.2 高斯分布 3.3 放弃 3.4 精通 4 匈牙利算法 5 《【运筹学】-指派问题&#xff08;匈牙利算法&#xff09;》视…

OpenCV-图像阈值

简单阈值法 此方法是直截了当的。如果像素值大于阈值&#xff0c;则会被赋为一个值&#xff08;可能为白色&#xff09;&#xff0c;否则会赋为另一个值&#xff08;可能为黑色&#xff09;。使用的函数是 cv.threshold。第一个参数是源图像&#xff0c;它应该是灰度图像。第二…

【HarmonyOS NEXT】实现Tabs组件的TabBar从左到右依次排列

一、背景 系统提供的Tabs目前只能居中展示&#xff0c;暂不支持居左显示&#xff0c;现有的需求是需要Tabs从左往右排列显示&#xff0c;考虑通过Scroll和Row组件来实现 二、实现思路 通过Scroll和Row组件用来实现一个页签&#xff0c;在onclick事件中通过修改索引值和Tabs组…

16-03、JVM系列之:内存与垃圾回收篇(三)

JVM系列之&#xff1a;内存与垃圾回收篇(三) ##本篇内容概述&#xff1a; 1、执行引擎 2、StringTable 3、垃圾回收一、执行引擎 ##一、执行引擎概述 如果想让一个java程序运行起来&#xff0c;执行引擎的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以。 简…

FPGA工作原理、架构及底层资源

FPGA工作原理、架构及底层资源 文章目录 FPGA工作原理、架构及底层资源前言一、FPGA工作原理二、FPGA架构及底层资源 1.FPGA架构2.FPGA底层资源 2.1可编程输入/输出单元简称&#xff08;IOB&#xff09;2.2可配置逻辑块2.3丰富的布线资源2.4数字时钟管理模块(DCM)2.5嵌入式块 …

【JVM】JVM基础教程(一)

目录 初识JVM JVM是什么&#xff1f; JVM的功能 解释、即时编译和运行 内存管理 常见的JVM JVM虚拟机规范 HotSpot的发展历程 JVM的组成 字节码文件详解 应用场景 以正确姿势打开字节码文件 ​编辑字节码文件的组成 基本信息 Magic魔数 主副版本号 常量池 接口…

无监督学习笔记 - A Cookbook of Self-Supervised Learning

无监督学习笔记 参考资料&#xff1a; 无监督学习Cookbook 几乎总结了所有的自监督学习方法,阅读过程中&#xff0c;根据参考文献索&#xff0c;进一步深入阅读每个方法具体得细节&#xff0c;掌握该论文&#xff0c;基本上就掌握了所有自监督学习的方法与基础。 统计学习方法…