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

重邮+数字信号处理实验七:用 MATLAB 设计 IIR 数字滤波器

一、实验目的

1 、加深对窗函数法设计 FIR 数字滤波器的基本原理的理解。
2 、学习用 Matlab 语言的窗函数法编写设计 FIR 数字滤波器的程序。
3 、了解 Matlab 语言有关窗函数法设计 FIR 数字滤波器的常用函数用法。
4 、掌握 FIR 滤波器的快速卷积实现原理。
5 、不同滤波器的设计方法具有不同的优缺点,因此要全面、客观看待可能
面对或出现的问题。

二、实验任务

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

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

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

任务二结果示意图

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

程序清单如下:
[xt,t]=xtg(1000);
程序运行结果如下:

4、采用实验内容步骤 2 中设计的 FIR 数字低通滤波器,调用 Matlab 快速卷积函数 fftfilt 实现对 x(t)的滤波,从高频噪声中提取 x(t)中的单频调幅信号。绘图显示滤波器的频率响应特性曲线、滤波器输出信号的幅频特性图和时域波形图。

代码提示略

实验结果如下:

5选做题,读取音频信号 motherland.wav,得到 xn;(1)对 xn 进行 I=2 的整数倍 0 值内插,得到音频信号 yn1;(2)设计一个镜像低通滤波器(可在实 验内容 2 的代码上进行修改);(3)对 yn1 进行滤波,得到音频信号 yn2

① 音频播放:依次播放原音频信号 xn yn1 yn2 ,体验整数倍 0 值内插后的音质。
参考代码:
[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 内插后的模拟域幅度谱;画出该段信号内插 后再经过镜像滤波后的模拟域幅度谱。
参考代码:
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)));

三、思考题

按照如下指标要求设计四种选频数字滤波器,要求画出滤波器的幅频特性、相频特性和幅度衰减曲线,标注相关信息,如横坐标,纵坐标的单位,曲线名称等。(设计方法自己查阅资料完成)

  • (1) 设计数字低通滤波器,指标为:通带截止频率𝜔𝑝 = 0.2𝜋,阻带截止频率𝜔𝑠 = 0.3𝜋,通带衰减𝛼𝑝 = 1𝑑𝐵,阻带衰减𝛼𝑠 = 24𝑑𝐵。
  • (2) 设计数字高通滤波器,指标为:阻带截止频率𝜔𝑠 = 0.4𝜋,通带截止频率𝜔𝑠 = 0.6𝜋,通带衰减𝛼𝑝 = 0.2𝑑𝐵,阻带衰减𝛼𝑠 = 43𝑑𝐵。
  • (3) 设计数字带通滤波器,指标为:通带范围0.2𝜋 ≤ 𝜔 ≤ 0.6𝜋,阻带范围0 ≤𝜔 ≤ 0.15𝜋和0.65𝜋 ≤ 𝜔 ≤ 𝜋,通带衰减𝛼𝑝 = 1𝑑𝐵,阻带衰减𝛼𝑠 = 50𝑑𝐵。
  • (4) 设计数字带阻滤波器,指标为:阻带范围0.2𝜋 ≤ 𝜔 ≤ 0.6𝜋,通带范围0 ≤ 𝜔 ≤ 0.15𝜋和0.65𝜋 ≤ 𝜔 ≤ 𝜋,通带衰减𝛼𝑝 = 1𝑑𝐵,阻带衰减𝛼𝑠 = 45𝑑𝐵。

解答

函数部分

函数一:通过输入wp,ws,n,可以得到b,反复调用,节省时间

function b=filter_test7(wp,ws,n)%n为窗前的系数
deltaw = ws - wp; % 频率带宽差
N0 = ceil(n * pi / deltaw); % 阶数
N = N0 + mod(N0 + 1, 2); % 确保滤波器阶数为奇数windows = blackman(N); % 使用窗
wc = (ws + wp) / (2 * pi); % 截止频率取归一化通阻带频率的平均值
b = fir1(N-1, wc, windows); 
end

 函数二:生成一个xt方便实用

function [xt,t]=XTG(N)
%xt=xtg产生一个长度为N,有加性高频噪声的单频调幅信号xt,采样频率是1000Hz 
Fs=1000;%采样频率
T=1/Fs;%采样周期,采样间隔
t=0:T:(N-1)*T;
fc=Fs/10; %载波频率100
f0=fc/10; %基带信号频率10
mt=cos(2*pi*f0*t); %单频基带信号
ct=cos(2*pi*fc*t); %载波信号
xt=mt.*ct; %调制,采样
nt=2*rand(1,N)-1; %产生随机噪声
rp=0.1;As=70; %最大衰减,最小衰减
dev=[10^(-As/20),(10^(rp/20)-1)/(10^(rp/20)+1)]; %衰减系数
[n,fo,mo,w] = firpmord([150 200],[0 1],dev,1000 );
hn = firpm(n,fo,mo,w); 
yt=filter(hn,1,10*nt); %滤除高斯白噪声的低频成分生成高通干扰
xt=xt+yt;

主程序

任务一:

%例题2——2
N=64;
beta=7.865;
n=1:N;
wbo=boxcar(N);
wtr=triang(N);
whn=hanning(N);
whm=hamming(N);
wbl=blackman(N);
wka=kaiser(N,beta);
plot(n,wbo,'-',n,wtr,'*',n, whn,'+',n, whm,'.',n,wbl,'o',n,wka,'d');
axis([0,N,0,1.1]);
legend('矩形','三角形','汉宁','哈明','布莱克曼','凯塞')%例题2——3
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)))%检验最小阻带衰减figure()
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^{jomega})');
set(gca,'XTickMode','manual','XTick',[0,wp/pi,ws/pi,1 ]);
set(gca,'YTickMode','manual','YTick',[-50,-20,-3,0]);grid;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;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);%用 firl 函数求系统函数系数,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)));%检验最小阻带衰减figure();
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^{jomega})');
set(gca,'XTickMode','manual','XTick',[0,wp/pi,ws/pi,1 ]);
set(gca,'YTickMode','manual','YTick',[-50,-20,-3,0]);grid;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;

任务二:

%% 指标
wp = 0.24 * pi; % 通带截止频率
ws = 0.3 * pi; % 阻带开始频率
deltaw = ws - wp; % 频率带宽差
N0 = ceil(12* pi / deltaw); % 根据公式计算初始滤波器阶数
N = N0 + mod(N0 + 1, 2); % 确保滤波器阶数为奇数windows = blackman(N); % 使用窗
wc = (ws + wp) / (2 * pi); % 截止频率取归一化通阻带频率的平均值
b = fir1(N-1, wc, windows); % 设计FIR滤波器[H, w] = freqz(b, 1, 1000, 'whole'); % 计算频率响应
H = H(1:501)'; % 只取[0, pi]部分
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)));%检验最小阻带衰减%绘制图像
figure();
subplot(2, 2, 1);
stem(n, b); % 脉冲响应
axis([0, N-1, 1.1 * min(b), 1.1 * max(b)]);
title('实际脉冲响应');
xlabel('n'); ylabel('h(n)');subplot(2, 2, 2);
stem(n, windows); % 窗函数特性
axis([0, N-1, 0, 1.1]);
title('窗函数特性');
xlabel('n'); ylabel('w(n)');subplot(2, 2, 3);
plot(w / pi, db); % 幅度频率响应
axis([0, 1, -80, 10]);
title('幅度频率响应');
xlabel('频率 (单位: \pi)'); ylabel('|H(e^{j\omega})| (dB)');
set(gca, 'XTick', [0, wp/pi, ws/pi, 1]);
set(gca, 'YTick', [-60, -40, -20, 0]); grid on;subplot(2, 2, 4);
plot(w / pi, pha); % 相位频率响应
axis([0, 1, -4, 4]);
title('相位频率响应');
xlabel('频率 (单位: \pi)'); ylabel('\phi(\omega)');
set(gca, 'XTick', [0, wp/pi, ws/pi, 1]);
set(gca, 'YTick', [-pi, 0, pi]); grid on;disp(['通带波动 Rp = ', num2str(Rp), ' dB']);
disp(['阻带衰减 As = ', num2str(As), ' dB']);

任务三·:

% 调用 xtg 函数生成加噪声信号
[xt, t] = XTG(1000); % 采样频率为 1000 Hz% 计算频谱
N = length(xt); % 信号长度
fs = 1000; % 采样频率
X = fft(xt); % 快速傅里叶变换
X_mag = abs(X)/N; % 幅度归一化
f = (0:N-1)*(fs/N); % 频率轴% 绘制结果
figure();% 时域波形
subplot(3, 1, 1);
plot(t, xt);
title('信号加噪声波形');
xlabel('t/s');
ylabel('x(t)');
xlim([0 0.2]); % 修改横坐标范围
grid on;% 信号加噪声的频谱
subplot(3, 1, 2);
plot(f, X_mag);
title('信号加噪声的频谱');
xlabel('f/Hz');
ylabel('幅度');
xlim([0 fs/2]);
grid on;% 信号加噪声的频谱 (50-150 Hz)
subplot(3, 1, 3);
plot(f, X_mag);
title('信号加噪声的频谱 (50-150 Hz)');
xlabel('f/Hz');
ylabel('幅度');
xlim([50 150]); % 修改横坐标范围为 50-150
xticks(50:10:150); % 设置刻度间隔为 10
grid on;

任务四:

% 参数设置 
wp = 0.24 * pi; % 通带截止频率 
ws = 0.3 * pi; % 阻带开始频率 
n = 12; % 用于计算滤波器阶数的系数 
fs = 1000; % 采样频率 [xt, t] = XTG(fs); % 采样频率为 1000 Hz
b =filter_test7(wp,ws,n);
yt=fftfilt(b,xt);
Hyk=abs(fft(yt));% 计算滤波器的频率响应 
[H, f] = freqz(b, 1, 1024, 'whole'); % 计算频率响应 
% 绘图 
figure; % 1. 绘制滤波器的频率响应特性 
subplot(2, 2, 1); 
plot(f * fs / (2 * pi), 20*log10(abs(H)), 'LineWidth', 2); % dB scale 
title('FIR 滤波器的频率响应特性'); 
xlabel('频率 (Hz)'); 
ylabel('幅度 (dB)'); 
grid on; % 时域波形图 
subplot(2, 2, 2); 
plot(t, yt, 'b'); % 滤波后信号 
title('滤波后信号时域波形'); 
xlabel('时间 (秒)'); 
ylabel('幅度'); 
grid on; % 幅频特性图 
subplot(2, 2, 3); 
stem(Hyk); 
title('滤波器输出信号的幅频特性'); 
xlabel('频率 (Hz)'); 
ylabel('幅度'); 
axis([80,120,min(Hyk),max(Hyk)]); 
grid on; 

任务五:

% 读取音频信号
[xn, Fs] = audioread('motherland.wav'); 
sound(xn, Fs); 
%pause(length(xn)/Fs); I = 2; % 插值倍数
yn1 = zeros(I * length(xn), 1); % 插值后的信号初始化
for i = 1:length(xn)
yn1(I*i-1)=xn(i);
yn1(I*i)=0;
end
sound(yn1, I * Fs); 
%pause(length(yn1)/(I * Fs)); % 对原始信号和插值信号进行频谱分析
N = 2048; 
Xn = 1/Fs*fft(xn(8000:8199), N); 
Yn1 = 1/(I*Fs) * fft(yn1(16000:16399), N); % 插值信号对应频段做频谱分析% 绘制原始信号和插值信号的频谱
figure;
subplot(3, 1, 1);
plot((0:N/2-1)*(Fs/N), abs(Xn(1:N/2)));
title('原始信号频谱');
xlabel('频率 (Hz)');
ylabel('幅度');subplot(3, 1, 2);
plot((0:N/2-1)*(I*Fs/N), abs(Yn1(1:N/2)));
title('插值信号频谱');
xlabel('频率 (Hz)');
ylabel('幅度');% 设计镜像低通滤波器对插值信号进行滤波
b = filter_test7(0.24*pi,0.3*pi,11);
yn2 =filter(b, 1, yn1); % 滤波后的信号
sound(yn2, I * Fs); % 播放滤波后的信号% 频谱分析滤波后的信号
Yn2 = abs(1/Fs * fft(yn2(16000:16399), N)); % 滤波后插值信号频谱% 绘制滤波后插值信号的频谱
subplot(3, 1, 3);
plot((0:N/2-1)*(I*Fs/N), Yn2(1:N/2));
title('滤波后的插值信号频谱');
xlabel('频率 (Hz)');
ylabel('幅度');

思考题

Fs = 1; % 低通滤波器设计
%参数
wp = 0.2; % 通带截止频率 (归一化)
ws = 0.3; % 阻带开始频率 (归一化)
dp = 1 - 10^(-1/20); % 通带波动 1dB
ds = 10^(-24/20); % 阻带衰减 24dB
N = firpmord([wp, ws], [1, 0], [dp, ds]); % 估算滤波器阶数
b_lowpass = firpm(N, [0 wp ws 1], [1 1 0 0]); % FIR设计% 绘制低通滤波器曲线
figure('Name', '低通滤波器特性');
subplot(2, 2, 1);
stem(b_lowpass, 'filled');
title('低通滤波器冲激响应 h(n)');
xlabel('样本点 n'); ylabel('幅度');subplot(2, 2, 2);
[H, w] = freqz(b_lowpass, 1, 1024);
plot(w/pi, abs(H));
title('低通滤波器幅频特性曲线');
xlabel('归一化频率 (\times\pi)'); ylabel('幅度');subplot(2, 2, 3);
plot(w/pi, 20*log10(abs(H)));
title('低通滤波器幅频衰减特性');
xlabel('归一化频率 (\times\pi)'); ylabel('衰减 (dB)');subplot(2, 2, 4);
plot(w/pi, angle(H));
title('低通滤波器相频特性曲线');
xlabel('归一化频率 (\times\pi)'); ylabel('相位 (弧度)');%高通滤波器设计
%参数
ws = 0.4; 
wp = 0.6; 
dp = 1 - 10^(-0.2/20); % 0.2dB
ds = 10^(-43/20); % 43dB
N = firpmord([ws, wp], [0, 1], [ds, dp]); % 估算滤波器阶数
b_highpass = firpm(N, [0 ws wp 1], [0 0 1 1]); % 绘制高通滤波器曲线
figure('Name', '高通滤波器特性');
subplot(2, 2, 1);
stem(b_highpass, 'filled');
title('高通滤波器冲激响应 h(n)');
xlabel('样本点 n'); ylabel('幅度');subplot(2, 2, 2);
[H, w] = freqz(b_highpass, 1, 1024);
plot(w/pi, abs(H));
title('高通滤波器幅频特性曲线');
xlabel('归一化频率 (\times\pi)'); ylabel('幅度');subplot(2, 2, 3);
plot(w/pi, 20*log10(abs(H)));
title('高通滤波器幅频衰减特性');
xlabel('归一化频率 (\times\pi)'); ylabel('衰减 (dB)');subplot(2, 2, 4);
plot(w/pi, angle(H));
title('高通滤波器相频特性曲线');
xlabel('归一化频率 (\times\pi)'); ylabel('相位 (弧度)');%带通滤波器设计
%参数
wp1 = 0.2; wp2 = 0.6;
ws1 = 0.15; ws2 = 0.65; 
dp = 1 - 10^(-1/20); % 1dB
ds = 10^(-50/20); % 50dB
N = firpmord([ws1 wp1 wp2 ws2], [0 1 0], [ds dp ds]); % 估算阶数
b_bandpass = firpm(N, [0 ws1 wp1 wp2 ws2 1], [0 0 1 1 0 0]); % 绘制带通滤波器曲线
figure('Name', '带通滤波器特性');
subplot(2, 2, 1);
stem(b_bandpass, 'filled');
title('带通滤波器冲激响应 h(n)');
xlabel('样本点 n'); ylabel('幅度');subplot(2, 2, 2);
[H, w] = freqz(b_bandpass, 1, 1024);
plot(w/pi, abs(H));
title('带通滤波器幅频特性曲线');
xlabel('归一化频率 (\times\pi)'); ylabel('幅度');subplot(2, 2, 3);
plot(w/pi, 20*log10(abs(H)));
title('带通滤波器幅频衰减特性');
xlabel('归一化频率 (\times\pi)'); ylabel('衰减 (dB)');subplot(2, 2, 4);
plot(w/pi, angle(H));
title('带通滤波器相频特性曲线');
xlabel('归一化频率 (\times\pi)'); ylabel('相位 (弧度)');%带阻滤波器设计
%参数
ws1 = 0.2; ws2 = 0.6; 
wp1 = 0.15; wp2 = 0.65; 
dp = 1 - 10^(-1/20); % 1dB
ds = 10^(-45/20); % 45dB
N = firpmord([wp1 ws1 ws2 wp2], [1 0 1], [dp ds dp]); % 估算滤波器阶数
b_bandstop = firpm(N, [0 wp1 ws1 ws2 wp2 1], [1 1 0 0 1 1]); % 绘制带阻滤波器曲线
figure('Name', '带阻滤波器特性');
subplot(2, 2, 1);
stem(b_bandstop, 'filled');
title('带阻滤波器冲激响应 h(n)');
xlabel('样本点 n'); ylabel('幅度');subplot(2, 2, 2);
[H, w] = freqz(b_bandstop, 1, 1024);
plot(w/pi, abs(H));
title('带阻滤波器幅频特性曲线');
xlabel('归一化频率 (\times\pi)'); ylabel('幅度');subplot(2, 2, 3);
plot(w/pi, 20*log10(abs(H)));
title('带阻滤波器幅频衰减特性');
xlabel('归一化频率 (\times\pi)'); ylabel('衰减 (dB)');subplot(2, 2, 4);
plot(w/pi, angle(H));
title('带阻滤波器相频特性曲线');
xlabel('归一化频率 (\times\pi)'); ylabel('相位 (弧度)');

相关文章:

重邮+数字信号处理实验七:用 MATLAB 设计 IIR 数字滤波器

一、实验目的 1 、加深对窗函数法设计 FIR 数字滤波器的基本原理的理解。 2 、学习用 Matlab 语言的窗函数法编写设计 FIR 数字滤波器的程序。 3 、了解 Matlab 语言有关窗函数法设计 FIR 数字滤波器的常用函数用法。 4 、掌握 FIR 滤波器的快速卷积实现原理。…...

CES 2025:INAIR 推出“另类”AR电脑,重新定义移动计算体验

在2025年国际消费类电子产品展览会(CES)上,INAIR公司凭借其创新的AR电脑产品吸引了众多目光。这款设备不仅融合了增强现实(AR)技术与传统个人电脑的功能,还通过独特的设计理念为用户带来了前所未有的移动计算体验。本文将详细介绍INAIR AR电脑的特点、技术创新及其对未来…...

了解 ASP.NET Core 中的中间件

在 .NET Core 中,中间件(Middleware) 是处理 HTTP 请求和响应的核心组件。它们被组织成一个请求处理管道,每个中间件都可以在请求到达最终处理程序之前或之后执行操作。中间件可以用于实现各种功能,如身份验证、路由、…...

数据结构与算法之链表: LeetCode 234. 回文链表 (Ts版)

回文链表 https://leetcode.cn/problems/palindrome-linked-list/description/ 描述 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表如果是,返回 true ;否则,返回 false 示例 1 输入:head [1,2,2,1]…...

DVWA靶场CSRF漏洞通关教程及源码审计

目录标题 CSRFlow源码审计 medium源码审计 high源码审计 impossible源码审计 CSRF low 先修改密码 看到地址栏 复制在另一个网页打开 成功登录 源码审计 没有任何过滤措施&#xff0c;很危险&#xff0c;并且采用了不安全的md5加密 <?phpif( isset( $_GET[ Change ] )…...

支持Google Analytics快捷添加的CMS:费用与部署形式详解

CMS 的费用和部署形式是选择平台的重要参考因素&#xff0c;不同的业务需求需要不同的解决方案。本文将从费用和部署形式两个角度&#xff0c;详细分析支持 Google Analytics 快捷集成的 CMS 和工具&#xff0c;帮助您更好地了解这些平台的特点。 1. BigCommerce 费用&#xff…...

Kibana操作ES基础

废话少说&#xff0c;开干&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;截图更清晰&#xff0c;复制在下面 #库操作#创建索引【相当于数据库的库】 PUT /first_index#获…...

如何在Ubuntu上安装和配置Git

版本控制系统&#xff08;VCS&#xff09;是软件开发过程中不可或缺的工具之一&#xff0c;它帮助开发者跟踪代码变更、协作开发以及管理不同版本的项目。Git作为当前最流行的分布式版本控制系统&#xff0c;因其高效性和灵活性而广受青睐。本文将指导你如何在Ubuntu操作系统上…...

基于springboot+vue+微信小程序的宠物领养系统

基于springbootvue微信小程序的宠物领养系统 一、介绍 本项目利用SpringBoot、Vue和微信小程序技术&#xff0c;构建了一个宠物领养系统。 本系统的设计分为两个层面&#xff0c;分别为管理层面与用户层面&#xff0c;也就是管理者与用户&#xff0c;管理权限与用户权限是不…...

HTB:Driver[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用smbclient尝…...

Require:利用MySQL binlog实现闪回操作

1&#xff0c;闪回原理 【binlog】MySQL binlog以event的形式&#xff0c;记录了MySQL server从启用binlog以来所有的变更信息&#xff0c;能够帮助重现这之间的所有变化。MySQL引入binlog主要有两个目的&#xff1a;一是为了主从复制&#xff1b;二是某些备份还原操作后需要重…...

黑马linux笔记(03)在Linux上部署各类软件 MySQL5.7/8.0 Tomcat(JDK) Nginx RabbitMQ

文章目录 实战章节&#xff1a;在Linux上部署各类软件tar -zxvf各个选项的含义 为什么学习各类软件在Linux上的部署 一 MySQL数据库管理系统安装部署【简单】MySQL5.7版本在CentOS系统安装MySQL8.0版本在CentOS系统安装MySQL5.7版本在Ubuntu&#xff08;WSL环境&#xff09;系统…...

FFmpeg入门

在音视频处理领域&#xff0c;有一款神器级的工具横扫开发者圈&#xff0c;那就是 FFmpeg。它被誉为“音视频处理的瑞士军刀”&#xff0c;凭借强大的功能和开源的特性成为众多开发者和媒体从业者的首选。今天&#xff0c;我们就来聊聊 FFmpeg 的入门使用&#xff0c;带你轻松开…...

如何将 sqlserver 数据迁移到 mysql

文章目录 前言一、导出SQL Server 数据二、转换数据格式为MySQL兼容格式三、导入数据到MySQL数据库五、使用ETL工具六、通过 navicat 工具七、总结 前言 将 SQL Server 数据迁移到 MySQL 是一个常见的数据库迁移任务&#xff0c;通常涉及以下几个关键步骤&#xff1a;导出 SQL…...

【leetcode 13】哈希表 242.有效的字母异位词

原题链接 题解链接 一般哈希表都是用来快速判断一个元素是否出现集合里。 当我们想使用哈希法来解决问题的时候&#xff0c;我们一般会选择如下三种数据结构。 数组 set &#xff08;集合&#xff09; map(映射) 如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景…...

git - 用SSH方式迁出远端git库

文章目录 git - 用SSH方式迁出远端git库概述笔记以gitee为例产生RSA密钥对 备注githubEND git - 用SSH方式迁出远端git库 概述 最近一段时间&#xff0c;在网络没问题的情况下&#xff0c;用git方式直接迁出git库总是会失败。 失败都是在远端, 显示RPC错误。 但是git服务器端…...

21天学通C++——9.5复制构造函数

浅复制 复制类对象时只是单纯的复制所有的值&#xff0c;如指针只会复制指针的大小&#xff0c;而不会再开辟同一空间大小的内存&#xff0c;即两个指针指向同一片内存空间。 伪代码&#xff1a; class MyString { private:char*buffer; public:MyString(const char* initStri…...

GPT 系列论文精读:从 GPT-1 到 GPT-4

学习 & 参考资料 前置文章 Transformer 论文精读 机器学习 —— 李宏毅老师的 B 站搬运视频 自监督式学习(四) - GPT的野望[DLHLP 2020] 來自猎人暗黑大陆的模型 GPT-3 论文逐段精读 —— 沐神的论文精读合集 GPT&#xff0c;GPT-2&#xff0c;GPT-3 论文精读【论文精读】…...

【python】OpenCV—Local Translation Warps

文章目录 1、功能描述2、原理分析3、代码实现4、效果展示5、完整代码6、参考 1、功能描述 利用液化效果实现瘦脸美颜 交互式的液化效果原理来自 Gustafsson A. Interactive image warping[D]. , 1993. 2、原理分析 上面描述很清晰了&#xff0c;鼠标初始在 C&#xff0c;也即…...

elasticsearch集群部署

一、创建 elasticsearch-cluster 文件夹 创建 elasticsearch-7.6.2-cluster文件夹 修改服务es服务文件夹为node-001 修改config/elasticsearch.yml 配置文件 # Elasticsearch Configuration # # NOTE: Elasticsearch comes with reasonable defaults for most settings. # …...

python调用window库全屏截图生成bmp位图学习

import io import time import struct import ctypes s time.time() gdi32 ctypes.windll.gdi32 user32 ctypes.windll.user32# 定义常量 SM_CXSCREEN 0 SM_CYSCREEN 1# 缩放比例 zoom 1 screenWidth int(user32.GetSystemMetrics(SM_CXSCREEN) * zoom) screenHeight i…...

Wireshark使用

1.抓包过滤器--BPF语法 类型Type&#xff1a;主机&#xff08;host&#xff09;、网段&#xff08;net&#xff09;、端口&#xff08;port&#xff09; 方向Dir&#xff1a;源地址&#xff08;src&#xff09;、目标地址&#xff08;dst&#xff09; 协议Proto&#xff1a;各种…...

FLASK 上传文件

HTML form enctype"multipart/form-data" 编码类型说明application/x-www-form-urlencoded表单数据编码为名称/值对。 这是标准编码格式。multipart/form-data表单数据编码为消息&#xff0c;页面上每个控件都有单独的部分。text/plain表单数据以纯文本编码&#x…...

卷积神经网络

卷积神经网络 随着输入数据规模的增大&#xff0c;计算机视觉的处理难度也大幅增加。 64 64 3 64 \times 64 \times 3 64643 的图片特征向量维度为12288&#xff0c;而 1000 1000 3 1000 \times 1000 \times 3 100010003 的图片数据量达到了300万。随着数据维度的增加&am…...

SparrowRTOS系列:链表版本内核

前言 Sparrow RTOS是笔者之前写的一个极简性RTOS&#xff0c;初代版本只有400行&#xff0c;后面笔者又添加了消息队列、信号量、互斥锁三种IPC机制&#xff0c;使之成为一个较完整、堪用的内核&#xff0c;初代版本以简洁为主&#xff0c;使用数组和表作为任务挂载的抽象数据…...

【redis初阶】环境搭建

​​​​​​​ 目录 ​​​​​​​ 一、Ubuntu 安装 redis 二、Centos7 安装 redis 三、Centos8 安装 redis 四、redis客户端介绍 redis学习&#x1f973; 一、Ubuntu 安装 redis 使用 apt 安装 apt install redis -y 查看redis版本 redis-server --version 支持远程连接…...

OpenCV相机标定与3D重建(54)解决透视 n 点问题(Perspective-n-Point, PnP)函数solvePnP()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 根据3D-2D点对应关系找到物体的姿态。 cv::solvePnP 是 OpenCV 库中的一个函数&#xff0c;用于解决透视 n 点问题&#xff08;Perspective-n-Po…...

shell脚本回顾1

1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容&#xff0c;不存在则创建一个文件将创建时间写入。 一、 ll /tmp/size.log &>/dev/null if [ $? -eq 0 ];then cat /tmp/size.log else touch /tmp/size.log echo date > /tmp/size.log fi二、 if …...

HarmonyOS命令行工具

作为一个从Android转过来的鸿蒙程序猿&#xff0c;在开发过程中不由自主地想使用类似adb命令的命令行工具去安装/卸载应用&#xff0c;往设备上推或者拉去文件&#xff0c;亦或是抓一些日志。但是发现在鸿蒙里边&#xff0c;华为把命令行工具分的很细&#xff0c;种类相当丰富 …...

V少JS基础班之第四弹

一、 前言 第四弹内容是操作符。 本章结束。第一个月的内容就完成了&#xff0c; 是一个节点。 下个月我们就要开始函数的学习了。 我们学习完函数之后。很多概念就可以跟大家补充说明了。 OK&#xff0c;那我们就开始本周的操作符学习 本系列为一周一更&#xff0c;计划历时6…...

从前端视角看设计模式之创建型模式篇

设计模式简介 "设计模式"源于GOF&#xff08;四人帮&#xff09;合著出版的《设计模式&#xff1a;可复用的面向对象软件元素》&#xff0c;该书第一次完整科普了软件开发中设计模式的概念&#xff0c;他们提出的设计模式主要是基于以下的面向对象设计原则&#xff…...

网络应用技术 实验七:实现无线局域网

一、实验简介 在 eNSP 中构建无线局域网&#xff0c;并实现全网移动终端互相通信。 二、实验目的 1 、理解无线局域网的工作原理&#xff1b; 2 、熟悉无线局域网的规划与构建过程&#xff1b; 3 、掌握无线局域网的配置方法&#xff1b; 三、实验学时 2 学时 四、实…...

Kotlin 循环语句详解

文章目录 循环类别for-in 循环区间整数区间示例1&#xff1a;正向遍历示例2&#xff1a;反向遍历 示例1&#xff1a;遍历数组示例2&#xff1a;遍历区间示例3&#xff1a;遍历字符串示例4&#xff1a;带索引遍历 while 循环示例&#xff1a;计算阶乘 do-while 循环示例&#xf…...

B+树的原理及实现

文章目录 B树的原理及实现一、引言二、B树的特性1、结构特点2、节点类型3、阶数 三、B树的Java实现1、节点实现2、B树操作2.1、搜索2.2、插入2.3、删除2.4、遍历 3、B树的Java实现示例 四、总结 B树的原理及实现 一、引言 B树是一种基于B树的树形数据结构&#xff0c;它在数据…...

ArkTS 基础语法:声明式 UI 描述与自定义组件

1. ArkTS 简介 ArkTS 是 HarmonyOS 应用开发中的一种编程语言&#xff0c;它结合了 TypeScript 的类型检查和声明式 UI 描述方式&#xff0c;帮助开发者更高效地构建用户界面。 2. 声明式 UI 描述 ArkTS 使用声明式语法来定义 UI 结构&#xff0c;通过组件、属性和事件配置实…...

list的模拟实现详解

文章目录 list的模拟实现list的迭代器begin()和end() list的模拟实现 #pragma once #include<iostream> #include<list>using namespace std;namespace wbc {// 类模版template<class T>struct list_node // 链表的节点{T _data;list_node<T>* _next;…...

图解Git——分支的新建与合并《Pro Git》

⭐分支的新建与合并 先引入一个实际开发的工作流&#xff1a; 开发某个网站。为实现某个新的需求&#xff0c;创建一个分支。在这个分支上开展工作。 正在此时&#xff0c;你突然接到一个电话说有个很严重的问题需要紧急修补。你将按照如下方式来处理&#xff1a; 切换到你…...

SQLite 语法快速入门

SQLite 是一个软件库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。 提供一个免费的在线SQLite编辑器 &#xff08;0&#xff09;常用命令 # 格式化 .header on .mode column .timer on# 查看表格 .tables# 查看表结构(建表语句) .schema …...

高速光电探测器设计 PIN APD铟镓砷TIA放大脉冲误码测试800-1700nm

高速光电探测器PIN APD铟镓砷TIA放大脉冲误码测试800-1700nm &#xff08;对标:索雷博APD431A&#xff09; &#xff08;对标:索雷博APD431A&#xff09; &#xff08;对标:索雷博APD431A&#xff09; 规格参数: 波长范围:800-1700nm 输出带宽:DC-400MHz&#xff08;-3dB&…...

【Linux】【内存】Buddy内存分配基础 NUMA架构

【Linux】【内存】Buddy内存分配基础 NUMA架构 NUMA架构 在 NUMA 架构中&#xff0c;计算机的多个 CPU 被划分为不同的处理单元&#xff0c;每个处理单元有一个本地内存。这些内存被称为内存节点&#xff08;memory node&#xff09;。处理器尽量访问自己的本地内存 node_da…...

【机器学习:十九、反向传播】

1. 计算图和导数 计算图的概念 计算图&#xff08;Computation Graph&#xff09;是一种有向无环图&#xff0c;用于表示数学表达式中的计算过程。每个节点表示一个操作或变量&#xff0c;每条边表示操作的依赖关系。通过计算图&#xff0c;可以轻松理解和实现反向传播。 计算…...

使用中间件自动化部署java应用

为了实现你在 IntelliJ IDEA 中打包项目并通过工具推送到两个 Docker 服务器&#xff08;172.168.0.1 和 172.168.0.12&#xff09;&#xff0c;并在推送后自动或手动重启容器&#xff0c;我们可以按照以下步骤进行操作&#xff1a; 在 IntelliJ IDEA 中配置 Maven 或 Gradle 打…...

Vue.js开发入门:从零开始搭建你的第一个项目

前言 嘿&#xff0c;小伙伴们&#xff01;今天咱们来聊聊 Vue.js&#xff0c;一个超火的前端框架。如果你是编程小白&#xff0c;别怕&#xff0c;跟着我一步步来&#xff0c;保证你能轻松上手&#xff0c;搭建起属于自己的第一个 Vue 项目。Vue.js 可能听起来有点高大上&#…...

基于大语言模型的组合优化

摘要&#xff1a;组合优化&#xff08;Combinatorial Optimization, CO&#xff09;对于提高工程应用的效率和性能至关重要。随着问题规模的增大和依赖关系的复杂化&#xff0c;找到最优解变得极具挑战性。在处理现实世界的工程问题时&#xff0c;基于纯数学推理的算法存在局限…...

mySQL安装(LINUX)

一、1. 下载并安装MySQL官方的 Yum Repository 1、连接云服务器&#xff0c;进入opt 2、下载安装包 wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm 3、解压 rpm -ivh mysql-community-release-el7-5.noarch.rpm 4、安装 yum install mysql-commu…...

【机器学习】农业 4.0 背后的智慧引擎:机器学习助力精准农事决策

我的个人主页 我的领域&#xff1a;人工智能篇&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;&#x1f44d;点赞 收藏❤ 在当今数字化浪潮汹涌澎湃之际&#xff0c;农业领域正经历着一场前所未有的深刻变革&#xff0c;大踏步迈向农业 4.0时代。这一时代…...

在 Azure 100 学生订阅中新建一台 Ubuntu VPS,并通过 Docker 部署 Nginx 服务器

今天来和大家分享一下如何在 Azure 100 学生订阅中创建一台 Ubuntu VPS&#xff0c;并在其上通过 Docker 部署 Nginx 服务器。在这个过程中&#xff0c;我们将一步步走过每一个细节&#xff0c;希望能帮助到大家。 Docker 和 Nginx 简介 Docker 是一个开源的容器化平台&#…...

快速、可靠且高性价比的定制IP模式提升芯片设计公司竞争力

作者&#xff1a;Karthik Gopal&#xff0c;SmartDV Technologies亚洲区总经理 智权半导体科技&#xff08;厦门&#xff09;有限公司总经理 无论是在出货量巨大的消费电子市场&#xff0c;还是针对特定应用的细分芯片市场&#xff0c;差异化芯片设计带来的定制化需求也在芯片…...

Linux常用命令大全

mv详解目录 Linux 常用命令大全 1. ls 指令 2. touch 指令 3. pwd 指令 4. mkdir 指令 5. cd 指令 6. rmdir 和 rm 指令 7. man 指令 8. cp 指令 9. mv 指令 10. cat 指令 11. more 指令 12. less 指令 13. head 指令 14. tail 指令 15. find 指令 16. grep 指…...

K-均值聚类算法

K-均值聚类算法是一种常用的无监督学习算法&#xff0c;用于将数据集划分为K个不同的簇。它的基本思想是通过迭代将样本点划分到最相邻的簇中&#xff0c;以最小化各个簇内的平均距离。下面我们来详细讲解K-均值聚类算法的步骤及其优缺点。 步骤&#xff1a; 1. 随机选择K个质…...