matlab驗證線性卷積與圓周卷積的關係
阿新 • • 發佈:2018-12-31
數字訊號處理實驗
一.線性卷積和圓周卷積的關係
1.線性卷積
設X1為N1點的有限長序列,X2為N2點的有限長序列(0 < n < N2)
則兩序列的線性卷積為:
線性卷積y1(n)的長度為N2+N2-1
2.圓周卷積
設有限長序列x(n)和h(n)的長度分別為N1和N2,取N>=max(N1,N2),分別對x(n)和h(n)取N點的DFT,將結果取
N點的IDFT得到y(n)
3.圓周卷積與線性卷積之間的關係
當有限長序列x(n)和h(n)的長度分別為N1和N2,取N>=max(N1,N2),當N>=N1+N2-1,則線性卷積與圓周卷積相同。
二.使用Matlab驗證其關係
1.子函式編寫
- cirshiftd.m
`
function yc=circonv(x1,x2,N) %功能 : 計算圓周卷積 %輸入 : 需計算圓周卷積的序列x1,x2和圓周卷積的點數N %輸出 : 圓周卷積結果 %判斷兩個序列的長度是否小於N if length(x1) > N error('N must not be less than length of x1'); end if length(x2) > N error('N must not be less than length of x2'); end x1 = [x1,zeros(1,N - length(x1))]; %填充序列x1使其長度為N1+N2-1 x2 = [x2,zeros(1,N - length(x2))]; %填充序列x2使其長度為N1+N2-1 n =0:1:N-1; x2 = x2(mod(-n,N)+1); %生成序列x2((-n))N H = zeros(N,N); %生成N * N 的零矩陣 for n = 1:1:N H(n,:) = cirshiftd(x2,n-1,N); %該矩陣的k行為 x2(k-1-(n mod N)) end yc = x1 * H'; %計算迴圈卷積 `
- cirshiftd.m
`
function y = cirshiftd(x,m,N)
%對於序列x直接實現圓周移位
%x:輸入序列長度小於N
%m:移位量
%N:圓長
%y:移位後的序列
if length(x) > N
error('the length of x must be less than N');
end
x = [x,zeros(1,N-length(x))];
n = 0:1:N-1;
y = x(mod(n-m,N)+1);
`
- 主函式relation.m
‘
clear all; n = 0:1:12; m = 0:1:5; N1 = length(n); N2 = length(m); xn = 0.8.^n; %生成xn hn = ones(1,N2); %生成hn yln = conv(xn,hn); %計算線性卷積 ycn = circonv(xn,hn,15); %計算圓周卷積 nyl = 0:1:length(yln)-1; ny2 = 0:1:length(ycn)-1; %圖形顯示時分割視窗命令,把一個視窗分成m行,n列,並指定第i個敞口為當前視窗 subplot(2,1,1); stem(nyl,yln); %繪製散點圖 ylabel('線性卷積'); %Y軸標籤 axis([0,25,0,4]); subplot(2,1,2); stem(ny2,ycn); ylabel('圓周卷積'); %x範圍為0-16 y範圍為0-4 axis([0,25,0,4]);
‘
三.實驗結果
驗證程式中,固定DFT點數為15
ycn = circonv(xn,hn,15); %計算圓周卷積
改變序列xn的長度
當 n = 0:1:12 時 此時N < N1 + N2 -1 線性卷積與圓周卷積不相等。結果如下圖所示。
當 n = 0:1:5 時,此時N > N1 + N2 -1 線性卷積與圓周卷積相等。結果如下圖所示。
臨界條件 N = N1+N2-1時線性卷積與圓周卷積相等,結果如下
四.實驗結論
通過上述結果,可以得出結論:
當DFT點數N滿足 N>=N1+N2-1時,圓周卷積與線性卷積相等