matlab构造带通巴特沃斯滤波器进行滤波

复制代码
%% 详细演示示例(修正版)
fs = 1000;          % 采样率 1kHz
t = 0:1/fs:1;       % 1秒时间向量

% 生成测试信号:包含多个频率成分
f1 = 10;    % 10Hz - 滤除
f2 = 50;    % 50Hz - 保留  
f3 = 150;   % 150Hz - 滤除
f4 = 200;   % 200Hz - 滤除

signal = sin(2*pi*f1*t) + 0.5*sin(2*pi*f2*t) + ...
         0.8*sin(2*pi*f3*t) + 0.6*sin(2*pi*f4*t);

% 设计20-80Hz带通滤波器
f_low = 20;
f_high = 80;
Wn = [f_low, f_high] / (fs/2);  % 归一化

[b, a] = butter(6, Wn, 'bandpass');

fprintf('滤波器系数:\n');
fprintf('b = [%s]\n', sprintf('%.4f ', b));
fprintf('a = [%s]\n', sprintf('%.4f ', a));

% 应用滤波
filtered_signal = filtfilt(b, a, signal);

%% 可视化结果
figure('Position', [100, 100, 1200, 800]);

% 原始信号
subplot(3,2,1);
plot(t, signal);
title('原始信号');
xlabel('时间 (s)'); ylabel('幅度');
grid on;

% 滤波后信号
subplot(3,2,2);
plot(t, filtered_signal);
title('带通滤波后 (20-80Hz)');
xlabel('时间 (s)'); ylabel('幅度');
grid on;

% 频谱对比
N = length(signal);
f = (0:N-1)*fs/N;

% 修正:先计算FFT,再索引
signal_fft = abs(fft(signal));
filtered_fft = abs(fft(filtered_signal));

subplot(3,2,3);
plot(f(1:N/2), signal_fft(1:N/2));
title('原始信号频谱');
xlabel('频率 (Hz)'); ylabel('幅度');
grid on;

subplot(3,2,4);
plot(f(1:N/2), filtered_fft(1:N/2));
title('滤波后信号频谱');
xlabel('频率 (Hz)'); ylabel('幅度');
grid on;

% 滤波器频率响应
subplot(3,2,[5,6]);
[h, w] = freqz(b, a, 1024, fs);
plot(w, 20*log10(abs(h)));
title('带通滤波器频率响应');
xlabel('频率 (Hz)'); ylabel('幅度 (dB)');
grid on;
hold on;
plot([f_low, f_low], [-100, 0], 'r--', 'LineWidth', 1);
plot([f_high, f__high], [-100, 0], 'r--', 'LineWidth', 1);
legend('滤波器响应', '通带边界');

显示结果如下:

相关推荐
白帽攻防录6 小时前
SRC 挖洞:PostScript 打印机驱动双 RCE,打印服务器怎么变成内网跳板
开发语言·网络安全·php·内网安全
十年Java程序媛6 小时前
Java枚举Enum完整教程|替代静态常量,开发与面试要点
java·开发语言·spring boot·后端·面试
2603_965148117 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
MATLAB代码顾问7 小时前
【硬核推导+源码复现】永磁同步电机(PMSM)矢量控制(FOC)全流程解析:数学建模、PI参数整定与七段式SVPWM仿真
数学建模·matlab
xixiaoyunya7 小时前
Python 异步编程入门:用 asyncio 轻松实现并发任务
开发语言·python·php
学逆向的8 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
小坏讲微服务8 小时前
刚发布一个月的JDK 27,为什么我建议你立刻升级?
java·开发语言·spring boot·spring·架构·求职招聘·springboot4
打工仔折腾 AI9 小时前
用 Dashlet 把极空间 NAS 服务入口整理成统一导航首页的实践
java·开发语言·人工智能·后端·python·rpc·ai agent 实战
MATLAB代码顾问10 小时前
Simulink PI 参数扫描与批量仿真完整 MATLAB 代码
开发语言·matlab
Want59510 小时前
Python跳动的爱心②
开发语言·python·数学建模