【问题标题】:DSP Filtering For Streaming流媒体的 DSP 过滤
【发布时间】:2018-10-07 20:29:28
【问题描述】:

我有一个带有 121 个抽头的 FIR 滤波器和 120 个滤波器状态长度的基本滤波器。我可以让它在 matlab 中工作,但我似乎无法理解要保存什么滤波器状态。我查看了外部的 matlab 过滤器状态,它与 data_in 不匹配。我正在流式传输数据,因此我需要将每次迭代放在一起相当于一次过滤所有内容。

for (int i = 0; i <16000; i++){
    for (int j = 0; j <121; j++){
    {
    if (j > i){
    data_out[out] += filter[j] * data_in[j - i];
    }
  }
}

memcpy(&filter_state_save[0], data_in[16000-120], 120*sizeof(data_in));

filter状态接近data_in的末尾不是很正常吗?

【问题讨论】:

  • j - i 应该是i - j
  • 问题是什么?

标签: c++ filtering signal-processing


【解决方案1】:

我认为你的问题很模糊。为什么需要保存输入数据,为什么只保存最后的 120 个样本?

如果我理解正确,您是在尝试将过滤器的输出保存到内存中,以便对其进行更多的 DSP 处理?

  • 您的前 120 个样本将包含过滤器响应。
  • 使用从索引 input_samples 开始的 (input_samples-filter_order) 样本保存 data_out。由于信号延迟了 filter_order 数量。

    for (int i = 0; i <16000; i++){
        for (int j = 0; j <121; j++){
        {
        if (i > j){ // changed case
        data_out[out] += filter[j] * data_in[i - j]; // should be i-j
        }
      }
    }
    
    memcpy(filter_state_save[0], data_in, 16000*sizeof(data_in)); 
    // copy 16000 elements back to filter_state_save which is the filtered output                        
    // output.
    
    • 确保将内存分配给 filter_state_save 作为 2D 数组,因为您会将 16000 个元素复制到第 0 个索引。对于下一个过滤器,您可能希望复制到第一个索引。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2016-01-25
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 2012-06-16
    • 2010-12-28
    • 2015-03-25
    相关资源
    最近更新 更多