迴圈卷積 總結

2022-05-13 10:02:00 字數 775 閱讀 2689

一般的線性卷積:

$f[i]=\sum_^i a[j]*b[i-j]$

如果將$b$陣列迴圈複製得到$b_n$就能得到週期卷積:

$f[i]=\sum_^ a[j]*b_n[i-j]$

而一般比較常見的迴圈卷積其實就是週期卷積的主值序列($[0,n-1]$項):

$f[i]=\sum_^ a[j]*(b[i-j])_n$,其中下標$n$表示其主值序列限定在$[0,n-1]$

計算迴圈卷積時暴力是$n^2$,先求出兩序列的線性卷積再全累加到$[0,n-1]$上就是$nlogn$

迴圈卷積的常見運用:

1、對迴圈矩陣作乘法時

$[n*n矩陣]*[n行列向量]=[矩陣第一列]\bigoplus [n行列向量]$,其中$\bigoplus$表示迴圈卷積

如果將矩陣第一行迴圈複製,發現每次就相當於將列向量向上移動一格,是迴圈卷積的形式

之所以是矩陣第一列是因為想要矩陣第一行$[c_0,c_1,c_2,c_3]$與$[a_0,a_1,a_2,a_3]$的內積是卷積中第一項,

那麼就要將$c$轉為$[c_0,c_3,c_2,c_1]$(也就是第一列),這樣才能保證$f[0]=\sum_^ a[j]*(c[0-j])_n$成立!

2、計算下標相加取模的貢獻式時

對於$a[i]*b[j]->f[(i+j)modn]$這樣的貢獻式其實$f$就是$a$和$b$的迴圈卷積

如果用於$dp$並多次轉移時,可以使用快速冪優化,原理和矩陣快速冪相同

其實上面兩種運用是乙個意思,可以相互轉化,最後都使用迴圈卷積+快速冪解決

迴圈卷積與線性卷積

迴圈卷積 針對的是兩個長度都為n的序列,對兩個序列做fft,然後再做ifft得到的結果就是迴圈卷積,結果的長度也是n。直接計算步驟 序列a與序列b,長度都是n,新的序列c 1 把b倒過來。翻轉 2 把b向右平移乙個元素。最右側的元素補到左邊。3 計算此時a和b對應元素的積的和。將其加到c的末尾。4 ...

迴圈卷積優化

求 b x 滿足 a x b x equiv 1 pmod n 牛頓迭代得 b x equiv b t x left 2 a x b t x right pmod 樸素的實現需要做3次長度為 2 的fft,把多餘的部分捨去,常數較大。發現 b x 的前 2 t 項和 b t x 一樣,所以只需要求後...

迴圈卷積和線性卷積的關係

迴圈卷積和線性卷積的關係 一般訊號處理濾波器 時域資料 與 濾波器係數的線性卷積,但卷積的運算量比較大,所以用頻域的相乘來替代時域卷積,而頻域的相乘等於時域迴圈卷積,所以要有乙個迴圈卷積和線性卷積轉換的過程,如下matlab例子 x 3 2 1 2 5 y 7 1 8 5 1 n length x ...