我有一个基本滤波器,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的末尾是不正常的?
答案 0 :(得分:0)
我认为你的问题很模糊。为什么需要保存输入数据?为什么只保存最后120个样本?
如果我理解正确,你试图将滤波器的输出保存到内存中,或者在它上面做更多的DSP?
使用(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.
希望这有帮助。