作者HuangJC (吹笛牧童)
看板RIPE_gender
标题[问题] 低通的讨论
时间Tue Oct 29 19:49:51 2019
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
这真要计较的话得改改
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.83.189.192 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/RIPE_gender/M.1572349795.A.378.html
※ 编辑: HuangJC (123.204.139.199 台湾), 11/02/2019 16:18:49