实验七 用 MATLAB 设计 FIR 数字滤波器
实验目的
-
加深对窗函数法设计 FIR 数字滤波器的基本原理的理解。
-
学习用 Matlab 语言的窗函数法编写设计 FIR 数字滤波器的程序。
-
了解 Matlab 语言有关窗函数法设计 FIR 数字滤波器的常用函数用法。
-
掌握 FIR 滤波器的快速卷积实现原理。
-
不同滤波器的设计方法具有不同的优缺点,因此要全面、客观看待可能面对或出现的问题。
实验原理
用窗函数法设计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=0∑N−1h(n)z−n
这个公式也可以看成是离散 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=1Nakz−k∑m=0Mbmz−m=1+a1z−1+a2z−2+⋯+akz−kb0+b1z−1+b2z−2+⋯+bmz−m
分母 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(ejω)满足技术要求。主要设计方法有窗函数法、频率采样法和切比雪夫等波纹逼近法等。本实验主要介绍窗函数法。
用窗函数法设计 FIR 数字滤波器的基本步骤如下:
(1) 根据过渡带和阻带衰减指标选择窗函数的类型, 估算滤波器的阶数 N N N。
(2) 由数字滤波器的理想频率响应 H ( e j ω ) H\left(e^{j\omega}\right) H(ejω)求出其单位冲激响应 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π/N | 21 |
三角形窗 | -25 | 8 π / N 8\pi/N 8π/N | 6.1 π / N 6.1\pi/N 6.1π/N | 25 |
汉宁窗 | -31 | 8 π / N 8\pi/N 8π/N | 6.2 π / N 6.2\pi/N 6.2π/N | 44 |
哈明窗 | -41 | 8 π / N 8\pi/N 8π/N | 6.6 π / N 6.6\pi/N 6.6π/N | 53 |
布莱克曼窗 | -57 | 12 π / N 12\pi/N 12π/N | 11 π / N 11\pi/N 11π/N | 74 |
凯塞窗 | -57 | 无 | 10 π / N 10\pi/N 10π/N | 80 |
信号的整数倍零值内插
设 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 D−1 个点抽取 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(ejω)={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;
相关文章:

实验七 用 MATLAB 设计 FIR 数字滤波器
实验目的 加深对窗函数法设计 FIR 数字滤波器的基本原理的理解。 学习用 Matlab 语言的窗函数法编写设计 FIR 数字滤波器的程序。 了解 Matlab 语言有关窗函数法设计 FIR 数字滤波器的常用函数用法。 掌握 FIR 滤波器的快速卷积实现原理。 不同滤波器的设计方法具有不同的优…...

学习ESP32开发板安装鸿蒙操作系统(新板子esp32c3不支持)
鸿蒙LiteOS网址:LiteOS: Huawei LiteOS开源代码官方主仓库.LiteOS Studio 开发工具请访问https://gitee.com/LiteOS/LiteOS_Studio 失败的实践记录见:完全按照手册win10里装Ubuntu 虚拟机然后编译ESP32(主要是想针对ESP32C3和S3)…...

asp.net core过滤器应用
筛选器类型 授权筛选器 授权过滤器是过滤器管道的第一个被执行的过滤器,用于系统授权。一般不会编写自定义的授权过滤器,而是配置授权策略或编写自定义授权策略。简单举个例子。 using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCo…...
力扣面试题 31 - 特定深度节点链表 C语言解法
题目: 给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。 示例: 输入…...
WordPress阅读文章显示太慢的处理
有两种方式, 1. 完全静态化。 动态都变成html,不再查数据库就快了。 但尝试了几个插件,都未成功。算了后面再研究。 2. cache缓存 用了WP Super Cache测试了一下,打开过一次后,文章秒开,也算达到了要求…...
关于多个线程共享一个实例对象
在多线程环境中,多个线程可能同时调用同一个对象的实例方法,这时候需要考虑如何保证线程安全。理解不同场景下的线程安全性是至关重要的,特别是当方法涉及共享状态时。 1. 共享实例与方法执行 共享实例:多个线程共享同一个实例对…...

【C++】printf 函数详解与格式化输出控制
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯printf 基础用法1.1 printf 的常见占位符1.2 占位符与参数的对应关系1.3 换行控制示例: 💯格式化输出控制2.1 输出宽度控制2.1.1 指定最小宽度 2.2 …...
HDFS 操作命令
在现代的企业环境中,单机容量往往无法存储大量数据,需要跨机器存储。统一管理分布在 集群上的文件系统称为 分布式文件系统 。 HDFS ( Hadoop Distributed File System )是 Apache Hadoop 项目的一个子项目, Hadoo…...
html ul li 首页渲染多条数据 但只展示八条,其余的数据全部隐藏,通过icon图标 进行展示
<div style"float: left;" id"showMore"> 展开 </div> <div style"float: left;“id"hideLess"> 收起 </div> var data document.querySelectorAll(.allbox .item h3 a); const list document.querySelectorAl…...

Facebook:筑牢隐私安全堡垒,守护社交净土
在全球社交媒体平台中,Facebook一直是风靡全球的佼佼者。然而,随着数字化信息的迅速膨胀,用户隐私保护的重要性日益凸显。面对用户对数据安全性的高度重视,Facebook致力于通过一系列措施来确保隐私保护,守护每位用户的…...
2024年构建PHP应用开发环境
文章目录 前言选择合适的PHP版本安装与配置PHP环境Windows平台Linux平台macOS平台 集成Web服务器数据库连接与管理使用Composer进行依赖管理调试工具的选择代码质量管理部署与持续集成安全性考虑参考资料结语 前言 随着互联网的发展,PHP作为一门成熟的服务器端编程…...
Apache Commons Chain 与 Spring Boot 整合:构建用户注册处理链
文章目录 概述1. 环境准备2. 创建自定义上下文3. 创建命令验证用户输入保存用户数据发送欢迎邮件 4. 构建并执行处理链5. 使用处理链6. 运行结果7. 总结 概述 本文档旨在展示如何在 Spring Boot 应用中使用 Apache Commons Chain 来实现一个用户注册的处理链。我们将通过 Chai…...

一、测试工具LoadRunner Professional脚本编写-录制前设置
设置基于URL的脚本 原因:基于HTML的脚本会导致login接口不能正确录制 设置UTF-8 原因:不勾选此项会导致脚本中文变为乱码...
React Native 组件详解之SectionList、StatusBar、Switch、Text 、 TextInput
在本文中,我们将详细介绍 React Native 中的五个常用组件:SectionList、StatusBar、Switch、Text 和 TextInput。每个组件都有其独特的用途和特性,我们将通过示例代码和 API 说明来帮助你更好地理解和使用它们。 SectionList SectionList 是…...
阿里云:aliyun-cli和ali-instance-cli
概念: 这篇文章只是来澄清一下这俩“cli"之间的区别和联系: aliyun cli 和 ali-instance-cli 都是阿里云提供的命令行工具,但它们的功能和使用场景有所不同。 1. aliyun cli 是一个通用的阿里云命令行接口工具,它允许用户…...

Linux 远程连接服务
远程连接服务器简介 什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机以取得可操 作主机接口(shell),而登录后的操作感觉就像是坐在系统前面一样。 远程连接服务器的功…...
Docker 安装和使用
#Docker 安装和使用 文章目录 1. 安装2. 干掉讨厌的 sudo3. 使用镜像源3.1. 使用 upstart 的系统3.2. 使用 systemd 的系统 4. 基本使用4.1. 容器操作4.2. 镜像操作 5. 网络模式说明5.1. bridge 模式5.2. host 模式5.3. container 模式5.4. none 模式 6. 查看 Docker run 启动参…...

web基础和http协议 附:nginx服务的安装
web基础和http协议: https://www.baidu.com/ URL https:// 协议 http:// www.baidu.com/ 域名 web介绍: DNS和域名 DNS解析的方式: 1、运营商 2、/etc/hosts 人工配置的域名和ip地址之间的映射关系 3、/etc/resolv.conf dns服务器的ip地址 bind,内网解析域名和ip地址…...

springboot利用easypoi实现简单导出Excel
vue springboot利用easypoi实现简单导出 前言一、easypoi是什么?二、使用步骤 1.传送门2.前端vue3.后端springboot 3.1编写实体类(我这里是dto,也一样)3.2控制层结尾 前言 今天玩了一下springboot利用easypoi实现excel的导出,以前…...

【前端新手小白】学习Javascript的【开源好项目】推荐
目录 前言 1 项目介绍 1.1 时间日期类 1.2 网页store类 1.3 事件类 1.4 Number类 1.5 String类 1.6 正则验证类 1.7 ajax类 1.8 data数据类 1.9 browser浏览器类 2 学习js-tool-big-box开源项目时有哪些收获 2.1 你可以这样做 2.2 如果你需要使用本项目 2.3 你…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...