. 用频率采样法设计FIR数字滤波器的基本方法有哪几种
时间: 2023-10-31 13:06:32 浏览: 173
用频率采样法设计 FIR 数字滤波器的基本方法有以下几种:
1. 理想低通滤波器法:将模拟滤波器的频率响应进行采样,得到离散时间系统函数,再进行逆变换得到 FIR 数字滤波器的冲激响应。
2. 窗函数法:将模拟滤波器的频率响应进行采样,得到离散时间系统函数,再将其乘以窗函数,得到 FIR 数字滤波器的冲激响应。
3. 频率抽样法:将模拟滤波器的频率响应进行采样,得到离散时间系统函数,再将其进行插值,得到 FIR 数字滤波器的冲激响应。
4. 频率转换法:将模拟滤波器的频率响应进行采样,再进行频率转换,得到新的频率响应,再进行插值,得到 FIR 数字滤波器的冲激响应。
以上几种方法都是将模拟滤波器的频率响应进行采样,得到离散时间系统函数,再进行不同的处理得到 FIR 数字滤波器的冲激响应。根据实际应用需要选择合适的方法和采样参数。
相关问题
2.用频率采样法设计FIR数字滤波器的基本方法有哪几种?请列写出主要的程序语句。
对于用频率采样法设计FIR数字滤波器,主要有两种基本方法:窗函数法和最优化法。
1. 窗函数法
主要程序语句如下:
```python
import numpy as np
import matplotlib.pyplot as plt
# 1. 设计数字滤波器的参数
N = 51 # 滤波器阶数
fc = 0.2 # 截止频率
b = np.zeros(N+1)
mid = N//2
for i in range(-mid, mid+1):
if i == 0:
b[i+mid] = 2*np.pi*fc
else:
b[i+mid] = np.sin(2*np.pi*fc*i) / (np.pi*i)
# 2. 生成窗函数
win = np.hamming(N+1)
# 3. 将数字滤波器系数与窗函数相乘
h = b * win
# 4. 绘制数字滤波器幅频响应
w, H = signal.freqz(h)
plt.plot(w, 20*np.log10(abs(H)))
plt.xlabel('Frequency [rad/sample]')
plt.ylabel('Amplitude [dB]')
plt.show()
```
2. 最优化法
主要程序语句如下:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize
# 1. 定义目标函数
def target_func(x, N, fc, w):
b = np.zeros(N+1)
mid = N//2
for i in range(-mid, mid+1):
if i == 0:
b[i+mid] = 2*np.pi*fc
else:
b[i+mid] = np.sin(2*np.pi*fc*i) / (np.pi*i)
H = np.abs(np.fft.fft(b, w)) ** 2
H /= np.max(H)
h = np.real(np.fft.ifft(H * x, N+1))
return np.sum((h - np.sin(np.pi*i)) ** 2 for i in np.linspace(-0.5, 0.5, 21))
# 2. 最小化目标函数
N = 51 # 滤波器阶数
fc = 0.2 # 截止频率
w = 8192 # 频率采样点数
res = minimize(target_func, np.ones(w//2+1), args=(N, fc, w))
# 3. 计算数字滤波器系数
b = np.zeros(N+1)
mid = N//2
for i in range(-mid, mid+1):
if i == 0:
b[i+mid] = 2*np.pi*fc
else:
b[i+mid] = np.sin(2*np.pi*fc*i) / (np.pi*i)
H = np.abs(np.fft.fft(b, w)) ** 2
H /= np.max(H)
h = np.real(np.fft.ifft(H * res.x, N+1))
# 4. 绘制数字滤波器幅频响应
w, H = signal.freqz(h)
plt.plot(w, 20*np.log10(abs(H)))
plt.xlabel('Frequency [rad/sample]')
plt.ylabel('Amplitude [dB]')
plt.show()
```
用频率采样法设计FIR数字滤波器的基本方法有哪几种
用频率采样法设计FIR数字滤波器的基本方法有以下两种:
1. 理想低通滤波器转换法
理想低通滤波器转换法的基本思想是将所要设计的数字滤波器从时域转换到频域,然后通过对理想低通滤波器的采样来实现数字滤波器的设计。
理想低通滤波器转换法的程序语句如下:
```matlab
% 设计FIR数字滤波器
fs = 1000; % 采样频率
fpass = 200; % 通带截止频率
fstop = 300; % 阻带截止频率
Rp = 1; % 通带最大衰减
Rs = 40; % 阻带最小衰减
wp = 2*pi*fpass/fs; % 通带归一化角频率
ws = 2*pi*fstop/fs; % 阻带归一化角频率
Wp = 1; % 通带归一化频率
Ws = ws/wp; % 阻带归一化频率
N = ceil(3.3*pi/(ws-wp));% 滤波器阶数
h = fir1(N, Ws, 'low'); % 采样后的理想低通滤波器
freqz(h, 1, 512, fs); % 绘制滤波器频率响应
```
2. 频率抽样法
频率抽样法的基本思想是利用周期性采样的方法将模拟滤波器的频率响应转换为数字滤波器的频率响应。
频率抽样法的程序语句如下:
```matlab
% 设计FIR数字滤波器
fs = 1000; % 采样频率
fpass = 200; % 通带截止频率
fstop = 300; % 阻带截止频率
Rp = 1; % 通带最大衰减
Rs = 40; % 阻带最小衰减
wp = 2*pi*fpass/fs; % 通带归一化角频率
ws = 2*pi*fstop/fs; % 阻带归一化角频率
Wp = 1; % 通带归一化频率
Ws = ws/wp; % 阻带归一化频率
N = ceil(3.3*pi/(ws-wp));% 滤波器阶数
k = 0:N-1; % 抽样点
wk = (2*pi*k)/(N*2); % 抽样频率
h = (sin(wc*(k-N/2)))./(pi*(k-N/2)); % 抽样后的频率响应
h(N/2+1) = wc/pi; % 抽样后的中心点值
freqz(h, 1, 512, fs); % 绘制滤波器频率响应
```
注意:以上程序语句中,`fir1`函数用于设计FIR数字滤波器,`freqz`函数用于绘制滤波器的频率响应。具体函数使用方法可以在MATLAB帮助文档中查看。
阅读全文