[问题] 低通的讨论

楼主: HuangJC (吹笛牧童)   2019-10-29 19:49:51
https://www.itread01.com/content/1543753506.html
先只谈低通的部份
这网址的内容被许多网站拷贝
有相对应的电路图
有波特图
波特图大概是可以用 matlab 去跑吧..
证明它的算式没有错
然后它还有程式
但天杀的它不能为我所用
看到它有 1.3 用C语言实现
超棒的啊,程式都给了
可是为什么它有一行
*Vo_p = *Vo;
看程式上面的注解
@param Vo : Vo(k)
@param Vo_p : Vo(k-1)
我也是做了些功课才知道这是输出阵列的顺序的意思
比如我们还是用 s 阵列来讲好了
当我输出到第 10 个结果
那 k 就是 10
所以 Vo 是 s[10], Vo_p 是 s[9]
我为什么说这程式不可能正确呢?
这个数位滤波器是个副程式,必需有叫用它的主程式
主程式也附在下面,真佛心的
int main(void)
这个就是主程式
while(1)
这表示是个循环
这程式会跑个不停,不会停止
这就是我说主程式不可能正确的原因
而且如果我们以 s[x] 当输入阵列
它应该从头跑到尾
就说 0..999 一千个好了
应该要带入这个注标
程式中也完全没有看到
换言之,这是个超级抽象的程式;不能跑
我可以稍微落实一下程式,它应该是这样
for(int x = 0; x < 1000; x++) {
处理 s(x);
}
我这个也还是不完整,也是抽象
但我这好多了
凭著一些猜测,这个低通我算是完成了
我可以附上我的主程式
for(int i = 1; i < FFT_N; i++) {
LowPassFilter_RC_1order(&s1[i], &s1[i], &s1[i-1], 1024);
}
这次我不再用 s 阵列了,我用 s1
因为 s 阵列是复数,留给傅立叶分析用
我想检查这段程式能不能有效做出低通
所以做完这个就去做一下傅立叶分析咩
这里,FFT_N 如果加大到五万,这一小段程式就可以处理五万笔的数位滤波了
不过呢,前面说过,我无法做五万笔的傅立叶分析
所以我还是自己塞了个波形进去,只有 512 点
先滤波,再做傅立叶,看看结果:喔~ 有低通了,搞定
讨论细节的话
for(int i = 1; i < FFT_N; i++)
为什么 i 从 1 开始?
因为有引用到前一个 , s1[i-1]
当 i 是 0 时,则 i-1 为 -1,这式子会引起当机
不过我看正式的数位滤波器讲解都是 i 从 0 开始
没做过的东西就补 0
这真要计较的话得改改

Links booklink

Contact Us: admin [ a t ] ucptt.com