一、数字滤波器设计简介

1 设计原理

1.1 滤波器概念

1.2 数字滤波器的系统函数和差分方程

1.3 数字滤波器结构的表示


1.4 数字滤波器的分类


2.1 IIR滤波器与FIR滤波器的分析比较

2.2 FIR滤波器的原理








3 FIR滤波器的仿真步骤

二、部分源代码

function varargout = nain1(varargin)
% NAIN1 MATLAB code for nain1.fig
%      NAIN1, by itself, creates a new NAIN1 or raises the existing
%      singleton*.
%
%      H = NAIN1 returns the handle to a new NAIN1 or the handle to
%      the existing singleton*.
%
%      NAIN1('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in NAIN1.M with the given input arguments.
%
%      NAIN1('Property','Value',...) creates a new NAIN1 or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before nain1_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to nain1_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help nain1% Last Modified by GUIDE v2.5 07-Jan-2020 15:57:07% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @nain1_OpeningFcn, ...'gui_OutputFcn',  @nain1_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before nain1 is made visible.
function nain1_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to nain1 (see VARARGIN)% Choose default command line output for nain1
handles.output = hObject;% Update handles structure
guidata(hObject, handles);% UIWAIT makes nain1 wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = nain1_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
Fs = 1500;
t = 1:1/Fs:6;
t=t(1:5000);
%写入chirp.wav文件
[pyr1,fs]=audioread('1.wav');%声音读取
pyr=pyr1(1:5000);
n=length(pyr);
pyr1=fft(pyr,n); %快速傅里叶变换
f=Fs*(0:n/2 - 1)/n;noise1=0.1*sin(20*pi*t);%低频噪声
x1=pyr+noise1;%加低频噪声信号
n=length(t); %画出加噪之后,其时域频域
S=abs(fft(pyr));%原始信号傅里叶变换
y1=abs(fft(x1));%原始信号傅里叶变换
handles.axes1;
subplot(121);
plot(pyr);
xlabel('时间');
ylabel('幅度');
title('原始信号波形'); %绘出时域波
subplot(122)
plot(S((1:length(S)/2)));
xlabel('频率');
ylabel('幅度');
title('原始信号频谱');
%% IIR频率变换法
%% 双线性变换法
% 2.1低通
Rp=3;%通带最大衰减dB
Rs=10;%阻带最小衰减dB
Wp=1000;%通带截止频率
Ws=1200;%阻带截止频率
[N,wn]=buttord(Wp,Ws,Rp,Rs,'s');
[b,a,k]=buttap(N);
[A,B,C,D]=zp2ss(b,a,k);
[A,B,C,D]=lp2lp(A,B,C,D,wn);%type='底通';
[b,a]=ss2tf(A,B,C,D);
[b21,a21]=bilinear(b,a,Fs);
[h21,w21]=freqz(b21,a21);         %根据参数求出频率响应
x21=filter(b21,a21,x1); % 进行低通滤波
y21=abs(fft(x21));  % 对滤波后信号做len点FFT变换
%2.3 切比雪夫I型滤波器 高通
Rp2=2;%通带最大衰减dB
Rs2=20;%阻带最小衰减dB
Wp2=3000;%通带截止频率
Ws2=3200;%阻带截止频率
[N,wn]=cheb1ord(Wp2,Ws2,Rp2,Rs2,'s');%求模拟的低通滤波器阶数和截止频率
[b,a,k]=cheb1ap(N,Rp2); %求S域的频率响应的参数
[A,B,C,D]=zp2ss(b,a,k);%阻带截止频率
[A,B,C,D]=lp2hp(A,B,C,D,wn);%type='高通';
[b,a]=ss2tf(A,B,C,D);%状态方程向传递函数转变
[b23,a23]=bilinear(b,a,Fs);%利用双线性变换实现S域到Z域转换
[h23,w23]=freqz(b23,a23);
x23=filter(b23,a23,x1); % 进行稿通滤波
y23=abs(fft(x23));  % 对滤波后信号做len点FFT变换
% 带通滤波器
Rp3=1;
Rs3=100;
Wp1=1200;
Ws1=1000;
Wp2=3000;
Ws2=3200;
Wp3=[Wp1,Wp2];
Ws3=[Ws1,Ws2];
%wp和ws分别是通带和阻带的频率(截止频率)。当wp和ws为二元矢量时,为带通或带阻滤波器,这时求出的Wn也是二元矢量;当wp和ws为一元矢量时,为低通或高通滤波器:当wp<ws时为低通滤波器,当wp>ws时为高通滤波器。
%wp和ws为二元矢量
Wp3=[1200 3000];                %设置通带频率
Ws3=[1000 3200];                %设置阻带频率
Rp3=1;                                   %设置通带波纹系数
Rs3=20;                                  %设置阻带波纹系数
[N,wn]=buttord(Wp3,Ws3,Rp3,Rs3,'s');
[b,a,k]=buttap(N);
[A,B,C,D]=zp2ss(b,a,k);
Wn=Wp2-Wp1;
Wo=sqrt(Wp2*Wp1);
[A,B,C,D]=lp2bp(A,B,C,D,Wo,Wn);% type='带通';
[num22,den22]=ss2tf(A,B,C,D);
% [b,a]=impinvar(num23,den23,Fs);
[b22,a22]=bilinear(num22,den22,Fs);%双线性变换实现S域到Z域的转换
[h22,w22]=freqz(b22,a22);                  %根据参数求出频率响应
x22=filter(b22,a22,x1); % 进行低通滤波
y22=abs(fft(x22));  % 对滤波后信号做len点FFT变换%% FIR窗函数
% 3.1 低通滤波器
%该函数采用hanning窗实现低通滤波
fp=1000;%通带截止频率
fs=2000;%阻带起始频率
FS=8000;
wp=2*pi*fp/FS;%将模拟通带截止频率转换为数字滤波器频率
ws=2*pi*fs/FS;%将模拟阻带起始频率转换为数字滤波器频率
wn=(wp+ws)/2/pi;%标准化的截止频率响应
Bt=ws-wp;
N0=ceil(6.2*pi/Bt);%滤波器长度
N=N0+mod(N0+1,2);
%设计加窗函数fir1
[b31,a31]=fir1(N-1,wn,hanning(N));
[h31,w31]=freqz(b31,a31,FS);                     %得到频率响应
x31=filter(b31,a31,x1); % 进行低通滤波
y31=abs(fft(x31));  % 对滤波后信号做len点FFT变换% 3.2 通带滤波
Fs=8000;
fp1=1200;%通带下限截止频率
fp2=3000;%通带上限截止频率
fs1=1000;
fs2=3200;
wp1=2*pi*fp1/Fs;%将通带下限截止频率转换为数字滤波器频率
wp2=2*pi*fp2/Fs;%将通带上限截止频率转换为数字滤波器频率
ws1=2*pi*fs1/Fs;%将通带下限截止频率转换为数字滤波器频率
ws2=2*pi*fs2/Fs;%将通带上限截止频率转换为数字滤波器频率
Bt=wp1-ws1;
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
wn=[(wp1+ws1)/2/pi,(wp2+ws2)/2/pi];
%设计加窗函数fir1
[b32,a32]=fir1(N-1,wn,'bandpass',hanning(N));
%求滤波器的幅频响应
[h32,w32]=freqz(b32,a32,FS);
x32=filter(b32,a32,x1);
y32=abs(fft(x32));  % 对滤波后信号做len点FFT变换

三、运行结果





四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.

【滤波器】基于matlab GUI低通+带通+高通FIR与IIR滤波器设计【含Matlab源码 360期】相关推荐

  1. 【TWVRP】基于matlab模拟退火算法求解带时间窗的车辆路径规划问题【含Matlab源码 160期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  2. 【手写数字识别】基于matlab GUI BP神经网络单个或连续手写数字识别系统【含Matlab源码 2296期】

    ⛄一.手写数字识别技术简介 1 案例背景 手写体数字识别是图像识别学科下的一个分支,是图像处理和模式识别研究领域的重要应用之一,并且具有很强的通用性.由于手写体数字的随意性很大,如笔画粗细.字体大小. ...

  3. 【GA MTSP】基于matlab GUI遗传算法求解多旅行商问题(多起点不同终点)【含Matlab源码 935期】

    一.TSP简介 旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选择 ...

  4. 【Matlab图像去噪】高通+低通+带通+方向滤波器图像滤波【含源码 1209期】

    一.代码运行视频(哔哩哔哩) [Matlab图像去噪]高通+低通+带通+方向滤波器图像滤波[含源码 1209期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  5. 21.失真/低高通/振铃效应/旁瓣泄漏效应/频域滤波/图像深度/频带/线性滤波源码分析 -- OpenCV从零开始到图像(人脸 + 物体)识别系列

    本文作者:小嗷 微信公众号:aoxiaoji 吹比QQ群:736854977 简书链接:https://www.jianshu.com/u/45da1fbce7d0 本文你会找到以下问题的答案: 失真 ...

  6. 【图像处理】基于matlab GUI多功能图像处理系统【含Matlab源码 1876期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像处理]基于matlab GUI多功能图像处理系统[含Matlab源码 1876期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  7. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  8. 【Matlab语音加密】语音信号加密解密(带面板)【含GUI源码 181期】

    一.代码运行视频(哔哩哔哩) [Matlab语音加密]语音信号加密解密(带面板)[含GUI源码 181期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆 ...

  9. 【Matlab水果识别】苹果质量检测及分级系统(带面板)【含GUI源码 1613期】

    一.代码运行视频(哔哩哔哩) [Matlab水果识别]苹果质量检测及分级系统(带面板)[含GUI源码 1613期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

  10. 【Matlab破损识别】机器视觉+SVM玉米种子破损识别(带面板)【含GUI源码 1651期】

    一.代码运行视频(哔哩哔哩) [Matlab破损识别]机器视觉+SVM玉米种子破损识别(带面板)[含GUI源码 1651期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考 ...

最新文章

  1. 直播预告 | 全国大学生智能汽车竞赛全向行进组——基础培训
  2. ASP.NET温故而知新学习系列之ASP.NET多线程编程—异步编程(九)
  3. java文件共享ftp怎么访问_文件共享服务器
  4. 计算机录取高考生过程,解密高考录取过程:人机结合 打造“阳光高招”
  5. XStream的使用
  6. ansible之cron模块
  7. 2. MFC编程——各函数作用
  8. 【三维路径规划】基于matlab麻雀搜索算法无人机三维路径规划【含Matlab源码 171期】
  9. html%3c转译,[转]URL编码
  10. 找高手用c语言帮写一个qpsk调制解调的程序,QPSK调制解调完整程序配有自己的注释...
  11. Lambda表达式 对List集合去重
  12. 给予树莓派的linux登陆密码,新手教程:如何 SSH 进入树莓派
  13. Mysql 根据经纬度计算距离
  14. 中华英才网竞品分析报告2016
  15. 我在51CTO微职位学软考——东隅已逝,桑榆非晚
  16. Adobe Premiere基础-常用的视频特效(边角定位,马赛克,模糊,锐化,手写工具,效果控件层级顺序)(十六)
  17. poi编辑word中的chart,对图表数据替换,并刷新图表
  18. 你好法语A1语法单元汇总(unité 7)
  19. 一、FPGA Cyclone Ⅳ OV5640图像实时采集系统设计
  20. 基于xml的数据交换技术

热门文章

  1. java Integer类的缓存(转)
  2. .Net身份验证概述
  3. PHP中的逻辑运算符的优先级
  4. 代码分享:php对二维数组进行排序
  5. Python 文本挖掘:使用gensim进行文本相似度计算
  6. unity Scene窗口的任意比例放大和缩小
  7. Atitit 业务流程执行引擎的实现 目录 1.1. 引擎实现语言java js php等 1 1.2. 流程语言 xml sql js等 业务流程定义语言规范总结 1 1.3. 实体方法定义 2
  8. Atitit 从api的使用区分工程师级别 高级 中级 初级工程师常使用的api与框架类库 目录 1. 初级工程师使用的api和框架类库ssm 1 2. 中级工程师常使用的api和框架类库 1 3.
  9. Atitit 招人之道 招不到人怎么办 attilax著 1. 适当降低要求 水至清则无鱼 太严格了就没有人了 2 1.1. 学历可以提升 可以开个企业内部学院快速提升学历 2 1.2. ,能力可以
  10. Atitit 信用管理概论 attilax学习心得