關於MATLAB中conv()卷積結果的長度的探討

轉自:http://wenku.baidu.com/link?url=_XsCGpmz9URT55q82Ka0Amgu2svvG8VyuTq71BvzTQmNIzqj_5DIanp8NkI6duePNyuxltuTWcJcnFi1MWseTXxgJuysud0CawPHrjGCh77

關於MATLAB中conv()卷積結果的長度的探討 

1.  問題的提出 
衆所周知,已知信號長度爲M的時間序列{x(i), i=1,M}與長度爲N的近似理想脈衝響
應濾波器{h(i),i=1,N}的卷積長度爲M+N-1的序列{y(i),i=1,M+N-1}。實際上只有中間的M-N+1的長度是有效卷積的內容。而兩端各有N/2的長度,是部分{h(i)}和{x(i)}乘積求和的結
果,是兩個脈衝函數,這兩端的部分不是我們想要的。 
 在實際應用中,我們希望得到的{y(i)},不僅能夠在長度上與{x(i)}一致,而且在內容
上也全部是有效的。MATLAB中conv(x,h,flag)的函數flag有三個選項“full”,”same”和
“valid”。在默認情況下是“full”全部長度即M+N-1,完整的調用格式爲conv(x,h,’full’)。 
‘valid’選項的長度只M-N+1, 其內容就是’same’和‘full’的中間M-N+1的部分。而‘same’中
的前首尾兩端各N/2不是我們想要的,’full’首尾兩端各N的長度也不是我樣想要的。 
 
2.  解決方法 
(1) 週期延拓 
將原始的{x(i)}中尾部N/2長度的數據接在其前面,並且將原始{x(i)}中頭部的數據
接在其後面,即完成了週期延拓。再使用conv(x,h,’valid’)就可以得到與原始{x(i)}在長度上
相同,重要的是有效的卷積序列。 
(2)  多天數據首尾相接法 
如果{x(i)}是一天的長度,那麼可將前天的數據末尾N/2長度的數據接在當天{x(i)}的前
面,將下一天的數據的頭部N/2長度的數據接在當天{x(i)}的尾部。再進行conv(x,h,’valid’)
就可以得到與原始{x(i)}在長度上相同,重要的是有效的卷積序列。 
方法(1)與(2)的差別在於有效部分形開始的少量結果有一致,到中間有效部分的
長度就是完全一樣的了。
發佈了18 篇原創文章 · 獲贊 26 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章