二维FIR数字滤波器设计——窗函数设计法

冈萨雷斯的选频滤波器太荒谬了,不破不立。

二维FIR(Finite Impulse Response)数字滤波器设计中,窗函数法是一种常用的方法。它基于一维窗函数的设计思想扩展到二维空间。

1. 确定理想频率响应

首先定义理想的频率响应 H d ( u , v ) H_d(u, v) Hd(u,v),其中u和v是频率变量。这通常是一个理想的低通、高通、带通或带阻滤波器的响应。对于图像处理来说,这些滤波器可以用来平滑图像(低通)、锐化图像(高通)等。

2. 计算理想的脉冲响应

利用傅里叶逆变换从理想的频率响应 H d ( u , v ) H_d(u, v) Hd(u,v)中计算出对应的理想脉冲响应 h d ( m , n ) h_d(m, n) hd(m,n),即滤波器的系数。这里m和n是离散空间坐标。然而,这个理想的脉冲响应通常是无限长的,并且包含有吉布斯现象(Gibbs phenomenon),即在不连续点附近出现的振荡。

3. 设计窗函数

选择一个适当的二维窗函数 W ( m , n ) W(m, n) W(m,n)来截断并加权理想的脉冲响应 h d ( m , n ) h_d(m, n) hd(m,n),以创建有限长度的滤波器系数。常用的窗函数包括矩形窗、汉宁窗(Hanning window)、汉明窗(Hamming window)、布莱克曼窗(Blackman window)等。二维窗函数可以通过一维窗函数的乘积形式得到,例如:

W ( m , n ) = w ( m ) × w ( n ) W(m, n) = w(m) \times w(n) W(m,n)=w(m)×w(n)

其中 w ( m ) w(m) w(m) w ( n ) w(n) w(n)是相同或不同的窗函数。

也有专门为二维设计的窗函数(如圆形窗)。

窗函数的选择会影响滤波器的过渡带宽和阻带衰减特性。

4. 加窗处理

将理想的脉冲响应 h d ( m , n ) h_d(m, n) hd(m,n)与窗函数 W ( m , n ) W(m, n) W(m,n)相乘,并获得有限长度的实际脉冲响应 h ( m , n ) h(m, n) h(m,n)

h ( m , n ) = h d ( m , n ) × W ( m , n ) h(m, n) = h_d(m, n) \times W(m, n) h(m,n)=hd(m,n)×W(m,n)

这样做不仅限定了滤波器的尺寸,而且通过窗函数的应用可以减少吉布斯现象的影响。

5. 滤波器实现

使用获得的滤波器系数 h ( m , n ) h(m, n) h(m,n)对输入信号进行卷积操作,从而实现滤波功能。在图像处理中,这意味着对图像像素值应用该卷积核。

6. 性能评估

最后,对设计好的滤波器进行性能评估,检查其是否满足特定的应用需求,如通带纹波、阻带衰减、过渡带宽等指标。如果必要,可以根据评估结果调整窗函数或其他参数重新设计滤波器。

  • 窗函数的选择:不同类型的窗函数会影响滤波器的频域特性。例如,矩形窗会提供最窄的主瓣但旁瓣较高;而其他窗函数可能会增加主瓣宽度但减少旁瓣电平。
  • 滤波器尺寸:较大的滤波器尺寸可以更好地逼近理想的频率响应,但也会增加计算复杂度。
  • 边界效应:在实际应用中,需要注意处理好图像边缘处的卷积运算,避免边界效应带来的失真。

不同结构的滤波器设计

在一维FIR数字滤波器设计——窗函数设计法的基础上,二维滤波器窗函数设计法有圆对称和可分离两种。

圆对称滤波器

1. 确定理想频率响应

首先,定义理想的频率响应 H d ( u , v ) H_d(u, v) Hd(u,v)。对于圆对称滤波器,理想频率响应是一个圆盘形状,即在某个半径内为1,之外为0。

H d ( u , v ) = { 1 if  u 2 + v 2 ≤ ω c 0 otherwise H_d(u, v) = \begin{cases} 1 & \text{if } \sqrt{u^2 + v^2} \leq \omega_c \\ 0 & \text{otherwise} \end{cases} Hd(u,v)={10if u2+v2 ωcotherwise

其中, ω c \omega_c ωc是截止频率。
在这里插入图片描述

2. 计算理想脉冲响应

通过逆离散傅里叶变换(IDFT)将理想频率响应转换为时域的脉冲响应 h d ( m , n ) h_d(m, n) hd(m,n)

h d ( m , n ) = IDFT { H d ( u , v ) } h_d(m, n) = \text{IDFT}\{H_d(u, v)\} hd(m,n)=IDFT{Hd(u,v)}

3. 应用圆对称窗函数

应用高斯窗函数 w ( m , n ) w(m, n) w(m,n)来平滑边缘,减少吉布斯现象。

win = fspecial('gaussian',21,2);
win = win ./ max(win(:));

在这里插入图片描述

4. 设计滤波器系数

将理想脉冲响应与矩形窗函数相乘,得到实际的滤波器系数 h ( m , n ) h(m, n) h(m,n)

h ( m , n ) = h d ( m , n ) ⋅ w ( m , n ) h(m, n) = h_d(m, n) \cdot w(m, n) h(m,n)=hd(m,n)w(m,n)

在这里插入图片描述

在这里插入图片描述

可分离滤波器

1. 定义理想频率响应

定义理想的频率响应 H d ( e j ω 1 , e j ω 2 ) H_d(e^{j\omega_1}, e^{j\omega_2}) Hd(ejω1,ejω2)。对于可分离滤波器,理想频率响应是一个矩形形状:

H d ( e j ω 1 , e j ω 2 ) = { 1 if  ∣ ω 1 ∣ ≤ ω c  and  ∣ ω 2 ∣ ≤ ω c 0 otherwise H_d(e^{j\omega_1}, e^{j\omega_2}) = \begin{cases} 1 & \text{if } |\omega_1| \leq \omega_c \text{ and } |\omega_2| \leq \omega_c \\ 0 & \text{otherwise} \end{cases} Hd(ejω1,ejω2)={10if ω1ωc and ω2ωcotherwise

其中, ω c \omega_c ωc是截止频率。
在这里插入图片描述

2. 计算理想脉冲响应

通过逆离散傅里叶变换(IDFT)将理想频率响应转换为时域的脉冲响应 h d ( m , n ) h_d(m, n) hd(m,n)

h d ( m , n ) = IDFT { H d ( e j ω 1 , e j ω 2 ) } h_d(m, n) = \text{IDFT}\{H_d(e^{j\omega_1}, e^{j\omega_2})\} hd(m,n)=IDFT{Hd(ejω1,ejω2)}

3. 分解脉冲响应

h d ( m , n ) h_d(m, n) hd(m,n)分解为两个一维滤波器的乘积:

h d ( m , n ) = h 1 ( m ) ⋅ h 2 ( n ) h_d(m, n) = h_1(m) \cdot h_2(n) hd(m,n)=h1(m)h2(n)

4. 应用窗函数

应用矩形窗函数 w ( m ) w(m) w(m) w ( n ) w(n) w(n)来平滑边缘,减少吉布斯现象。

w ( m ) = { 1 if  ∣ m ∣ ≤ M / 2 0 otherwise w(m) = \begin{cases} 1 & \text{if } |m| \leq M/2 \\ 0 & \text{otherwise} \end{cases} w(m)={10if mM/2otherwise

w ( n ) = { 1 if  ∣ n ∣ ≤ N / 2 0 otherwise w(n) = \begin{cases} 1 & \text{if } |n| \leq N/2 \\ 0 & \text{otherwise} \end{cases} w(n)={10if nN/2otherwise

M M M N N N为滤波器尺寸。
在这里插入图片描述

5. 设计滤波器系数

将理想脉冲响应与矩形窗函数相乘,得到实际的滤波器系数 h ( m , n ) h(m, n) h(m,n)

h ( m , n ) = h 1 ( m ) ⋅ w ( m ) ⋅ h 2 ( n ) ⋅ w ( n ) h(m, n) = h_1(m) \cdot w(m) \cdot h_2(n) \cdot w(n) h(m,n)=h1(m)w(m)h2(n)w(n)

在这里插入图片描述

在这里插入图片描述

### 如何在MATLAB中使用窗函数设计FIR滤波器 #### FIR滤波器设计原理 FIR(有限脉冲响应)滤波器可以通过多种方式设计,其中一种常用的方法是利用窗函数法。这种方法的核心是在频域定义理想的频率响应特性,然后通过傅里叶逆变换得到无限长度的理想冲击响应序列,并乘以一个有限窗口截断该理想序列从而获得实际可用的有限长FIR滤波器系数。 #### 使用Hamming窗和Blackman窗设计二维FIR滤波器 对于特定应用场景下的多维信号处理需求,可以创建更复杂的滤波器模型。例如,在图像处理领域中可能会涉及到二维数据的操作: ```matlab [f1, f2] = freqspace(21, 'meshgrid'); Hd = ones(21); r = sqrt(f1.^2 + f2.^2); Hd((r<0.1)|(r>0.5)) = 0; h_hamming = fwind1(Hd, hamming(21)); h_blackman = fwind1(Hd, blackman(21)); figure; subplot(1,2,1); imagesc(abs(freqz2(h_hamming))); title('Hamming Window Filter Response'); subplot(1,2,2); imagesc(abs(freqz2(h_blackman))); title('Blackman Window Filter Response'); ``` 这段代码展示了如何基于`hamming()` 和 `blackman()` 函数分别构建两种不同类型的窗函数应用于同一理想低通滤波器原型上,并对比两者的效果[^2]。 #### 利用fir1()函数快速设计一维FIR滤波器 针对常规的一维信号过滤任务,MATLAB提供了更为简便的方式——即调用内置的`fir1()`函数来进行滤波器设计工作。此功能允许用户指定所需的截止频率和其他参数来自动生成相应的滤波器系数向量: ```matlab fs = 8000; % Sampling frequency (Hz) fc = 1000; % Cutoff frequency of the filter (Hz) order = 50; % Order of the filter wn = fc / (fs/2); % Normalized cutoff frequency b = fir1(order, wn, 'low', window(@hamming, order+1)); fvtool(b, 1); % Visualize magnitude and phase response using FVTool ``` 上述脚本片段演示了一个简单的低通FIR滤波器实例化流程,采用了汉明窗作为加权因子调整过渡带宽和平滑度等性能指标[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值