线性相位IIR滤波器

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import firwin2, cheby2, freqz, group_delay

# 设计参数
wp = 0.1 * np.pi
ws = 0.15 * np.pi
dp = 0.05
ds = 73

# 归一化频率
wp_n = wp / np.pi
ws_n = ws / np.pi

# 最小二乘FIR滤波器设计
numtaps = 301
bands = [0, wp_n, ws_n, 1]
desired = [1, 1, 0, 0]
fir_coeff = firwin2(numtaps, bands, desired)

# 12阶切比雪夫2型滤波器设计
N = 12
rs = ds  # 阻带衰减
b_cheby2, a_cheby2 = cheby2(N, rs, ws_n, btype='low', analog=False)

# 计算频率响应和群延迟
w, h_fir = freqz(fir_coeff, worN=300)
w, h_cheby2 = freqz(b_cheby2, a_cheby2, worN=300)

# 计算群延迟
_, gd_fir = group_delay((fir_coeff, 1), w=w)
_, gd_cheby2 = group_delay((b_cheby2, a_cheby2), w=w)

# 转换频率轴为归一化频率
w = w / np.pi

# 绘制幅频响应
plt.figure(figsize=(12, 6))

plt.subplot(1, 2, 1)
plt.plot(w, 20 * np.log10(np.abs(h_fir)), 'b', label='FIR')
plt.plot(w, 20 * np.log10(np.abs(h_cheby2)), 'r', label='Chebyshev II')
plt.title('Magnitude Response')
plt.xlabel('Normalized Frequency (π rad/sample)')
plt.ylabel('Magnitude (dB)')
plt.grid()
plt.ylim([-100, 5])
plt.legend()

# 绘制群延迟
plt.subplot(1, 2, 2)
plt.plot(w, gd_fir, 'b', label='FIR')
plt.plot(w, gd_cheby2, 'r', label='Chebyshev II')
plt.title('Group Delay')
plt.xlabel('Normalized Frequency (π rad/sample)')
plt.ylabel('Group Delay (samples)')
plt.grid()
plt.legend()

plt.tight_layout()
plt.show()

import numpy as np
import matplotlib.pyplot as plt

# 参数定义
L = 100  # Hamming窗长度,L+1个点
n = np.arange(0, 3*L)  # 定义信号长度
omega1 = 0.07 * np.pi
omega2 = 0.02 * np.pi
omega3 = 0.4 * np.pi

# 定义Hamming窗函数
def hamming_window(n, L):
    if n > L:
        return 0
    return 0.54 - 0.46 * np.cos(2 * np.pi * n / L)

# 生成Hamming窗
w = np.array([hamming_window(i, L) for i in range(3*L)])

# 定义三个窄带脉冲信号
x1 = w * np.cos(omega1 * n)
x2 = w * np.cos(omega2 * n - np.pi / 2)
x3 = w * np.cos(omega3 * n + np.pi / 5)

# 组合信号
x = x1 + np.roll(x2, L) + np.roll(x3, 2*L)

# 绘图
plt.figure(figsize=(12, 6))
plt.plot(n, x, label='x(n)')
plt.title('Generated Signal x(n)')
plt.xlabel('n')
plt.ylabel('Am
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值