如何对复值信号实现带通滤波器?

信息处理 过滤器 过滤器设计 Python 带通 scipy
2022-02-23 15:04:15

我正在使用 Scipy 实现带通滤波器,但它假设通过了正归一化频率,但 I & Q 样本范围为 [Fc-Fs/2,Fc+Fs/2] 其中 Fs 是采样频率 & Fc 是中心频率但所需的带通filter 应该从 [f1,f2] 过滤,这样它们也可以是负数。如何传递这个频段信息?

我的方法是

  1. 使用 Scipy firwin生成一个窗口
  2. 使用 Scipy fftconvolve将其与信号进行卷积
1个回答

你可以做不同的事情:例如,

  • 使用firwin给你的(频率对称的)实抽头带通,然后应用它,应用一个复杂的高通(本质上是一个希尔伯特滤波器)来消除所有负频率。可悲的是,这给你留下了最初的问题(使用 scipy 找到一个复杂的抽头过滤器)
  • 执行与上述相同的操作,但已经将实值带通滤波器抽头与希尔伯特滤波器抽头进行卷积,因此您只需要应用一个滤波器
  • 做“通常的”低通到带通转换技巧:您设计一个具有脉冲响应(==抽头)的实值低通滤波器(例如使用firwinhLP[n]具有与所需的复杂带通相同的通带和过渡宽度。之后,你乘以hLP随着移位,您需要将以 0 为中心的低通移到您的fcenter- 中心带通:
    hBP[n]=hLPej2πfcenterfsamplen.
    这个想法是通过在频域中与狄拉克脉冲进行卷积来移动频率的低通,这相当于在时域中与所述频率的复正弦曲线相乘。您可能对这些答案 ( 1 , 2 ) 感兴趣。