sinc參考例程中(貌似新版本的文檔裏刪掉了這個程序)
說,用sinc函數與采樣做卷積來重建信號。
代碼如下:
t=(1:10)';
randn('state',0);
x=randn(size(t));
ts=linspace(-5,15,600)';
a=ts(:,ones(size(t)));
b=t(:,ones(size(ts)));
y=sinc(ts(:,ones(size(t)))-t(:,ones(size(ts)))')*x;
plot(t,x,'o',ts,y);
y=sinc(ts(:,ones(size(t)))-t(:,ones(size(ts)))')*x;這句話本質上是在做卷積。
至於為什麽是卷積,妳明白那兩個矩陣是什麽後,根據矩陣乘法,展開就是卷積定義。
分開來看他的矩陣是如何操作的。
a=ts(:,ones(size(t)))設置中間變量保存到工作區就可以看到,列向量ts被擴展成了由size(t)個列向量組成的矩陣,每列與ts相同。
至於為什麽是這樣,我研究了好久,下面結論涉及到面向對象知識,看不懂就算了。
a=ts(:,[1 1]);相當於ones(2)。這樣就是兩列了。
那a=ts(:,[1 2]);呢?位置 2 的索引超出數組範圍(不能超過 1)。
說明數組[1 2]是引索。引索誰呢?引索匿名對象
運算符:作為矩陣類的成員函數返回的壹個矩陣(向量也是矩陣)作為匿名對象。
運算符()作為矩陣類的成員函數,調用他的矩陣應該是匿名對象而不是ts,返回的矩陣是匿名對象矩陣引索[1 1]後的矩陣。
所以ts(:,[1 2])整個函數調用是Matrix_index(Matrix_index(ts,1:size(index)),[1 2])
Matrix_index是我YY的矩陣引索函數,相當於運算符(),第壹個參數是要引索的矩陣,第二個參數是引索矩陣,返回引索後的矩陣。可以看出Matrix_index實際上是返回分割後的矩陣。若引索是壹個數,就可以降低壹個維度。這樣不管多少階張量,都能夠通過Matrix_index引索。
matlab作為超高級語言,是用C++編寫的,突出了面向對象的優勢,封裝,重載,多態,使得編程時只需要考慮抽象的數學,而不需要考慮計算實現細節。