卷積、相關與FFT


設有兩序列u和v,線性卷積就是把u沿y軸作鏡面投影得到u(-),然后使u(-)沿x軸正向移動,保持v不動,將兩序列重疊部分求和就得到響應的卷積,如下圖所示:

image

設size(u)=M,size(v)=N,則卷積共有M+N-1項。

循環卷積與線性卷積不同的是,u(-)和v沿圓周排列,圓周長度為L,u和v不足L的部分補0,u(-)沿順時針轉動,對重疊部分求和,顯然重疊部分是整個圓周,任何時刻都是L項求和。

如果M=N=L,則循環卷積就是圓周卷積。周期卷積就是線性卷積以M+N-1為周期的周期延拓。

如果循環卷積圓周長度L=M+N-1,則線性卷積可與之等價。

時域中的線性卷積與頻域中的直接相乘對應,但頻域中序列的長度應為M+N-1,如果頻域中長度小於M+N-1,經IFFT變換后,時域信號是原卷積信號的一段,且序列起始處有差異;循環卷積與之類似,但L的長度沒有要求,所以可以利用IFFT實現循環卷積。

xn=randn(1,10);
hn=[0,4,1,2,3];
y1n=conv(xn,hn); 
Na=length(xn);
Nb=length(hn);
N=Na+Nb-1;
x1=[xn,zeros(1,N-length(xn))];
x2=[hn,zeros(1,N-length(hn))];
n=[0:N-1]; 
for i=0:N-1 
n1=mod(-n+i,N);%change serial number
y2n(i+1)=x1*x2(n1+1)';
end
y3n=ifft(fft(x1).*fft(x2));
subplot(3,1,1);stem(y1n);
subplot(3,1,2);stem(y2n); 
subplot(3,1,3);stem(y3n);

image

相關函數的計算算:Rxy(m)=E{xn+myn*}=E{xnyn-m*}

非歸一化的計算公式為:

\( R_{xy(m)}=\sum\limits_{n=0}^{N-m-1}x_{n+m}y_n*\quad m\geqslant 0 \)

用卷積表示為:

Rxy(m)=x(n)*y(-n)(m)

與線性卷積類似,但相關運算中u不用翻轉,只是v在u上移動,求重疊部分的和。且相關運算有性質Rxy(m)=R*yx(-m),所以自相關函數是關於m=0對稱的。

相應的函數為xcorr,下面為x=randn(1,100),y=xcorr(x,’biased’)的示意圖:image

如上圖,2N-1項自相關函數Rx(n)左右對稱,所以其傅里葉變換為實數,值即為功率譜密度。

由於有偏的自相關估計為:

                     \[{R_X}(n) = \frac{1}{N}x\left( { - n} \right) * x\left( n \right)\]

由於

\[x(t) = \frac{1}{{2\pi }}\int {F(\omega ){e^{i\omega t}}d\omega }  = \frac{1}{{2\pi }}\int {F(\omega )[\cos (\omega t) + i\sin (\omega t)]d\omega } \]

所以\[x( - t) = x( - t)^* = \left( {\frac{1}{{2\pi }}\int {F(\omega )[\cos (\omega t) - i\sin (\omega t)]d\omega } } \right)^* = \frac{1}{{2\pi }}\int {F^*(\omega ){e^{i\omega t}}d\omega } \]

所以

               DFT(x(-t))=DFT*(x(t))

又根據卷積與DFT的關系可得:

\[{R_X}(n) = \frac{1}{N}IFFT\left\{ {{X^*}\left( k \right)X\left( k \right)} \right\} = IFFT\left( {\frac{{{{\left| {X\left( k \right)} \right|}^2}}}{N}} \right)\]

又由於功率譜密度為自相關函數的傅里葉變換,所以功率譜密度可以表達為:

\[{P_\omega } = \frac{{{{\left| {X\left( k \right)} \right|}^2}}}{N}\]

x=cos(2*pi*5/50*[0:199])+sin(2*pi*11/50*[0:199]);  
z=fft(x,2*200-1);  
Z=z.*conj(z)/200;  
cf=ifft(Z);  
cf1=[cf(201:end),cf(1:200)];  
cx=xcorr(x,'biased');  
plot(cf1)  
hold on  
plot(cx,'r')  
hold off


image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM