本站所有资源均为高质量资源,各种姿势下载。
Swift项目中的图: 陷波滤波器(Notch Filter)算法设计与MATLAB实现
本节介绍陷波滤波器的设计方法,并给出project/main.m文件中核心代码的详细说明。项目提供了一个可调节参数的陷波滤波器,能够有效滤除信号中特定频率的干扰成分。
陷波滤波器是一种特殊的带阻滤波器,其阻带非常窄,主要用于消除信号中某个特定的频率成分(如工频干扰)。本项目设计了基于零极点配置的陷波滤波器,通过调整中心频率、带宽等参数,实现对特定频率成分的抑制。
用户可以通过调整以下参数来观察滤波器对不同频率成分的抑制效果:
项目代码实现了以下功能:
% 信号参数 t = 0:1/fs:1; % 时间向量 f1 = 10; % 信号频率1 (Hz) f2 = 50; % 信号频率2 (Hz) - 需要滤除的成分
% 计算极点半径 r = 1 - bw/2; % 极点位置(靠近单位圆)
% 设计零极点 zeros = [exp(1j*w0), exp(-1j*w0)]; % 零点在单位圆上 poles = [r*exp(1j*w0), r*exp(-1j*w0)]; % 极点在零点内侧
% 构建传递函数 b = poly(zeros); % 分子多项式系数 a = poly(poles); % 分母多项式系数
% 归一化滤波器系数 b = b/sum(b); % 确保直流增益为1 a = a/sum(a);
% 绘制幅度响应 figure; subplot(2,1,1); plot(f, 20*log10(abs(H))); title('陷波滤波器频率响应 - 幅度'); xlabel('频率 (Hz)'); ylabel('幅度 (dB)'); grid on;
% 绘制相位响应 subplot(2,1,2); plot(f, angle(H)*180/pi); title('陷波滤波器频率响应 - 相位'); xlabel('频率 (Hz)'); ylabel('相位 (度)'); grid on;
% 应用滤波器 filtered_signal = filter(b, a, signal);
% 计算滤波前后信号的频谱 N = length(signal); f_axis = (0:N-1)/N*fs;
spectrum_original = abs(fft(signal))/N; spectrum_filtered = abs(fft(filtered_signal))/N;
subplot(2,2,2); plot(t, filtered_signal); title('滤波后信号'); xlabel('时间 (s)'); ylabel('幅度');
% 频域信号对比 subplot(2,2,3); plot(f_axis(1:N/2), spectrum_original(1:N/2)); title('原始信号频谱'); xlabel('频率 (Hz)'); ylabel('幅度');
subplot(2,2,4); plot(f_axis(1:N/2), spectrum_filtered(1:N/2)); title('滤波后信号频谱'); xlabel('频率 (Hz)'); ylabel('幅度');
% 零极点图 figure; zplane(b, a); title('陷波滤波器零极点分布');
项目还可以进一步扩展以下功能: