dft(fft)的乙個應用,就是計算線性卷積。設h
(n) 和x(
n)長度分別為
n 和
m,對於
l 點迴圈卷積,若滿足
l>=n+
m−1,則有yc
(n)=
yl(n
) 。
對於兩個序列長度相差很大的情況,例如
m>>
n ,為了節省儲存空間並實現實時處理,則需要採取將長序列分段的方法。因為可以通過求迴圈卷積來得到線性卷積,所以以下先討論迴圈卷積的情況。
仍然對於上述的h(
n)和x(n
) ,當
m>>
n 時,計算每乙個yc
(n) 最多隻需要
n 次(較短序列的長度)計算,即從x(
n−n+
1)~x
(n) 之間的
n 個值。所以即便將x(
n)分解也可以得到卷積結果。現將x
(n) 分解為許多長度為k(
k≥n)
的短序列x0
(n),
x1(n
),x2
(n).
..。例如對於x2
(n),
0≤n≤
k−1
當n−1
≤n≤k
−1時,求得y2
(n) 所需的x(
n−n+
1) ~x
(n) 之間的
n 個值可完全由x2
(n)提供,但是當0≤
n≤n−
2 時則無法只由x2
(n) 提供全部所需的x(
n),為了解決這個問題便提出了重疊相加法和重疊保留法。
重疊相加法
根據 y(n
)=h(
n)∗x
(n)=
h(n)
∗∑m=
0∞xk
(n)=
∑m=0
∞h(n
)∗xk
(n)=
∑m=0
∞yk(
n)對y
k(n)
求和即可得到原本的y(
n),其本質就是對不完全的yk
(n) 進行補全,而原本就滿足n−
1≤n≤
k−1 的yk
(n) 則實際上不改變其值。
重疊保留法
此方法需x(
n)分段時每兩段之間需要重疊n−
1 個值(實際上大於該值都可以,但取n−
1 時最節省運算量),然後對所求的yk
(n) 去除前n−
1 個點。本質就是直接刪去0≤
n≤n−
2 的yk
(n) ,只保留n−
1≤n≤
k−1 的yk
(n) ,因此在對分段時需要對x(
n)重疊分段,保證對於每個n都有滿足n−
1≤n≤
k−1 的xk
(n) 。
綜上,對於兩種方法,都是為了解決相同的問題,即x(
n)分段後每段內前n−
1 個yk
(n) 不完全的問題。
DFT計算線性卷積 重疊保留法
設h n 和x n 都是有限長序列,長度分別為n和m。它們的線性卷積和迴圈卷積分別表示如下 yc n h n x n m 0n 1h m x n m yl n h n x n m 0l 1 h m x n m l rl n 其中 l m ax n m x n l i x n il 只有當迴圈卷積長度...
捋一捋DSP裡的重疊保留法
相比於十分 直接 的重疊相加法,重疊保留法顯得有點繞。那些字母加來減去的,各段和總輸出的表示式讓人眼花繚亂。花了些力氣捋了捋清楚,記錄於斯。看字母太抽象太煩可以滑到後面例子對照理解。設h n 序列長m x n 總長l,分成長為n1的若干段,每段再把前一段末尾的m 1個點複製到本段開頭 首段開頭補零 ...
判斷平面上矩形和圓形的重疊
參考 知乎高讚回答 怎樣判斷平面上乙個矩形和乙個圓形是否有重疊?第一步 將矩形的中心平移至座標軸圓心處,同時圓也要同步變換。第二步 將圓變換置第一象限 第三步 計算 u vec u u,u v h vec u vec v vec h u v h 注 v vec v v表示由變換之後的矩形中心指向變換...