使用MATLAB设计FIR滤波器
1. 采用fir1函数设计,fir1函数可以设计低通、带通、高通、带阻等多种类型的具有严格线性相位特性的FIR滤波器。语法形式:
b = fir1(n, wn)
b = fir1(n, wn, ‘ftype’)
b = fir1(n, wn, ‘ftype’, window)
b = fir1(n, wn, ‘ftype’, window, ‘noscale’)
参数的意义及作用:
- b:返回的FIR滤波器单位脉冲响应,脉冲响应为偶对称,长度为n+1;
- n:滤波器的介数;
- wn:滤波器的截止频率,取值范围为0<wn<1,1对应信号采样频率一半。如果wn是单个数值,且ftype参数为low,则表示设计截止频率为wn的低通滤波器,如果ftype参数为high,则表示设计截止频率为wn的高通滤波器;如果wn是有两个数组成的向量[wn1 wn2],ftype为stop,则表示设计带阻滤波器,ftype为bandpass,则表示设计带通滤波器;如果wn是由多个数组成的向量,则根据ftype的值设计多个通带或阻带范围的滤波器,ftype为DC-1,表示设计的第一个频带为通带,ftype为DC-0,表示设计的第一个频带为阻带;
- window:指定使用的窗函数,默认为海明窗;
- noscale:指定是否归一化滤波器的幅度。
示例:
N=41; %滤波器长度 fs=2000; %采样频率 %各种滤波器的特征频率 fc_lpf=200; fc_hpf=200; fp_bandpass=[200 400]; fc_stop=[200 400]; %以采样频率的一半,对频率进行归一化处理 wn_lpf=fc_lpf*2/fs; wn_hpf=fc_hpf*2/fs; wn_bandpass=fp_bandpass*2/fs; wn_stop=fc_stop*2/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=20*log(abs(fft(b_lpf)))/log(10); m_hpf=20*log(abs(fft(b_hpf)))/log(10); m_bandpass=20*log(abs(fft(b_bandpass)))/log(10); m_stop=20*log(abs(fft(b_stop)))/log(10); %设置幅频响应的横坐标单位为Hz x_f=0:(fs/length(m_lpf)):fs/2; %绘制单位脉冲响应 subplot(421);stem(b_lpf);xlabel('n');ylabel('h(n)'); subplot(423);stem(b_hpf);xlabel('n');ylabel('h(n)'); subplot(425);stem(b_bandpass);xlabel('n');ylabel('h(n)'); subplot(427);stem(b_stop);xlabel('n');ylabel('h(n)'); %绘制幅频响应曲线 subplot(422);plot(x_f,m_lpf(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8); subplot(424);plot(x_f,m_hpf(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8); subplot(426);plot(x_f,m_bandpass(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8); subplot(428);plot(x_f,m_stop(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8); |
2. 采用fir2函数设计,函数算法是:首先根据要求的幅频响应向量形式进行插值,然后进行傅里叶变换得到理想滤波器的单位脉冲响应,最后利用窗函数对理想滤波器的单位脉冲响应激进型截断处理,由此得到FIR滤波器系数。fir2函数的语法形式:
b = fir2(n, f, m)
b = fir2(n, f, m, window)
b = fir2(n, f, m, npt)
b = fir2(n, f, m, npt, window)
b = fir2(n, f, m, npt, lap)
b = fir2(n, f, m, npt, lap, window)
各项参数的意义及作用:
- n及b:滤波器的介数,返回值b为滤波器系数,长度为n+1。注意:当设计的滤波器在归一化频率为1处的幅度值不为0时,n不能为奇数;
- f及m:f取值在0~1之间,对应为滤波器的归一化频率;m是长度与f相同的向量,用于设置对应频段范围内的理想幅值;
- window:用于指定窗函数的种类,默认是海明窗;
- npt:正整数,用于指定对幅度响应进行插值时的插值点个数,默认是512;
- lap:正整数,用于指定对幅度响应进行插值时,对于不连续点转变成连续时的点数,默认25
示例:
N=120; %滤波器阶数 fc=[0 0.125 0.125 0.25 0.25 0.5 0.5 1]; %截止频率 mag=[1 1 0.5 0.5 0.25 0.25 0.125 0.125 ]; %理想滤波器幅度 b=fir2(N,fc,mag); %设计海明窗滤波器 freqz(b); %绘制频率响应曲线 |
3. 采用kaiserord函数设计,凯塞窗具有可调参数选项,可根据相关算法,先选择过渡带、容限参数,并根据这些参数计算出凯塞窗的值,以及滤波器阶数,语法形式:
[n, wn, beta, filtype] = kaiserord(f, a, dev, fs)
各项参数的意义和作用:
- f及fs:如果f是一个向量,则其中的元素是待设计的过渡带的起始点和结束点;如果没有fs参数,f中元素的取值范围是0~1,即相对于采样频率一半的归一化频率;如果有fs参数,则fs为信号采样频率,f中元素即为实际的截止频率;
- a:是一个向量,用于指定过渡带频率段的理想幅度值;
- dev:是一个向量,用于指定通带或阻带内的容许误差;
- n:设计的最小阶数;
- wn:向量,计算得到的滤波器截止频率点;
- beta:计算得到的值;
- ftype:根据设计要求得到的滤波器类型参数
4. 采用firpm函数设计,采用最大误差最小准则进行滤波器设计,语法形式:
b = firpm(n, f, a)
b = firpm(n, f, a,w)
b = firpm(n, f, a,’ftype’)
b = firpm(n, f, a, w, ‘ftype’)
[b, delta] = firpm(…)
各项参数的意义及作用:
- n及b:滤波器阶数;
- f及a:两个长度相同向量,f取值0~1之间,对应滤波器的归一化频率,a用于设置对应频段范围内的理想幅值;
- w:长度为f的一半,实现对应频段幅度值的权值;
- ftype:指定滤波器结构类型,如果没有设置该参数,表示设计偶对称脉冲响应滤波器;如果设置为hilbert,则表示设计奇对称结构的滤波器,具有相移特性;
- delta:返回滤波器最大容限值
示例:
利用凯塞窗函数设计低通FIR滤波器,过渡带为1000~1500Hz,采样频率为8000Hz,通带容限最大为0.01,阻带容限最大为0.05.利用海明窗及firpm函数设计相同的低通滤波器,截止频率为1500Hz,滤波器阶数为凯塞窗函数求取的值。
fs=8000; %采样频率 fc=[1000 1500]; %过渡带 mag=[1 0]; %窗函数的理想滤波器幅度 dev=[0.01 0.05]; %纹波 [n,wn,beta,ftype]=kaiserord(fc,mag,dev,fs); %获取凯塞窗参数 fpm=[0 fc(1)*2/fs fc(2)*2/fs 1]; %firpm函数的频段向量 magpm=[1 1 0 0]; %firpm函数的幅值向量 %设计凯塞窗及海明窗滤波器 h_kaiser=fir1(n,wn,ftype,kaiser(n+1,beta)); h_hamm=fir1(n,fc(2)*2/fs); %设计最优滤波器 h_pm=firpm(n,fpm,magpm); %求滤波器的幅频响应 m_kaiser=20*log(abs(fft(h_kaiser,1024)))/log(10); m_hamm=20*log(abs(fft(h_hamm,1024)))/log(10); m_pm=20*log(abs(fft(h_pm,1024)))/log(10); %设置幅频响应的横坐标单位为Hz x_f=[0:(fs/length(m_kaiser)):fs/2]; %只显示正频率部分的幅频响应 m1=m_kaiser(1:length(x_f)); m2=m_hamm(1:length(x_f)); m3=m_pm(1:length(x_f)); %绘制幅频响应曲线 plot(x_f,m1,'-',x_f,m2,'-.',x_f,m3,'--'); xlabel('频率(Hz)');ylabel('幅度(dB)'); legend('凯塞窗','海明窗','最优滤波器'); grid; |
使用MATLAB设计FIR滤波器的更多相关文章
- matlab进行FIR滤波器设计(一)
来源:https://blog.csdn.net/leokingszx/article/details/80041910 在实际的应用中,有时需要使用FIR根据完成一些特定功能,比如近似一阶RC低通电 ...
- Quartus设计FIR滤波器的系数文件格式(适用于FIR II的IP核)
对常用的FIR,我们使用MATLAB的fdatool(或者filterDesigner) 设计滤波器,给定指标,生成系数.为了方便,我们将系数保存到文件,其保存格式比较简介,在此进行说明. 1.FIR ...
- 窗函数法设计FIR滤波器参数特征表
- FIR滤波器设计
FIR滤波器的优越性: 相位对应为严格的线性,不存在延迟失真,仅仅有固定的时间延迟: 因为不存在稳定性问题,设计相对简单: 仅仅包括实数算法,不涉及复数算法,不须要递推运算,长度为M,阶数为M-1,计 ...
- FIR滤波器(1)- 基础知识
FIR滤波器广泛应用于数字信号处理中,主要功能就是将不感兴趣的信号滤除,留下有用信号.FIR滤波器是全零点结构,系统永远稳定:并且具有线性相位的特征,在有效频率范围内所有信号相位上不失真.在无线通信收 ...
- 转载论文关于fir滤波器的fpga实现
摘 要 本文讨论的FIR滤波器因其具有严格的线性相位特性而得到广泛的应用.在工程实践中,往往要求信号处理具有实时性和灵活性,本论文研究FIR的FPGA解决方案正体现了电子系统的微型化和单片化. 本论文 ...
- CIC and Fir 滤波器的级联
在FDATool中 CIC 和 Fir 级联滤波器的设计 1 设计CIC滤波器的幅频特性曲线如下 2.设计FIR 滤波器的幅频特性曲线如下 3.总的特性曲线如下 4.把通带部分放大后的图,比较平坦
- 数字信号处理实验(六)——FIR滤波器的设计
一.四种线性相位FIR滤波器的振幅响应 1.自编函数 [Hr,w,a,L]=-n) [Hr,w,a,L]=-n) [Hr,w,a,L]=-n) [Hr,w,a,L]=-n) 2.一个demo clea ...
- IIR滤波器和FIR滤波器的区别与联系zz
-------------------------------------------------------------------------------------------------- ...
随机推荐
- 什么是SAP GUI的client
我们用SAPGUI登录某个系统时,除了用户名和密码外,还要指定一个必填字段client: 这个client是什么东东? 看文档: SAP Client is the highest hierarchi ...
- TB5上正常使用msfconsole
在TB上使用系统自带的msfconsole,给出以下错误 [-] Failed to connect to the database: could not connect to server: Con ...
- Codeforces Round #433 (Div. 2)【A、B、C、D题】
题目链接:Codeforces Round #433 (Div. 2) codeforces 854 A. Fraction[水] 题意:已知分子与分母的和,求分子小于分母的 最大的最简分数. #in ...
- 关于Tomcat服务器接收到的请求参数乱码的问题
我们在编写的Controller 等服务器端的代码时,接受到的请求参数经常会乱码. 解决:在Tomcat 的安装目录下找到conf 文件夹下的server.xml文件用记事本打开. 找到 <Co ...
- web项目脱离Eclipse在Tomcat部署并配置Eclipse调试
简单来说,把WEB项目打成war包后放到webapps目录下启动tomcat便部署成功了,但是因为与Eclipse没有关联,故而无法Debug调试代码.这时在Tomcat的catalina.sh脚本里 ...
- v-bind:的基本用法
1. v-bind:class(根据需求进行选择) <style> .box{ background-color: #ff0; } .textColor{ color: #000; } . ...
- 1.spring:helloword/注入/CDATA使用/其他Bean/null&级联/p命名空间
新建工程,导入jar,添加spring配置文件(配置文件xxxx.xml)! 1.Helloword实现 Helloword.java public class HelloWord { private ...
- 使用libcurl下载文件小例
libcurl是一个很强大的开源网络处理库,支持包括HTTP.HTTPS.FTP……一系列网络协议.用它来进行HTTP的get\post 或者下载文件更是小菜一碟,chrome内核都用到了它,本文主要 ...
- html中defer和window.onload的加载顺序
结论:defer执行的顺序先于window.onload! 案例: html代码: <!DOCTYPE html> <html lang="en"> < ...
- WebApiClient.AOT.dll 调用api地址 -> 调用方法
优点:简化api调用过程,WebApiClient.AOT.dll中的IHttpApi接口 缺点:只适用于内部服务之间的调用(没有验证过程) 1.继承IHttpAPi接口 public interfa ...