matlab fir滤波器程序,使用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
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滤波器相关推荐
- matlab 随机骨料程序,基于matlab的混凝土三维圆形骨料模型随机投放方法
2012 年■ 试验研究 基于 matlab 的混凝土三维圆形骨料模型随机投放方法 张海波 1,何军拥 2 (1.广州航海高等专科学校,广东广州 510330: 2.广东工贸职业技术学院,广东广州 5 ...
- matlab编写随机数程序,【matlab编程】matlab随机数函数
Matlab内部函数 a. 基本随机数 Matlab中有两个最基本生成随机数的函数. 1.rand() 生成(0,1)区间上均匀分布的随机变量.基本语法: rand([M,N,P ...]) 生成排列 ...
- matlab 随机骨料程序,基于matlab的混凝土三维圆形骨料模型随机投放方法.pdf
一试验研究 斑楚遽1村 2Ol2年 基于matlab的混凝土三维圆形骨料模型 随机投放 方法 张海波 ,.何军拥. (1.广州航海高等专科学校,广东 广州 510330:2.广东工贸职业技术学院,广东 ...
- matlab网格划分程序与matlab有限元的结合
1. distmesh是一个较好的网格划分程序,具体可以参考:http://persson.berkeley.edu/distmesh/ 2.matlab有限元可以参考徐荣桥的书 3.这里本人打算画一 ...
- matlab 软启动程序,基于MATLAB的电动机软启动控制系统的仿真
<基于MATLAB的电动机软启动控制系统的仿真>由会员分享,可在线阅读,更多相关<基于MATLAB的电动机软启动控制系统的仿真(4页珍藏版)>请在人人文库网上搜索. 1.基于M ...
- matlab求偏微分方程程序,用MATLAB解偏微分方程.pdf
用MATLAB解偏微分方程.pdf 年 月 阴 山 学 刊 第 卷 第 期 丫叫 加 用 解偏微分方程 田 兵 包头师范学院 学报编辑部 , 内蒙古 包头 摘 要 讨论 了以 中偏徽分方程工具箱的用法 ...
- matlab的dc程序,基于MATLAB的数字式DC/DC开关电源系统建模
2009 年 3 月 25 日第 26 卷第 2 期 Telecom Power Technology Mar. 25 , 2009 , Vol. 26 No. 2 收稿日期 :20081217 作者 ...
- matlab编写转台程序,基于Matlab三轴惯导测试转台结构分析.doc
基于Matlab三轴惯导测试转台结构分析 基于Matlab三轴惯导测试转台结构分析 摘 要:三轴惯导测试转台作为惯导测试设备,其精度直接影响惯导设备的精度,而中框回转精度在三轴精度相对较差.影响其中框 ...
- matlab求直线斜率程序,使用matlab实现批量线性回归并出图(需要得到每条拟合直线斜率、截距以及R)...
使用matlab实现批量线性回归并出图(需要得到每条拟合直线斜率.截距以及R) 我只会使用origin对多组数据进行线性回归,不会用matlab.现在数据比较多,大约100多组,我想请大家帮忙,能不能 ...
最新文章
- 【AI白身境】搞计算机视觉必备的OpenCV入门基础
- 全球及中国家庭和公寓用对讲系统行业发展态势及及消费需求调研报告2022-2027年
- Android开发工具之Android Studio--调用系统隐藏方法之操作aidl文件步骤
- AVS 分像素运动估计优化算法
- sql join on和不用join区别_图解 SQL 各种 JOIN,太有用了!
- 防SQL注入(转载)
- 【渝粤教育】国家开放大学2018年春季 7215-21T电气传动与调速系统 参考试题
- vue项目 echarts 中国地图,vue项目 echarts中国地图点击省份显示对应它的各个市,从零开始。
- 活动报名 | 无限视觉生成模型NUWA-Infinity,可生成超3万像素清明上河图
- 如何快速识别图片中的字体是什么字体
- 1196:踩方格(递推)
- 三人表决器逻辑表达式与非_正则表达式 - 驰念
- msp430流水灯c语言程序,基于MSP-EXP430F5529开发板流水灯程序
- Go设置一个工作区打开多个项目
- 【华为OD机试真题 JAVA】跳格子游戏
- 十大智能家居系统解决方案
- win10系统不识别耳机 + 扬声器产生‘啪’的电流声音两种情况——解决办法
- 儿童高脚椅、餐椅安全标准ASTM F404
- 分享几段祖传的Python代码,拿来直接使用
- win10硬盘锁怎么解除_如何解除Windows10系统磁盘加密?
热门文章
- HP ELITEDESK 880 G2 HACKINTOSH
- 企业ERP企业管理系统上线后主要维护工作有哪些
- Linux 命令大全(看这一篇就足够)
- “中科杯”全国软件设计大赛决赛实录
- 电子工程计算机职称跟什么有关,电子与智能化工程相关专业高级职称包括哪些...
- 型车载DVD影音系统
- xhci键盘linux,QEMU “vmstate_xhci_event” 漏洞
- linux系统下SVN服务器搭建
- C程序|实现使用OPENSSL库 发送HTTPS请求,并接收数据|例如请求12306获取高铁、动车、火车车次信息的方法
- html表格整体左移动,js操作table统制tr jquery 两个table左右移动