Gnuradio中的滤波器深入理解

Gnuradio中的滤波器深入理解_第1张图片

”firdes“ 是 fir design 的缩写,意思是有限长脉冲响应滤波器设计。这个类在 /usr/local/include/gnuradio/filter/firdes.h 中定义。

在数字信号处理中,在数字信号处理中,FIR滤波器的设计方法有很多,所有的设计方法归根于要设计一个多项式使其对理想滤波频率响应函数的逼近达到最佳,就是像机器学习里拟合的问题。但是由于DTFT的导致的周期性我们对于拟合的误差只需要考虑在一个小区间 [0 pi]内,因为后面的区间其频响都是周期的了。而考虑在一个小区间误差函数达到均匀一致的方法是最佳一致逼近法,通过这种放大设计FIR滤波器也叫切比雪夫逼近法。切比雪夫逼近法设计得滤波器不光在迭代预测交错点频率存在较大的计算量,同时也在最终解多元的线性方程组也存在较大的计算量。或者是说FIR滤波器要达到一个较好的效果,他的计算量是远远大于IIR滤波器的。另外,在考虑FIR滤波器的阶数时,根据经验公式得到的滤波器阶数N也是比较大的,H(z)的复杂导致了FIR滤波器在实时实现上有很大的困难,也就是说很难根据过去和现在较少的输入达到对现在的输入进行滤波。既然FIR滤波器有如此多的缺点,那为什么还要设计呢?原因就是FIR系统较好实现线性相位。线性相位是一个比较好的特性,具备线性相位的系统可以进行谱分解,同时,线性相位携带了时域信号位移量的信息,对于研究信号的变化有很好的价值。FIR系统实现线性相位要满足其单位脉冲响应是奇或偶对称的关系,从零极点图的角度看就是其零点要满足关于单位圆对称。

freq_xlating_fir_filter_xxx 是频率转换FIR滤波器。在Taps中使用了低通滤波器,意思是先做频谱搬移然后做低通滤波。

Gnuradio中的滤波器深入理解_第2张图片

下面是freq_xlating_fir_filter_ccc.h 内容:

namespace gr {
  namespace filter {
    class FILTER_API freq_xlating_fir_filter_ccc : virtual public sync_decimator
    {
    public:
      typedef boost::shared_ptr sptr;
      static sptr make(int decimation,
				  const std::vector &taps,
				  double center_freq,
				  double sampling_freq);
      virtual void set_center_freq(double center_freq) = 0;
      virtual double center_freq() const = 0;
      virtual void set_taps(const std::vector &taps) = 0;
      virtual std::vector taps() const = 0;
    };
  } /* namespace filter */
} /* namespace gr */

其中 taps 是滤波器组抽头的向量/列表。

https://github.com/wh1312142954/gnuradio_demod

你可能感兴趣的:(USRP/Gnuradio)