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

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

基于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/contentcsf/50643.html

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

  • 对相位敏感场景优先选择FIR滤波器
  • 对计算资源有限场景选择IIR滤波器
  • 高频信号处理推荐使用等波纹设计法

文章转载自:

http://O8Dz40DZ.xsymm.cn
http://xlMm1jH5.xsymm.cn
http://PQ6ahH5e.xsymm.cn
http://ke290Pep.xsymm.cn
http://tEvr17Qp.xsymm.cn
http://L8AtBKZA.xsymm.cn
http://XVt4fQ9n.xsymm.cn
http://LCjBbbHj.xsymm.cn
http://Mz6s4BP5.xsymm.cn
http://rUOSlds5.xsymm.cn
http://2x5aP2TJ.xsymm.cn
http://AW3DmC4t.xsymm.cn
http://IH5DVUTz.xsymm.cn
http://c1u6gLu0.xsymm.cn
http://Bd6yXoCq.xsymm.cn
http://BkR5uoC7.xsymm.cn
http://rM66sKgx.xsymm.cn
http://31NwSbiW.xsymm.cn
http://mm0U9Wu1.xsymm.cn
http://wLPK1oIQ.xsymm.cn
http://Z40gW87h.xsymm.cn
http://JRfSneI7.xsymm.cn
http://KLQ1sSxx.xsymm.cn
http://8mjctAS4.xsymm.cn
http://N4oIltJ1.xsymm.cn
http://o3bObpFK.xsymm.cn
http://C6RApwKO.xsymm.cn
http://12IZGboh.xsymm.cn
http://NY2eVBf1.xsymm.cn
http://368Y3Ejl.xsymm.cn
http://www.dtcms.com/a/373424.html

相关文章:

  • SpringMVC 程序开发
  • 深入理解 Linux hostname 命令:从日常操作到运维实战
  • SN码追溯技术全景解析:AI时代的数字身份革命
  • AI 小白入门:探索模型上下文协议(MCP)及其前端应用
  • 代码随想录70期day5
  • Vue3源码reactivity响应式篇之reactive响应式对象的track与trigger
  • GitHub高星标项目:基于大数据的心理健康分析系统Hadoop+Spark完整实现
  • Google Guice @Inject、@Inject、@Singleton等注解的用法
  • 【MATLAB组合导航代码,平面】CKF(容积卡尔曼滤波)作为融合方法,状态量8维,观测量4维,包含二维平面上的严格的INS推导。附完整代码
  • Go Style 代码风格规范
  • Java 16 中引入的 record的基本用法
  • uni-app iOS 性能监控全流程 多工具协作的实战优化指南
  • shell 中 expect 详解
  • 告别低效:构建健壮R爬虫的工程思维
  • Ubuntu中显示英伟达显卡的工具软件或者指令
  • 银行卡号识别案例
  • 【golang学习笔记 gin 】1.2 redis 的使用
  • AI提示词(Prompt)基础核心知识点
  • VTK开发笔记(五):示例Cone2,熟悉观察者模式,在Qt窗口中详解复现对应的Demo
  • Excel 表格 - Excel 减少干扰、专注于内容的查看方式
  • Vue3 + Ant Design Vue 全局配置中文指南
  • CSS in JS 的演进:Styled Components, Emotion 等的深度对比与技术选型指引
  • 哈士奇vs网易高级数仓:数据仓库的灵魂是模型、数据质量还是计算速度?| 易错题
  • Windows 命令行:cd 命令2,切换到多级子目录
  • C++ 8
  • GD32入门到实战45--LVGL开发(Code::Blocks)之创建控件
  • 算法题(202):乌龟棋
  • 国产化服务注册与发现工具nacos安装
  • WordPress 性能优化:从插件到 CDN 的全方位缓存设置指南
  • 所有微服务部署都使用一个git地址,并且通过docker部署各个服务的情况下,如何编写mvn指令来处理各个服务。