IIR数字滤波器与FIR数字滤波器的定义?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IIR数字滤波器与FIR数字滤波器的定义?相关的知识,希望对你有一定的参考价值。
无限脉冲响应滤波器是数位滤波器的一种,简称IIR数位滤波器(infinite impulse response filter)。由于无限脉冲响应滤波器中存在反馈回路,因此对于脉冲输入信号的响应是无限延续的。有限脉冲响应滤波器是数字滤波器的一种,简称FIR数字滤波器(finite impulse response filter)。这类滤波器对于脉冲输入信号的响应最终趋向于0,因此是有限的,而得名。它是相对于无限脉冲响应滤波器(IIR)而言。
有限脉冲响应滤波器(FIR filter)的优点:
1. 脉冲响应(impulse response)为有限长:造成当输入数位讯号为有限长的时候,输出数位讯号也为有限长。
2. 比无限脉冲响应滤波器(IIR filter)较容易最佳化(optimize)。
3. 线性相位(linear phase):造成h(n)\,是偶对称(even)或奇对称(odd)且有限长。
4. 一定是稳定的(stable):因为Z转换(Z transform)后所有的极点(pole)都在单位圆内。
有限脉冲响应滤波器(FIR filter)的缺点:
设计方式较无限脉冲响应滤波器(IIR filter)不容易。
无限脉冲响应滤波器(IIR filter)的优点:
较容易设计以及实现。
无限脉冲响应滤波器(IIR filter)的缺点:
1. 脉冲响应(impulse response)为无限长:造成当输入数位讯号为有限长的时候,输出数位讯号会变成无限长。
2. 比有限脉冲响应滤波器(FIR filter)较不易最佳化(optimize)。
3. 不一定是稳定的(stable):因为Z转换(Z transform)后所有的极点(pole)不一定都在单位圆内。
reference:w开头的被baidu屏蔽的某网站
参考资料:你懂的
参考技术A 3iir数字滤波器在计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,有现成的设计数据或图表可查,其设计工作量比较小,对计算工具的要求不高。在设计一个iir数字滤波器时,我们根据指标先写出模拟滤波器的公式,然后通过一定的变换,将模拟滤波器的公式转换成数字滤波器的公式。
4
iir数字滤波器的相位特性不好控制,对相位要求较高时,需加相位校准网络。
在matlab下设计iir滤波器可使用buttterworth函数设计出巴特沃斯滤波器,使用cheby1函数设计出契比雪夫i型滤波器,使用cheby2设计出契比雪夫ii型滤波器,使用ellipord函数设计出椭圆滤波器。下面主要介绍前两个函数的使用。
与fir滤波器的设计不同,iir滤波器设计时的阶数不是由设计者指定,而是根据设计者输入的各个滤波器参数(截止频率、通带滤纹、阻带衰减等),由软件设计出满足这些参数的最低滤波器阶数。在matlab下设计不同类型iir滤波器均有与之对应的函数用于阶数的选择。
iir单位响应为无限脉冲序列fir单位响应为有限的
iir幅频特性精度很高,不是线性相位的,可以应用于对相位信息不敏感的音频信号上;
fir幅频特性精度较之于iir低,但是线性相位,就是不同频率分量的信...3
iir数字滤波器在计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,有现成的设计数据或图表可查,其设计工作量比较小,对计算工具的要求不高。在设计一个iir数字滤波器时,我们根据指标先写出模拟滤波器的公式,然后通过一定的变换,将模拟滤波器的公式转换成数字滤波器的公式。
4
iir数字滤波器的相位特性不好控制,对相位要求较高时,需加相位校准网络。
在matlab下设计iir滤波器可使用buttterworth函数设计出巴特沃斯滤波器,使用cheby1函数设计出契比雪夫i型滤波器,使用cheby2设计出契比雪夫ii型滤波器,使用ellipord函数设计出椭圆滤波器。下面主要介绍前两个函数的使用。
与fir滤波器的设计不同,iir滤波器设计时的阶数不是由设计者指定,而是根据设计者输入的各个滤波器参数(截止频率、通带滤纹、阻带衰减等),由软件设计出满足这些参数的最低滤波器阶数。在matlab下设计不同类型iir滤波器均有与之对应的函数用于阶数的选择。
iir单位响应为无限脉冲序列fir单位响应为有限的
iir幅频特性精度很高,不是线性相位的,可以应用于对相位信息不敏感的音频信号上;
fir幅频特性精度较之于iir低,但是线性相位,就是不同频率分量的信号经过fir滤波器后他们的时间差不变。这是很好的性质。
另外有限的单位响应也有利于对数字信号的处理,便于编程,用于计算的时延也小,这对实时的信号处理很重要
信号处理基于 FIR与IIR滤波器低通高通带通设计matlab源码含GUI
一、简介
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});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_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变换
三、运行结果
四、备注
完整代码或者仿真咨询添加QQ1575304183
以上是关于IIR数字滤波器与FIR数字滤波器的定义?的主要内容,如果未能解决你的问题,请参考以下文章
信号处理基于 FIR与IIR滤波器低通高通带通设计matlab源码含GUI