fir滤波器频域采样法
时间: 2023-11-16 18:06:47 浏览: 198
基于频域抽样法的fir数字带阻滤波器.doc
频率采样法是一种从频域出发的方法,用于设计FIR滤波器。它的基本思想是对所给定的理想频率响应H(e^jw)进行等间隔采样,然后用有限的采样点来设计所期望的滤波器。具体步骤如下:
1. 确定所需的滤波器类型和规格,包括截止频率、通带和阻带的最大衰减量等。
2. 根据所需的滤波器类型和规格,计算出理想的频率响应Hd(e^jw)。
3. 对理想频率响应Hd(e^jw)进行N点等间隔采样,得到采样频率响应Hd(k),其中k=0,1,...,N-1。
4. 对采样频率响应Hd(k)进行反离散傅里叶变换(IDFT),得到所需的滤波器系数h(n),其中n=0,1,...,N-1。
5. 根据所需的滤波器类型和规格,对滤波器系数h(n)进行加窗处理,得到最终的滤波器系数。
下面是一个示例代码,用于实现基于频率采样法的FIR滤波器设计:
```python
import numpy as np
import matplotlib.pyplot as plt
# 指定滤波器类型和规格
N = 51 # 滤波器长度
fs = 1000 # 采样频率
fc = 100 # 截止频率
M = (N - 1) // 2 # 滤波器的中心点
# 计算理想频率响应
Hd = np.zeros(N)
for i in range(N):
if i == M:
Hd[i] = 2 * np.pi * fc / fs
else:
Hd[i] = np.sin(2 * np.pi * fc * (i - M) / fs) / (np.pi * (i - M))
# 进行频率采样
Hd_k = np.fft.fft(Hd)
# 计算滤波器系数
h = np.real(np.fft.ifft(Hd_k))
# 加窗处理
w = np.hamming(N)
h = h * w
# 绘制滤波器的幅频响应
H = np.fft.fft(h)
f = np.linspace(0, fs/2, N//2+1)
plt.plot(f, 20*np.log10(np.abs(H[:N//2+1])))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude (dB)')
plt.title('FIR Filter Frequency Response')
plt.show()
```
阅读全文