有关C语言实现FIR滤波的问题

m1f2c3 2017-11-12 11:06:39

void fir(short x[], short h[], short y[])
{
int i,j;
long long sum;

for (j = 0; j < N; j++)
{
sum = 0;
for (i = 0; i < n; i++)
sum += x[j-i] * h[i];
y[j] = sum >> 15;
}
}


这是我从网上找到的一段FIR滤波器的C语言实现,有两个问题我不是特别明白。
1、sum变量为什么要右移15?
2、j-i有可能为负数吧(我没实验),这个程序不对吗?
我从两个地方(http://www.doc88.com/p-7178911902967.html http://blog.csdn.net/sonictl/article/details/8523189)都找到了这段代码,感觉不应该有错啊。求教各位大神。
...全文
646 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhu_hth520 2021-03-17
  • 打赏
  • 举报
回复
依据滤波公式,应该在算sum步骤时,加一个if判断j是否大于滤波器系数长度
ItsJingdai 2018-11-05
  • 打赏
  • 举报
回复
这个我做dsp实验的时候好像见过,那个右移15是除以总数的意思,就是求平均,前面那个式子是卷积的意思。
aayyyaayyy 2018-10-19
  • 打赏
  • 举报
回复
我试过 j-i 会出现负的

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧