MATLAB|切比雪夫低通滤波器设计与滤波实现

1. 问题描述

本人并非信号处理专业,仅在结构监测研究中遇到滤波问题,特总结常规的低通滤波技术,去除高频噪音。

由于环境的干扰因素,监测信号中总会包含噪音成分,影响信号处理过程,如下图:

接收信号中出现很多“毛刺”,即为高频噪音,预期通过低通滤波器过滤处理。

2. 技术背景

在MATLAB中有很多种滤波器可供选择,本文仅介绍一笔者实现的滤波方式:切比雪夫滤波器。

低通滤波的技术要点有:

  • 滤波器参数设置
[n,Wp]=cheb1ord(Wp,Ws,Rp,Rs);                                   % Cheby1
[b,a]=cheby1(n,Rp,Wp);
freqz(b,a,2048,fs);                                             % 查看设计滤波器的曲线    
  • 信号滤波运算
y = filter(b,a,x);

此处仅说明代码实现,理论问题不再说明。

3. 解决方案

滤波器参数的设置是有效滤波的关键,最重要的参数是确定滤波的范围:

  • 通过频率$f_{pass}$
  • 截止频率$f_{stop}$

上图可以看出,原信号的频域范围主要在100~300kHz。故可以设置:

  • 通过频率$f_{pass}= 300 kHz$
  • 截止频率$f_{stop}= 500 kHz$

即过滤掉500 kHz以上的高频噪音。

4. 实施示例

4.1 数据读入

%% 数据读入

clc,clear,close all
[M,dt] = tools.getcsv();                                            % 读入csv信号和采样周期dt

fs = 1/dt;                                                          % 采样频率
t = M(:,1);
s = detrend(M(:,3));                                                % 去趋势的信号

4.2 滤波参数设置

%% 参数设置

prompt0 = {                                                         % 对话框参数
    '通过频率 f-pass(kHz)', 300
    '截止频率 f-stop(kHz)', 500
    'Passband ripple in decibels Rp',0.1
    '衰减值Rs(Db)',30
};

dlg0.title = '滤波参数输入-马骋';
dlg0.save = 'lp';

para_input = tools.paradlg(prompt0,dlg0);

para.f1 = para_input{1}*1e3;
para.f3 = para_input{2}*1e3;
para.rp = para_input{3};
para.rs = para_input{4};
para.fs = fs;

注:以上tools为笔者自定义函数工具箱。

4.3 滤波器生成

%% cheby1低通滤波图示

para.type = 1;                                                      % 滤波器类型:切比雪夫-1
s_lp = tools.lowp(s,para);                                          % 滤波

可以看出,滤波器在频域300-500 kHz范围内逐渐衰减。

4.4 滤波效果

%% 处理信号绘图

figure
plot([t t],[s s_lp])
legend({'原始信号','低通滤波信号'})
title('cheby1低通滤波效果示例'),grid on
xlim([min(t) max(t)])

figure
subplot(211)
plot(t,s)
legend('原始信号'),grid on 
xlim([min(t) max(t)])

subplot(212)
plot(t,s_lp)
legend('滤波信号'),grid on 
xlim([min(t) max(t)])

显然,滤波后的信号平滑很多。

5. 常见问题

滤波核心函数如下:

function y=lowp(x,para)
% 题目: 低通滤波器
% 输入:
%       x       -- 原始信号序列
%       para.
%           f1  -- 通带截止频率
%           f3  -- 阻带截止频率
%           rp  -- 边带区衰减DB数设置
%           rs  -- 截止区衰减DB数设置
%           fs  -- 序列x的采样频率
%           type-- 滤波器类型
% 输出:
%       y      -- 滤波后的信号
% 功能:
%       低通滤波,滤除高频噪音
%       Cheby1
%       Butterworth
% 注意:
%       通带或阻带的截止频率的选取范围是不能超过采样率的一半
%       f1,f3的值都要小于fs/2
%       rp=0.1;rs=30;%通带边衰减DB值和阻带边衰减DB值
% 作者: 未知
% 修改: 马骋
% 2016.04.21 @HIT

%% 参数输入

f1 = para.f1;
f3 = para.f3;
Rp = para.rp;
Rs = para.rs;
fs = para.fs;

%% 滤波器设计
Wp = f1/(fs/2);                                                     % 采用fs/2归一化,Nyquist frequency.
Ws = f3/(fs/2);

if para.type==1
    [n,Wp]=cheb1ord(Wp,Ws,Rp,Rs);                                   % Cheby1
    [b,a]=cheby1(n,Rp,Wp);
    freqz(b,a,2048,fs);                                             % 查看设计滤波器的曲线    
    title(sprintf('n = %d Cheby1 Lowpass Filter',n))
    xlim([0 f3])
else
    
    [n,Wn] = buttord(Wp,Ws,Rp,Rs,'s');                              % Butterworth
    [b,a] = butter(n,Wn,'s');                                       % 计算滤波器系统函数分子分母多项式
    
    [z,p,k] = butter(n,Wn);
    sos = zp2sos(z,p,k);    
    freqz(sos,2048,fs)
    title(sprintf('n = %d Butterworth Lowpass Filter',n))
    xlim([0 f3])    
end

%% 滤波
y = filter(b,a,x);                                                  % 对序列x滤波后得到的序列y

end  % lowp

注:此函数中,仅切比雪夫-1滤波器测试成功,2型滤波器测试失败。


示例程序下载:

https://coding.net/u/frank0449/p/MATLAB_lowpassFilter/git

本文用时 25 m

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容