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

基于MATLAB的FIR和IIR低通/带通滤波器实现

一、FIR低通滤波器

%% FIR低通滤波器设计
clear; clc; close all;% 参数设置
Fs = 1000;      % 采样率
Fc = 150;       % 截止频率
N = 64;         % 滤波器阶数% 生成测试信号(含50Hz/150Hz/300Hz成分)
t = 0:1/Fs:1;
signal = sin(2*pi*50*t) + 0.5*sin(2*pi*150*t) + 0.2*sin(2*pi*300*t);% 添加高斯噪声
noisy_signal = signal + 0.3*randn(size(t));% 设计FIR低通滤波器(汉明窗)
Wn = Fc/(Fs/2);
b = fir1(N, Wn, 'low', hamming(N+1));% 滤波处理
filtered = filter(b, 1, noisy_signal);% 频谱分析
NFFT = 2^nextpow2(length(signal));
Y = fft(noisy_signal, NFFT)/NFFT;
Y_filt = fft(filtered, NFFT)/NFFT;
f = Fs/2*linspace(0,1,NFFT/2+1);% 图形对比
figure;
subplot(2,2,1); plot(t, signal); title('原始信号');
subplot(2,2,2); plot(t, noisy_signal); title('含噪信号');
subplot(2,2,3); plot(t, filtered); title('滤波后信号');
subplot(2,2,4); plot(f, 20*log10(abs(Y(1:NFFT/2+1))));
hold on; plot(f, 20*log10(abs(Y_filt(1:NFFT/2+1))), 'r');
title('频谱对比'); legend('原始', '滤波后');

二、FIR带通滤波器

%% FIR带通滤波器设计
clear; clc; close all;% 参数设置
Fs = 2000;      % 采样率
Fpass = [300 800]; % 通带范围
Fstop = [200 1000];% 阻带范围
Ap = 1;         % 通带衰减(dB)
As = 40;        % 阻带衰减(dB)% 生成测试信号(含200Hz/500Hz/1000Hz成分)
t = 0:1/Fs:0.5;
signal = sin(2*pi*200*t) + sin(2*pi*500*t) + sin(2*pi*1000*t);% 添加噪声
noisy_signal = signal + 0.5*randn(size(t));% 计算最小阶数
N = firpmord(Fpass, Fstop, Ap, As, Fs);% 设计带通滤波器(等波纹法)
b = firpm(N, Fpass, [1 1], [1 0.5]);% 滤波处理
filtered = filter(b, 1, noisy_signal);% 频谱分析
NFFT = 2^nextpow2(length(signal));
Y = fft(noisy_signal, NFFT)/NFFT;
Y_filt = fft(filtered, NFFT)/NFFT;
f = Fs/2*linspace(0,1,NFFT/2+1);% 图形对比
figure;
subplot(2,2,1); plot(t, signal); title('原始信号');
subplot(2,2,2); plot(t, noisy_signal); title('含噪信号');
subplot(2,2,3); plot(t, filtered); title('滤波后信号');
subplot(2,2,4); plot(f, 20*log10(abs(Y(1:NFFT/2+1))));
hold on; plot(f, 20*log10(abs(Y_filt(1:NFFT/2+1))), 'r');
title('频谱对比'); legend('原始', '滤波后');

三、IIR低通滤波器

%% IIR低通滤波器设计
clear; clc; close all;% 参数设置
Fs = 1000;      % 采样率
Fc = 150;       % 截止频率
Rp = 1;         % 通带波纹(dB)
Rs = 40;        % 阻带衰减(dB)% 生成测试信号(含50Hz/150Hz/300Hz成分)
t = 0:1/Fs:1;
signal = sin(2*pi*50*t) + 0.5*sin(2*pi*150*t) + 0.2*sin(2*pi*300*t);% 添加噪声
noisy_signal = signal + 0.3*randn(size(t));% 设计巴特沃斯低通滤波器
[N, Wn] = buttord(Fc/(Fs/2), 1.2*Fc/(Fs/2), Rp, Rs);
[b,a] = butter(N, Wn, 'low');% 滤波处理
filtered = filter(b, a, noisy_signal);% 频谱分析
NFFT = 2^nextpow2(length(signal));
Y = fft(noisy_signal, NFFT)/NFFT;
Y_filt = fft(filtered, NFFT)/NFFT;
f = Fs/2*linspace(0,1,NFFT/2+1);% 图形对比
figure;
subplot(2,2,1); plot(t, signal); title('原始信号');
subplot(2,2,2); plot(t, noisy_signal); title('含噪信号');
subplot(2,2,3); plot(t, filtered); title('滤波后信号');
subplot(2,2,4); plot(f, 20*log10(abs(Y(1:NFFT/2+1))));
hold on; plot(f, 20*log10(abs(Y_filt(1:NFFT/2+1))), 'r');
title('频谱对比'); legend('原始', '滤波后');

四、IIR带通滤波器

%% IIR带通滤波器设计
clear; clc; close all;% 参数设置
Fs = 2000;      % 采样率
Fpass = [300 800]; % 通带范围
Fstop = [200 1000];% 阻带范围
Rp = 1;         % 通带波纹(dB)
Rs = 40;        % 阻带衰减(dB)% 生成测试信号(含200Hz/500Hz/1000Hz成分)
t = 0:1/Fs:0.5;
signal = sin(2*pi*200*t) + sin(2*pi*500*t) + sin(2*pi*1000*t);% 添加噪声
noisy_signal = signal + 0.5*randn(size(t));% 计算最小阶数
[N, Wn] = buttord(Fpass/(Fs/2), Fstop/(Fs/2), Rp, Rs);% 设计带通滤波器
[b,a] = butter(N, Wn, 'bandpass');% 滤波处理
filtered = filter(b, a, noisy_signal);% 频谱分析
NFFT = 2^nextpow2(length(signal));
Y = fft(noisy_signal, NFFT)/NFFT;
Y_filt = fft(filtered, NFFT)/NFFT;
f = Fs/2*linspace(0,1,NFFT/2+1);% 图形对比
figure;
subplot(2,2,1); plot(t, signal); title('原始信号');
subplot(2,2,2); plot(t, noisy_signal); title('含噪信号');
subplot(2,2,3); plot(t, filtered); title('滤波后信号');
subplot(2,2,4); plot(f, 20*log10(abs(Y(1:NFFT/2+1))));
hold on; plot(f, 20*log10(abs(Y_filt(1:NFFT/2+1))), 'r');
title('频谱对比'); legend('原始', '滤波后');

五、关键参数说明

参数 FIR设计建议 IIR设计建议
阶数选择 通常需较高阶数(32-128) 较低阶数(4-16)即可
相位特性 严格线性相位 非线性相位
设计方法 窗函数法/firpm 巴特沃斯/切比雪夫
抗噪性能 过渡带较陡峭 需更高阶数实现

六、扩展应用

  1. 实时滤波

    % 使用dsp.FilterCascade实现实时处理
    firFilter = dsp.FIRFilter('Numerator', b);
    iirFilter = dsp.BiquadFilter('SOSMatrix', [b a]);
    
  2. GUI界面开发

    % 使用App Designer创建交互界面
    fdesign = fdesign.bandpass('Fst,Fp1,Fp2,Fst',200,300,800,1000,Fs);
    d = design(fdesign,'equiripple');
    

七、完整工程文件结构

Filter_Design/
├── FIR_LP/
│   ├── main.m
│   └── plot_result.m
├── FIR_BP/
│   ├── main.m
│   └── plot_result.m
├── IIR_LP/
│   ├── main.m
│   └── plot_result.m
└── IIR_BP/├── main.m└── plot_result.m

相关代码 matlab FIR 底通和带通滤波器和IIR 底通和带通滤波器完整程序 www.youwenfan.com/contentcnj/50643.html

可清晰对比FIR和IIR滤波器在信号处理中的性能差异。实际应用中建议:

  • 对相位敏感场景优先选择FIR滤波器
  • 对计算资源有限场景选择IIR滤波器
  • 高频信号处理推荐使用等波纹设计法
http://www.hskmm.com/?act=detail&tid=33085

相关文章:

  • 基于模糊C均值聚类(FCM)的图像分割技术
  • 2025年广告衫厂家推荐排行榜,防静电/劳保/国网/餐厅/工厂/电工/防酸碱/电力/车间/航空/员工/文化衫/T恤/POLO衫/冲锋衣公司推荐!
  • 2025年管道安装厂家权威推荐榜单:专业施工与优质服务口碑之选!
  • 2025年流量控制器厂家推荐排行榜,气体流量控制器,液体流量控制器,智能流量控制器公司精选!
  • 04-格式控制符
  • 2025年铝方通厂家推荐排行榜,专业生产与设计实力兼备的优质品牌!
  • 2025年沸腾制粒机厂家权威推荐榜:沸腾制粒/湿法混合/摇摆制粒机,专业性能与客户口碑深度解析及优质品牌推荐!
  • 2025年聚乙烯多功能防水篷布厂家推荐排行榜,耐用防水,户外必备优质品牌!
  • 2025年柴油发电机组厂家权威推荐榜:静音高效与持久耐用的行业首选!
  • SQL Server中关于 INSERTED.Id 与 SCOPE_IDENTITY() 获取新增数据的Id
  • 2025年鸡精生产线/鸡精生产设备厂家推荐排行榜,高效节能与智能化生产之选!
  • neural network中的tensor是什么?
  • 2025年工厂维保,工厂机电维修,工厂应急维修,工厂运维服务厂家推荐排行榜,专业高效与全方位保障之选!
  • 2025/10/17
  • 2025年视频拍摄服务权威推荐榜:创意剪辑与高清画质完美结合,打造视觉盛宴!
  • pytorch p66实训二
  • 有没有人坐11.1号晚上9点的火车返回衡水,大家要一起走么
  • 2025年10月权威更新:门头/仿木纹板/拉网/铝复合板/锥芯板/太空舱/铝蜂窝板/铝单板厂家排行榜前十强推荐与选购指南四川汇才以实力登顶
  • 2025年网络推广服务商权威推荐榜单,SEO优化,SEM营销,社交媒体推广,内容营销公司推荐
  • 日志分析-Tomcat日志分析
  • Cursor国内用户无法使用模型(Model not avilable)解决方案
  • 2025年手持式光谱仪厂家权威推荐榜单:精准检测与便携操作的行业首选!
  • 图像恢复任务
  • 2025年冷轧机/热轧机厂家推荐排行榜,专业生产与技术创新实力之选!
  • CF1325F Ehabs Last Theorem 题解
  • 2025年解冻设备厂家权威推荐榜单:高效节能与智能控制的行业首选!
  • Notepad++中替换时保留分组字符
  • 2025年10月休闲食品品牌权威评测与推荐:用数据说话的全景选购指南
  • 2025年10月PE管厂家推荐榜:茗杰建华领衔的对比评测与选购指南
  • 2025年棋牌室加盟权威推荐榜单:精选品牌,专业服务与市场口碑深度解析!