MATLAB函数——fir1
文章目录
fir1:基于窗函数法的 FIR 滤波器设计
语法
b = fir1(n,Wn)b = fir1(n,Wn,ftype)
b = fir1(___,window)b = fir1(___,scaleopt)
说明
b = fir1(n,Wn) 使用 Hamming 窗设计具有线性相位的 n 阶低通,带通或多频带 FIR 滤波器。滤波器的类型取决于 Wn 的元素数。举例
b = fir1(n,Wn,ftype) 根据 ftype 的值和 Wn 的元素数,设计一个低通,高通,带通,带阻或多频带滤波器。举例
b = fir1(___,window) 使用 window 中指定的向量和上述语法中的任何参数来设计滤波器。举例
b = fir1(___,scaleopt) 额外指定滤波器的幅度响应是否已归一化。
注意:
使用fir2设计具有任意频率响应的加窗滤波器。
示例
FIR 带通滤波器
设计一个通带为 0.35 π ⩽ ω ⩽ \pi\leqslant \omega \leqslant π⩽ω⩽ 0.65 π \pi π rad / sample 的 48 阶 FIR 带通滤波器。将其幅度和相位响应可视化。
b = fir1(48,[0.35 0.65]);
freqz(b,1,512)

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滤波器,该滤波器可以衰减低于 0.4 π \pi π rad / sample 和介于 0.6 π \pi π 和 0.9 π \pi πrad / sample之间的归一化频率。将滤波器称为 bM。
ord = 46;
low = 0.4;
bnd = [0.6 0.9];
bM = fir1(ord,[low bnd]);
重新设计 bM,交换其通带和阻带。将新的滤波器称为 bW。 使用 fvtool 显示滤波器的频率响应。
bW = fir1(ord,[low bnd],'DC-1');
hfvt = fvtool(bM,1,bW,1);
legend(hfvt,'bM','bW')

使用 Hann 窗重新设计 bM。 (DC-0 是可选的。)比较 Hamming 窗和 Hann 窗设计的幅度响应。
hM = fir1(ord,[low bnd],'DC-0',hann(ord+1));
hfvt = fvtool(bM,1,hM,1);
legend(hfvt,'Hamming','Hann')

使用 Tukey 窗重新设计 bw。 比较 Hamming 窗和 Tukey 窗设计的幅度响应。
tW = fir1(ord,[low bnd],'DC-1',tukeywin(ord+1));
hfvt = fvtool(bW,1,tW,1);
legend(hfvt,'Hamming','Tukey')

输入参数
n - 滤波器阶数
滤波器阶数,指定为整数标量。
对于高通和带阻滤波器,fir1 始终使用偶数阶滤波器。此时阶数必须是偶数,因为奇数阶对称 FIR 滤波器在奈奎斯特频率下必须具有零增益。如果为高通或带阻滤波器指定奇数 n,则 fir1 将 n 增加 1。
数据类型:double
Wn - 频率约束
频率约束,指定为标量,二元向量或多元向量。
Wn 的所有元素必须严格大于 0 且严格小于 1,其中 1 对应于奈奎斯特频率:0 < Wn <1。奈奎斯特频率是采样率的一半或 π \pi π rad / sample。
-
如果
Wn是标量,则fir1设计一个截止频率为Wn的低通或高通滤波器。截止频率是滤波器的归一化增益为 –6 dB 的频率。 -
如果
Wn是二素向量[w1 w2],其中w1<w2,则fir1设计一个具有较低截止频率w1和较高截止频率w2的带通或带阻滤波器。 -
如果
Wn是多元素向量[w1 w2 ... wn],其中w1<w2< …<wn,则fir1返回频带为 0 < ω \omega ω <w1,w1< ω \omega ω <w2,…,wn< ω \omega ω < 1 的n阶多频带滤波器。
数据类型:double
ftype - 滤波器类型
滤波器类型,指定为以下之一:
-
'low'指定一个截止频率为Wn的低通滤波器。'low'是标量Wn的默认值。 -
‘high’ 指定一个截止频率 为
Wn的高通滤波器。 -
'bandpass'指定一个带通滤波器,如果Wn为二元向量。 当Wn具有两个元素时,默认设置为'bandpass'。 -
'stop'指定一个带阻滤波器,如果Wn为二元向量。 -
'DC-0'指定第一频带为阻带的多频带滤波器。 当Wn具有两个以上元素时,默认设置为'DC-0'。 -
'DC-1'指定第一通带为阻带的多频带滤波器。
window - 窗
窗,指定为向量。 窗向量必须具有 n + 1 个元素。 如果未指定窗,则 fir1 将使用 Hamming 窗口。 有关可用窗的列表,请参见加窗法。
如果尝试设计奇数阶的高通或带阻滤波器,则 fir1 不会自动增加窗的长度。
举例:kaiser(n+1,0.5) 指定一个用于 n 阶滤波器的成型因子为 0.5 的 Kaiser 窗。
举例:hamming(n+1) 等价于未指定窗。
数据类型:double
scaleopt - 归一化选项
归一化选项,指定为 'scale' 或 'noscale',默认为 'scale'。
'scale'对系数进行归一化,以使通带中心处的滤波器幅度响应为 1(0 dB)。'noscale'不对系数进行归一化。
输出参数
b - 滤波器系数
滤波器系数,以长度为 n + 1 的行向量返回。这些系数以 Z 变换变量 z z z 的降幂排序:
B ( z ) = \bm{B}(z)= B(z)= b(1) + b(2) z z z + … + b(n+1) z − n z^{-n} z−n
算法
fir1 使用最小二乘估计来计算滤波器系数,然后加窗来平滑脉冲响应。
参考
[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++ 代码。
另请参阅
cfirpm | designfilt | filter | fir2 | fircls | fircls1 | firls | firpm | freqz | hamming | kaiserord
在 R2006a 之前推出
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)