matlab重叠相加法求卷积,通过重叠相加法实现卷积的报告.doc
數字信號處理
課程設計
題目:通過重疊相加法實現卷積
院系:自動化與信息工程學院
專業:通信工程
班級: 通信091
學號: 3090432028
姓名: 雷帛川
指導教師: 李建勛
職稱: 副教授
2012年7月1日2012年7月14日
用結構化設計方法。一個程序劃分成若干模塊,每一個模塊的函數功能要劃分好,總體設計應畫出流程圖;
輸入輸出界面要友好;
源程序書寫要規范,加必要的注釋;
要提供通過Matlab函數進行檢驗的結果;
程序一定要要能運行起來。
原理
經常遇到兩個序列的長度相差很大的情況,解決這個問題的方法就是將長序列分段計算,運用分段處理方法中的重疊相加法計算兩個序列的卷積運算。
設一個給定序列是長度為n1的A,另一個導入序列是長度為n2的B,其中B序列是相對A序列比較長的,所以可以把B分為和A一樣長的若干段段,即B分后每一小段長度為n1。根據公式:
可知將B序列的每一小段與A序列做現行卷積,然后將所有的n2/n1段的線性卷積結果相加起來就是整個B序列和A序列的線性卷積結果,而又在本設計中,B序列的一小段和A序列的線性卷積又可由循環卷積來實現,只要讓循環卷積的點數,循環卷積的結果就和線性卷積的結果等價,在本實驗中取,故A序列和B序列的線性卷積可認為是由A序列和B的每一小段做點的循環卷積的最終累加和,
另外還有兩個個問題需要考慮,首先是做循環卷積時要對A序列和B序列的那一小段補零做卷積后,最終做累加的時候要考慮重疊的片段,必須將重疊的兩段加起來。不重疊的片段直接賦值。其次是如果B序列長度n2不是A序列長度n1的整數倍時,必須將B序列余下的那幾個數補零后和A序列做點循環卷積再加到最終的結果的相應位置。
下列是計算循環卷積的過程:
在本次課設題中序列A和B序列的某一小段做循環卷積,由于已知A序列的長度為n1,故可取B序列的每一小段都和A序列相等長度,并且取循環卷積的點數為,這就保證每一組的循環卷積都等效于線性卷積。做循環卷積可運用循環卷積矩陣做,其第一步是將A序列和B序列的某一小段補零到長度為,然后把A序列通過變換生成的循環卷積矩陣,將補零后的B的某一小段轉置,然后用循環卷積矩陣乘以它就可以得到循環卷積的結果,在此也即線性卷積。
重疊相加法的圖示如下:
設計過程
1.循環卷積子函數流程圖
2.主函數流程圖
3.循環卷積子函數源程序:
function y=Convmy4(A,B,L) %創建循環卷積函數
if L
error('出錯');
end
if L>length(A) %如果A序列長度小于L則補零到L
A=[A,zeros(1,L-length(A))];
end
if L>length(B) %給B序列補零到L
B=[B,zeros(1,L-length(B))];
B=B'; %B轉置
end
E=A(1,1);
C=A(1,[2:L]); %寫循環矩陣的第一行
D=fliplr(C);
A=[E,D];
y(1)=A(1,1).*B(1,1);
for h=2:1:L
y(1)=y(1)+A(1,h).*B(h,1); % %計算循環卷積序列的第一個值
end
for k=2:1:L
t=A(1,L);
for i=L:-1:2
A(1,i)=A(1,i-1); %得到矩陣的第二到L行并計算循環卷積的
end %另外幾個值
A(1,1)=t;
y(k)=0;
for m=1:1:L
y(k)=y(k)+A(1,m).*B(m,1);
end
end
4.主
總結
以上是生活随笔為你收集整理的matlab重叠相加法求卷积,通过重叠相加法实现卷积的报告.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据挖掘算法_技术分享|大数据挖掘算法之
- 下一篇: python 绘图的背景颜色不要_mat