fir1
基于窗函数的 FIR 滤波器设计
说明
示例
FIR 带通滤波器
FIR 高通滤波器
加载 chirp.mat
。该文件包含信号 y
,其大部分功率高于 Fs/4
(即奈奎斯特频率的一半)。采样率为 8192 Hz。
设计一个 34 阶 FIR 高通滤波器,以衰减低于 Fs/4
的信号的分量。使用截止频率 0.48 和波纹为 30 dB 的切比雪夫窗。
load chirp t = (0:length(y)-1)/Fs; bhi = fir1(34,0.48,'high',chebwin(35,30)); freqz(bhi,1)
对信号进行滤波。显示原始信号和高通滤波后的信号。两个图使用相同的 y 轴刻度。
outhi = filter(bhi,1,y); subplot(2,1,1) plot(t,y) title('Original Signal') ys = ylim; subplot(2,1,2) plot(t,outhi) title('Highpass Filtered Signal') xlabel('Time (s)') ylim(ys)
设计一个具有相同设定的低通滤波器。对信号进行滤波,并将结果与原始结果进行比较。两个图使用相同的 y 轴刻度。
blo = fir1(34,0.48,chebwin(35,30)); outlo = filter(blo,1,y); subplot(2,1,1) plot(t,y) title('Original Signal') ys = ylim; subplot(2,1,2) plot(t,outlo) title('Lowpass Filtered Signal') xlabel('Time (s)') ylim(ys)
多频带 FIR 滤波器
设计一个 46 阶 FIR 滤波器,用它衰减低于 弧度/采样点以及介于 和 弧度/采样点之间的归一化频率。将此滤波器命名为 bM
。计算它的频率响应。
ord = 46; low = 0.4; bnd = [0.6 0.9]; bM = fir1(ord,[low bnd]); [hbM,f] = freqz(bM,1);
重新设计 bM
,使其通过它在上例中衰减的频带并阻止其他频率。将新滤波器命名为 bW
。显示滤波器的频率响应。
bW = fir1(ord,[low bnd],"DC-1"); [hbW,~] = freqz(bW,1); plot(f/pi,mag2db(abs(hbM)),f/pi,mag2db(abs(hbW))) legend("bM","bW",Location="best") ylim([-75 5]) grid
使用汉宁窗重新设计 bM
。("DC-0"
是可选的。)比较汉明设计和汉宁设计的幅值响应。
hM = fir1(ord,[low bnd],'DC-0',hann(ord+1)); hhM = freqz(hM,1); plot(f/pi,mag2db(abs(hbM)),f/pi,mag2db(abs(hhM))) legend("Hamming","Hann",Location="northwest") ylim([-75 5]) grid
使用图基窗重新设计 bW
。比较汉明设计和图基设计的幅值响应。
tW = fir1(ord,[low bnd],'DC-1',tukeywin(ord+1)); htW = freqz(tW,1); plot(f/pi,mag2db(abs(hbW)),f/pi,mag2db(abs(htW))) legend("Hamming","Tukey",Location="best") ylim([-75 5]) grid
输入参数
n
— 滤波器阶数
整数标量
滤波器阶数,指定为整数标量。
对于高通和带阻配置,fir1
始终使用偶数滤波器阶数。阶数必须为偶数,因为奇数阶对称 FIR 滤波器在奈奎斯特频率处必须具有零增益。如果为高通或带阻滤波器指定了奇数 n
,则 fir1
会将 n
递增 1。
数据类型: double
Wn
— 频率约束
标量 | 二元素向量 | 多元素向量
频率约束,指定为标量、二元素向量或多元素向量。Wn
的所有元素必须严格大于 0 且严格小于 1,其中 1 对应于奈奎斯特频率:0 < Wn
< 1。奈奎斯特频率是采样率的一半或 π 弧度/采样点。
如果
Wn
是标量,则fir1
设计的是截止频率为Wn
的低通或高通滤波器。截止频率是滤波器的归一化增益为 -6 dB 处的频率。如果
Wn
是二元素向量[w1 w2]
,其中w1
<w2
,则fir1
设计的是截止频率下限为w1
且截止频率上限为w2
的带通或带阻滤波器。如果
Wn
是多元素向量[w1 w2 ... wn]
,其中w1
<w2
<…<wn
,则fir1
返回一个n
阶多频带滤波器,频带为 0 < ω <w1
、w1
< ω <w2
、…、wn
< ω < 1。
数据类型: double
ftype
— 滤波器类型
'low'
| 'bandpass'
| 'high'
| 'stop'
| 'DC-0'
| 'DC-1'
滤波器类型,指定为以下项之一:
'low'
指定截止频率为Wn
的低通滤波器。'low'
是标量Wn
的默认值。'high'
指定截止频率为Wn
的高通滤波器。如果
Wn
是二元素向量,则'bandpass'
指定一个带通滤波器。当Wn
有两个元素时,'bandpass'
是默认值。如果
Wn
是二元素向量,则'stop'
指定一个带阻滤波器。'DC-0'
指定多频带滤波器的第一个频带为阻带。当Wn
有两个以上的元素时,'DC-0'
是默认值。'DC-1'
指定多频带滤波器的第一个频带为通带。
scaleopt
— 归一化选项
'scale'
(默认) | 'noscale'
归一化选项,指定为 'scale'
或 'noscale'
。
'scale'
将系数归一化,使滤波器在通带中心处的幅值响应为 1 (0 dB)。'noscale'
不对系数进行归一化。
输出参数
算法
fir1
使用最小二乘逼近计算滤波器系数,然后通过 window
对冲激响应进行平滑处理。
参考
[1] Digital Signal Processing Committee of the IEEE Acoustics, Speech, and Signal Processing Society, eds. Programs for Digital Signal Processing. New York: IEEE Press, 1979, Algorithm 5.2.
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)