fir能输入一个数据,滤波再输出吗,一般是按串进行的

[复制链接]
 楼主| a3724395 发表于 2017-10-20 13:39 | 显示全部楼层 |阅读模式
fir能输入一个数据,滤波再输出吗,做到实时滤波,我看资料大都输入一串滤波再输出一串的,达不到实时滤波的效果。
HWM 发表于 2017-10-20 13:54 | 显示全部楼层
这是时域上采用“卷积”的方法,忽略计算延迟基本上可以认为是“实时”的。
 楼主| a3724395 发表于 2017-10-20 14:11 | 显示全部楼层
HWM 发表于 2017-10-20 13:54
这是时域上采用“卷积”的方法,忽略计算延迟基本上可以认为是“实时”的。
...

就是假如采集200个数据,FIR滤波,然后再采集下一个200数据,中间滤波和计算的时间都忽略吗?
 楼主| a3724395 发表于 2017-10-20 14:20 | 显示全部楼层
a3724395 发表于 2017-10-20 14:11
就是假如采集200个数据,FIR滤波,然后再采集下一个200数据,中间滤波和计算的时间都忽略吗? ...

如果滤波后直接处理数据这样可以,假如另外一种情况,按一定频率采集滤波后,仍然要DA输出的,这样可能有些麻烦,因为滤完是一串,用两个定时器能解决这个情况?
HWM 发表于 2017-10-20 14:25 | 显示全部楼层
a3724395 发表于 2017-10-20 14:11
就是假如采集200个数据,FIR滤波,然后再采集下一个200数据,中间滤波和计算的时间都忽略吗? ...

不是这么处理的,FIR滤波输入序列可以连续不断地输入的,通过“卷积”运算直接输出其结果。

由于需要过往一定量的输入数据才能进行“卷积”运算,所以开始时输出会偏差,但可以认为起始点之前输入数据为零。

FIR滤波是采集一系列输入数据,然后按序输入既可得输出,IIR同样如此。
HWM 发表于 2017-10-20 14:32 | 显示全部楼层
a3724395 发表于 2017-10-20 14:20
如果滤波后直接处理数据这样可以,假如另外一种情况,按一定频率采集滤波后,仍然要DA输出的,这样可能有 ...

输入用AD采集信号,然后数据按序进入到FIR滤波,再对输出结果作DA即可。

当然,AD前可能会有抗混叠低通滤波,而输出也可能进行适当的模拟滤波。
HWM 发表于 2017-10-20 14:34 | 显示全部楼层
关于这些,建议去找本《数字信号处理》类的书看看。没有相关基础是不行的。
 楼主| a3724395 发表于 2017-10-20 14:48 | 显示全部楼层
HWM 发表于 2017-10-20 14:34
关于这些,建议去找本《数字信号处理》类的书看看。没有相关基础是不行的。
...

想了解信号处理这一块,听了李生红讲的《数字信号处理》,但按程序方面还是想不通。

按您的意思是可以输入一个数据滤波后,再输出一个数据,可能开始的部分不准确,但是能一个一个的来?
 楼主| a3724395 发表于 2017-10-20 14:53 | 显示全部楼层
HWM 发表于 2017-10-20 14:32
输入用AD采集信号,然后数据按序进入到FIR滤波,再对输出结果作DA即可。

当然,AD前可能会有抗混叠低通 ...

假如缓冲数组x[]是32个字节,系数h[]也是32个字节。
这样理解不知道对不对?
for(i=0;i<31;i++)              //for语句先对x[]往前移一位。
{
    x=x[i+1];                 //移位
}
x[31]=read0832(1);        //最后一位放采集的数据
sum=0;
for(j=0;j<32;j++)          //每次对 x[31]即最后一位进行滤波,去掉串fir的一个for 循环
{
     sum+=h[j]*x[31-j];   
}
out=sum;                     //x[31]的滤波结果作为输出。
HWM 发表于 2017-10-20 14:55 | 显示全部楼层
a3724395 发表于 2017-10-20 14:48
想了解信号处理这一块,听了李生红讲的《数字信号处理》,但按程序方面还是想不通。

按您的意思是可以输 ...

既然你已经听了《数字信号处理》,那么再去找本书看看,书中关于相关算法有详细论述。程序只是算法的某种实现而已。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

134

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部