matlab中遇到问题,sinc(ts(:,ones(size(t))) 不理解,ts括号里面怎么解释。

供稿:hz-xin.com     日期:2025-01-14

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++编写的,突出了面向对象的优势,封装,重载,多态,使得编程时只需要考虑抽象的数学,而不需要考虑计算实现细节。