[問題] 低通的討論

作者: 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