数字滤波器的作用是滤除不感兴趣的信号,留下想要的信号。数字滤波器可分为无限脉冲响应(IIR)数字滤波器、有限脉冲响应(FIR)数字滤波器两种,两者各有优缺点,其中FIR数字滤波器因其具有良好的线性相位特性受到广泛应用,线性相位是指信号中各频率成分的相对相位关系不改变,即信号经过具有线性相位特性的滤波器后各个频率分量的延迟时间是一样的,IIR数字滤波器在达到相同性能指标时所需的阶数更小,所需成本更低,但相位非线性,因此在选择滤波器时需要多方面考虑,在对相位要求不敏感的场合,如语音通信等,选用IIR较为合适,这样可以充分发挥其经济高效的特点;在对线性相位要求较高的场合,如雷达、图像处理、数据传输等以波形携带信息的系统则需使用FIR数字滤波器。

MATLAB中有很多方法可以实现FIR数字滤波,例如使用fir1函数先得到滤波器系数h,然后使用filter/conv函数将所得系数h与滤波器输入信号进行卷积。本文主要介绍一种更灵活直观的图形化滤波器设计方法,即利用MATLAB自带的Filter Designer工具箱,通过设置相关参数完成FIR数字滤波器的设计,还可以将滤波器系数生成coe文件用于FPGA实现。其打开方法为:在MATLAB工具栏中找到”“APP”,从下拉栏里选中Filter Designer即可,如下图所示。

然后设置相关参数:

Response Type:选择滤波器的类型:低通、高通、带通和带阻等。

Design Method:FIR滤波器设计方法有多种,最常用的是窗函数设计法(Window)、等波纹设计法(Equiripple)和最小二乘法(Least-Squares)等。其中窗函数设计法在学校课堂中是重点讲解的,提到FIR滤波器肯定会想到hamming、kaiser窗,但是实际应用中却很少使用,因为如果采用窗函数设计法,达到所期望的频率响应,与其它方法相比往往阶数会更多;而且窗函数设计法一般只参照通频带wp、抑制频带ws和理想增益来设计滤波器,但是实际应用中通频带和抑制带的波纹也是需要考虑的,那在这种情况下,采用等波纹设计法就非常适用了。

Filter Order:设置滤波器的阶数,这个选项直接影响滤波器的性能,阶数越高,性能越好,但是相应在FPGA实现耗用的资源更多。在这个设置中提供2个选项:Specify order和Minimum order,Specify order是用户自己确定滤波器的阶数,其值等于滤波器阶数-1,Minimum order是让工具自动确定达到期望的频率相应所需要的最小阶数。

Frequency Specification:设置频率响应的参数,包括采样频率Fs、通带频率Fpass和阻带频率Fstop,通带频率可以理解为让小于Fpass的频率通过,阻带频率可以理解为让大于Fstop的频率被抑制。

本文以设计一个FIR低通滤波器来将包含有直流、30Hz、1020Hz三种频率成分的信号(频谱图如下图所示)中的1020Hz高频成分滤除为例,介绍滤波器参数设置方法。(画频谱图的方法见上一篇文章——信号处理之FFT)。

参数设置如下图所示。

Response Type选择低通,Design Method选择FIR等波纹设计法,Filter Order选择Minimum order,Frequency Specification中采样率设置为15360Hz,为了尽量不衰减30Hz低频分量,通带频率设置为60Hz,为了对1020Hz高频分量起到较好的衰减效果,阻带频率设置为1000Hz。

参数设置完成后,点击“Design Filter”,即可看到所设计的滤波器阶数为41阶以及滤波器的幅频响应曲线,可观察对不同频率成分的衰减情况,如下图所示。

从上图的幅频响应曲线可以看出在1020Hz处有约60dB的衰减,根据-60=20lg(衰减前幅值/衰减后幅值)可知,衰减后的幅值是衰减前的千分之一,即可以较好地滤除1020Hz的频率成分。通过按照下图所示步骤即可生成Matlab代码。

生成代码后有两种方式进行滤波,方法一:直接使用filter(fir_lowpass_60_1000_15360,e);其中fir_lowpass_60_1000_15360为生成的函数名,e为滤波器的输入信号。

方法二:将所生成的代码中的阴影部分复制粘贴到主程序,再使用conv(e,b,'same')。

经过FIR低通滤波器后的信号,其频谱图如下图所示。

从图中可以看出1020Hz的高频成分被滤波,只剩下直流分量和30Hz低频分量。

完整代码如下:

%% FIR滤波器 by CSDN LHY188166
clc;
clear;
close all;
fs_mf = 15360; %采样率
N = 1024; %采样点数/FFT点数
ma = 0.3; %30Hz信号调制深度
mb = 0.5; %1020Hz信号调制深度
mf = 0.3; %9960Hz调频副载波对载波的调制深度,调制度30%±2%
F_30 = 30; %30Hz频率分量
F_1020 = 1020; %1020Hz频率分量
t = 0:1/fs_mf:(N-1)/fs_mf;
%% 合成信号 1为直流分量
e =1+ma.*sin(2*pi*F_30.*t)+0.5*sin(2*pi*F_1020.*t);%% 画信号频谱图
[x11,freq] = fft_plot(e,fs_mf);
figure;
plot(freq,abs(x11));
xlabel('频率(Hz)');
ylabel('幅度');
title('未经FIR低通滤波器的信号频谱图');% Fs = 15360;  % Sampling Frequency
%
% Fpass = 60;              % Passband Frequency
% Fstop = 1000;            % Stopband Frequency
% Dpass = 0.057501127785;  % Passband Ripple
% Dstop = 0.0001;          % Stopband Attenuation
% dens  = 20;              % Density Factor
%
% % Calculate the order from the parameters using FIRPMORD.
% [N, Fo, Ao, W] = firpmord([Fpass, Fstop]/(Fs/2), [1 0], [Dpass, Dstop]);
%
% % Calculate the coefficients using the FIRPM function.
% b  = firpm(N, Fo, Ao, W, {dens});% fir_600_1 =conv(e,b,'same');
fir_600 = filter(fir_lowpass_60_1000_15360,e);%% 画经过600Hz低通滤波器后的频谱图
[x12,freq2] = fft_plot(fir_600,fs_mf);
figure;
plot(freq2,abs(x12));
xlabel('频率(Hz)');
ylabel('幅度');
title('经FIR低通滤波器的信号频谱图');
function Hd = fir_lowpass_60_1000_15360
%FIR_LOWPASS_60_1000_15360 Returns a discrete-time filter object.% MATLAB Code
% Generated by MATLAB(R) 9.7 and DSP System Toolbox 9.9.
% Generated on: 02-Feb-2023 16:27:16% Equiripple Lowpass filter designed using the FIRPM function.% All frequency values are in Hz.
Fs = 15360;  % Sampling FrequencyFpass = 60;              % Passband Frequency
Fstop = 1000;            % Stopband Frequency
Dpass = 0.057501127785;  % Passband Ripple
Dstop = 0.0001;          % Stopband Attenuation
dens  = 20;              % Density Factor% Calculate the order from the parameters using FIRPMORD.
[N, Fo, Ao, W] = firpmord([Fpass, Fstop]/(Fs/2), [1 0], [Dpass, Dstop]);% Calculate the coefficients using the FIRPM function.
b  = firpm(N, Fo, Ao, W, {dens});
Hd = dfilt.dffir(b);% [EOF]
function [x,freq] = fft_plot(x,Fs)
%计算信号的双边幅度频谱和其横坐标、并调整使得横坐标中心频率为0Hz,输入:x为输入信号,Fs为采样频率,输出:x为输入信号的幅度频谱,freq为输入信号幅度频谱的横坐标
N = length(x);
%%计算频谱的横坐标,使得中心频率为0Hz
if mod(N,2)==0k = -N/2:N/2-1;
elsek = -(N-1)/2:(N-1)/2;
end
T = N/Fs;
freq = k/T;
x= fft(x)/N;%fft并归一化
x= fftshift(x);

参考文献:https://blog.csdn.net/weixin_28951059/article/details/112188261

参考文献:https://blog.csdn.net/s09094031/article/details/83755663

信号处理之FIR数字滤波器(Matlab仿真)相关推荐

  1. fir数字滤波器MATLAB设计,基于FIR数字滤波器的Matlab设计

    摘 要 :阐迷了FIR数字浦波器的窗a数设计方法,并利用Matlab语言实现了浦波器的设计与仿真.Matlab语言可以 方便.快捷地设计具有严格线性相位的FIR系跳,可节省大It的编程时间,提高编租效 ...

  2. 数字信号处理(七)FIR数字滤波器的设计

    文章目录 FIR滤波器 线性相位FIR滤波器的条件及特点 线性相位FIR滤波器 线性相位条件 线性相位FIR滤波器幅度特性 类型1:h(n)=h(N-n-1),N=奇数 类型2:h(n)=h(N-n- ...

  3. 数字滤波器matlab仿真_模拟IC笔记(1)——PLL MATLAB建模与行为仿真

    从上一周开始定下研究PLL开始,通过搜集各类文献和资料,大致有了一些思路.最终的目的是在Candence 平台和SMIC 0.18um工艺下完成整个PLL系统的设计,但是在前期没有相关知识积累的情况下 ...

  4. FIR数字滤波器设计

    今天给大侠带来FIR数字滤波器设计,由于篇幅较长,分三篇.今天带来第三篇,FIR数字滤波器设计,包括窗函数法设计FIR滤波器.频率采样法设计FIR滤波器以及基于firls函数和remez函数的最优化方 ...

  5. 数字信号载波传输的Matlab仿真

    摘要:数字信号与信息科学的迅猛发展,计算机和通信系统的迅速发展的理论和实践,通信系统是将信息从信源发送到一个或者多个目的地,用来达到各种信息传输过程的一般技术体系.数字信号调制与解调过程中起着重要的信 ...

  6. 基于matlab的语音信号去噪毕业论文,MATLAB的FIR数字滤波器语音信号的去噪研究和仿真...

    摘要:语音信号作为人类语言交流的重要手段,语音处理的质量直接影响人们的正常通信.本文基于MATLAB对语音信号及加噪信号进行时域和频域分析,设计了FIR数字滤波器,完成对加噪信号滤波的处理.结果表明设 ...

  7. 基于等波纹最佳逼近法的FIR数字滤波器实现matlab仿真

    目录 一.理论基础 二.案例背景 三.MATLAB核心代码 四.仿真结论分析 一.理论基础 等波纹最佳逼近法,其本质是一种优化算法,该方法有效克服了基于窗函数的FIR滤波器设计方法以及基于频率抽样的F ...

  8. matlab非线性相位fir,数字信号处理实验(MATLAB版)实验23线性相位FIR数字滤波器.ppt...

    一.实验目的 (1)加深对线性相位FIR数字滤波器特性的理解. (2)掌握线性相位滤波器符幅特性和零极点分布的研究方法. (3)了解用MATLAB研究线性相位滤波器特性时程序编写的思路和方法. 二.实 ...

  9. Matlab | 数字信号处理:用窗函数法设计FIR数字滤波器

    ========================================== 博主github:https://github.com/MichaelBeechan 博主CSDN:https:/ ...

最新文章

  1. 18 Java面试之 Oracle 和 Mysql 数据库
  2. 基于springboot+vue实现外卖点餐系统
  3. 在pycharm安装MySQLdb库和pymysql库的区别
  4. 饼状图改变数据显示位置_这么用MatPlotLib视觉化呈现数据,你值得拥有
  5. 有关Java 锁原理
  6. android 字体空格,android – 在textview中设置字母之间的空格
  7. 规范化之路(一) Checkstyle插件安装使用
  8. 你留言,我送书!20本《玩转Python轻松过二级》等你拿!
  9. VB 提取TextBox 文本框中指定一行字符串
  10. mac:文件编码问题
  11. 2021年中国气体分离设备行业运营情况分析:气体分离及液化设备产量14.85万台[图]
  12. Matlab中的ttest2()函数实现
  13. 化工过程机械类毕业论文文献有哪些?
  14. java+selenium简单使用给斗鱼主播刷弹幕-.-
  15. 手写 React 第 2 节 - 初探 React 实现机制
  16. php中Sessionopen,php使用session提示[function.session-start]: open解决方法
  17. sudo,普通用户的提权操作,越权跟踪
  18. virtualbox安装时发生致命错误的解决方法
  19. 基因计算机技术,世界上第一台DNA计算机问世
  20. 2款非常经典的录音软件

热门文章

  1. [转载]windows搭建cloudreve对接OneDrive教程
  2. python开发库安装(pycharm)
  3. 用计算机弄音乐,视频剪辑添加音乐,如何在电脑上給视频添加音乐,什么添加音乐软件比较好用...
  4. 案例十三、模仿微信打飞机游戏
  5. 极客日报:HarmonyOS 2.0用户数升至5000万;腾讯起诉抖音侵权《王者荣耀》,获赔60万?抖音:没侵权,已上诉!
  6. java bidi_Java Bidi toString()用法及代码示例
  7. 基于ESP32的蓝牙翻页器设计(论文附调试成功代码!!)
  8. 硬盘更换电脑后开机解决办法
  9. 寒假宅喵java学习
  10. android 系统 优化设置,优化设置 让你的Android手机快人一步