FIR滤波器的设计

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_29689907/article/details/83508267

1.matlab设计fir滤波器的方法

matlab可以使用fir1函数设计低通、高通、低通、带通等具有严格线性相位特性的滤波器。
fir1函数的几种语法如下:

    b=fir1(n,wn);
    b=fir1(n,wn,'ftype');
    b=fir1(n,wn,'ftype',window)
    b=fir1(...,'noscale')

   
   
  • 1
  • 2
  • 3
  • 4

各个参数的含义:

  • b:返回fir滤波器的单位脉冲相应,偶对称,长度为n+1;
  • n:滤波器的阶数,设计出的滤波器长度为n+1;
  • wn:滤波器的截止频率,取值范围0<wn<1,1对应采样频率的1/2。当需要设计低通/高通滤波器,wn是单个值的,即截至频率,ftype参数是low/high;;当设计带通/带阻滤波器时,wn由两个数组成的向量[wn1 wn2],ftype参数是bandpass/stop;
  • window:指定使用的窗函数,默认是汉明窗(Hamming),最常用的还有汉宁窗(Hanning)、布莱克曼窗(Blackman)、凯赛窗(Kaiser);
  • noscale:指定归一化滤波器的幅度‘

2.fir1函数设计滤波器

设计滤波器,采用汉明窗,长度41(阶数40),采样频率2000hz:

  • 1.低通,截至频率200hz;
  • 2.高通,截至频率200hz;
  • 3.带通,通带200-400hz;
  • 4.带阻,阻带200-400h’z
clear all; close all; clc;
% 滤波器长度
N=41;
%采样频率
fs=2000;

%各种滤波器的特征频率
fc_lpf=200;
fc_hpf=200;
fp_bandpass=[200 400];
fc_stop=[200 400];

%以采样频率的一般,对频率归一化
wn_lpf=fc_lpf2/fs;
wn_hpf=fc_hpf2/fs;
wn_bandpass=fp_bandpass2/fs;
wn_stop=fc_stop2/fs;

%采用fir1函数设计FIR滤波器
b_lpf=fir1(N-1,wn_lpf);
b_hpf=fir1(N-1,wn_hpf,‘high’);
b_bandpass=fir1(N-1,wn_bandpass,‘bandpass’);
b_stop=fir1(N-1,wn_stop,‘stop’);

%求幅频响应
m_lpf=20log(abs(fft(b_lpf)))/log(10);
m_hpf=20log(abs(fft(b_hpf)))/log(10);
m_bandpass=20log(abs(fft(b_bandpass)))/log(10);
m_stop=20log(abs(fft(b_stop)))/log(10);

% 设置频率响应的横坐标单位为hz
x_f=0:(fs/length(m_lpf)):fs/2;

% 单位脉冲响应
subplot(4,2,1);stem(b_lpf);xlabel(‘n’);ylabel(‘h(n)’);legend(‘lpf’);
subplot(4,2,3);stem(b_hpf);xlabel(‘n’);ylabel(‘h(n)’);legend(‘hpf’);
subplot(4,2,5);stem(b_bandpass);xlabel(‘n’);ylabel(‘h(n)’);legend(‘bandpass’);
subplot(4,2,7);stem(b_stop);xlabel(‘n’);ylabel(‘h(n)’);legend(‘stop’);

% 幅频响应
subplot(4,2,2);plot(x_f,m_lpf(1:length(x_f)));xlabel(‘频率(hz)’);ylabel(‘幅度(db)’,‘fontsize’,8);legend(‘lpf’)
subplot(4,2,4);plot(x_f,m_hpf(1:length(x_f)));xlabel(‘频率(hz)’);ylabel(‘幅度(db)’,‘fontsize’,8);legend(‘hpf’)
subplot(4,2,6);plot(x_f,m_bandpass(1:length(x_f)));xlabel(‘频率(hz)’);ylabel(‘幅度(db)’,‘fontsize’,8);legend(‘bandpass’)
subplot(4,2,8);plot(x_f,m_stop(1:length(x_f)));xlabel(‘频率(hz)’);ylabel(‘幅度(db)’,‘fontsize’,8);legend(‘stop’);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

仿真脉冲相应和幅频响应图:
在这里插入图片描述

3.滤波

前面已经设计了低通,带通,高通的滤波器,根据参数设置得到了滤波器系数:

b_lpf、b_hpf、b_bandpass、b_stop

假设我们现在由原始数据xx,要对xx进行滤波,得到数据yy,在matlab应该怎么操作呢

就一句:

yy=filter(b_lpf,1,xx);

 
 
  • 1
                                </div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-095d4a0b23.css" rel="stylesheet">
                </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值