看板 NTUEE-Lab530 關於我們 聯絡資訊
這次作業中的解釋程式碼 裡面有關convolution取值的部份 其中x4(:,a1)=conv(x2(:,a1),x3) 來討論一下為什麼x3的時間軸t3=min(f)-max(t)+[0:M+N-2]*dt 矩陣x4的高(頻率軸)為什麼一開始是M+N*2-2 後面又要取其中的N:N+M-1呢? 先列出離散convolution的式子: y[m] = Σ x[n].h[m-n] n 我們知道輸入x的範圍為n:n1~n2,大小為N=n2-n1+1 以及希望輸出y的範圍為m:m1~m2,大小為M=m2-m1+1 現在我們想知道系統h的範圍要取哪裡 因為h的index為m-n,所以h的index範圍: 最小值為y的min(m)-max(n),也就是m-n≧m1-n2 最大值為y的max(m)-min(n),也就是m-n≦m2-n1 可知h的大小為(m2-n1)-(m1-n2)+1=(m2-m1+1)+(n2-n1+1)-1=M+N-1 又,兩個陣列convolution,結果為兩個陣列的大小的和-1 所以x與h做convolution的結果,其大小為N+(M+N-1)-1=M+N*2-2 可是我們需要的輸出y的大小只有M 也就是說,convolution結果比需要的輸出y多了N*2-2點 而y只是convolution結果的M+N*2-2點中的其中M點 所以我們現在要求convolution結果的min(m)、max(m) 與需要的輸出y的範圍m1、m2的關係 由之前得到的不等式 m-n≧m1-n2 → m≧m1-n2+n 可知min(m)=m1-n2+n1=m1-(N-1) → m1=min(m)+(N-1) 同理,由m-n≦m2-n1 → m≦m2-n1+n 可知max(m)=m2-n1+n2=m2+(N-1) → m2=max(m)-(N-1) 圖解: N-1點 y的M點 N-1點 ├────┼──────┼────┤ min(m) m1 m2 max(m) 現在回頭來看作業的程式碼 x4(:,a1)=conv(x2(:,a1),x3) 對x2取第a1行與x3作convolution,其結果放在x4的第a1行 在這邊x2的第a1行就是輸入的時域訊號,大小為N=length(t) 而我們希望輸出的頻域訊號,其大小為M=length(f) 所以系統x3的大小要設為min(f)-max(t)+[0:M+N-2]*dt 也就是前面說到的h的大小為M+N-1點,其最小值m1-n2 又convolution結果會有M+N*2-2點 所以矩陣x4的高要設為M+N*2-2 做完convolution後再取中間的M點,捨棄兩旁的N-1點 也就是取第N點到第N+M-1點 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.230.227.152
cawaiimi:不知道要說什麼好 就是推呀~~~ 10/29 21:57
Johnnystar:推~~感謝啊 10/31 20:16