又是一个数字信号处理原理的问题

图片上面是步骤下面是伪代码,用C++或者python都可以,虽然图片给了步骤但还是不会写

img

我会写,但是被骗了几次了,被白嫖钓鱼怕了,若干对你有帮助,希望可以给我个采纳!


这个东西应该是 一个求低通滤波器系数的伪代码,其中 N 是滤波器的阶数,AM 是带通滤波器的最大通带幅度(也称为最大增益),H[k] 是滤波器的频域系数,h[n] 是滤波器的时域系数。


我分析了一下:在这个伪代码中,首先使用 DFT 求出频域系数 H[k],然后使用 IDFT 求出时域系数 h[n]。求出的 h[n] 是一个对称的序列,所以只需要考虑 h[n] 在 n=1 到 n=N/2 的部分,其余部分可以用 h[-n] 的值求出
接下来是我的代码展示

import numpy as np

# 定义滤波器的阶数 N 和最大通带幅度 AM
N = 100
AM = 10

# 求出频域系数 H[k]
H = np.zeros(N)  # H[k] 的初始值都为 0
for k in range(N):
    H[k] = H(ej(k))  # 根据伪代码中的公式计算 H[k]

# 求出时域系数 h[n]
h = np.fft.ifft(H)  # 使用 NumPy 库的 ifft 函数求 IDFT

# 只需要考虑 h[n] 在 n=1 到 n=N/2 的部分
h = h[:N//2+1]

# 对称求出 h[-n] 的值
for n in range(1, N//2):
    h[-n] = h[n]

# 绘制滤波器系数 h[n] 的图像
import matplotlib.pyplot as plt

plt.plot(h)
plt.show()


其中,H(ej(k)) 是你自己实现的函数,根据伪代码中的公式计算 H[k]。