用于流式传输的DSP过滤

时间:2018-04-27 03:38:37

标签: c++ filtering signal-processing

我有一个基本滤波器,FIR滤波器有121个抽头,滤波器状态长度为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));

过滤器状态是否接近data_in的末尾是不正常的?

1 个答案:

答案 0 :(得分:0)

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

如果我理解正确,你试图将滤波器的输出保存到内存中,或者在它上面做更多的DSP?

  • 您的前120个样本将包含过滤器响应。
  • 使用(input_samples-filter_order)样本从index input_samples开始保存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个索引。对于下一个过滤器,您可能希望复制到第一个索引。

希望这有帮助。