function yn=conv_d(xn,hk)
%计算序列xn和序列hk的长度
k = length(hk);
n = length(xn);
%计算输出序列yn的长度
N = k+n-1 ;
yn = zeros(1,N);
%在xn两端分别填充k_1个0,生成序列xn_fill
xn_fill = {zeros(1,k-1),xn,zeros(1,k-1)};
%对序列hk进行翻转
hk_temp = hk ;
for i=1:k
hk(i) = hk_temp(k-i+1);
end
%卷积过程(*表示数据,0为填充)
% 000******000 ——> 000******000
% **** 右移 ——> ****
for i=1:N %序列右移的次数
sum = 0 ;
for j=1:k
sum = hk(j)*xn_fill(j+i-1) + sum;
end
yn(i) = sum ;
end
那么,来总结一下matlab中这几个符号的用法吧:
(以下内容转自http://blog.sina.com.cn/s/blog_56d5b3b001010ab4.html)
[]中括号用来构建向量(Vectors)或者是矩阵(Matrices)。如[6.9 9.64sqrt(-1)] 就是一个有三个元素的向量。[11 12 13; 21 22 23] 是一个二乘三的矩阵。分号(;)用来结束一行。中括号的另一个作用是在函数中,分配输出参数。
{}大括号,用于cell型的数组的分配或引用。比如A(2,1) = {[1 2 3; 4 5 6]}, or A{2,2} = ('str')。
()小括号,用于引用数组的元素。如 X(3)就是X的第三个元素。 X([12 3])就是X的头三个元素。
Expmple:
A = [ 1 2 3 ]
%A就是一个三个元素的数值数组。中括号用于构建非cell数组。
%数组的引用用小括号
A(1,2)
%A(1,2)得到A数组第一行第二列的元素。
B = {A A}
%B为1一行两列的数组,数组的元素为cell
%数组的引用依然用小括号
B(1)
%这时B(1)为一个cell,cell内容的引用需要用大括号。
%B{1}则为cell 1的内容,此时为 1 23,cell内容为数值数组的,继续用小括号引用其内容
B{1}(1,3)
%B{1}(1,3)的内容为3.
D={B B}
D ={1x2 cell} {1x2 cell}
此时D的某个元素内容的引用则为
D{1}{1,2}(1)
cell层都需要用大括号引用。