发布网友 发布时间:2022-04-25 05:28
共2个回答
热心网友 时间:2023-10-30 04:07
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++编写的,突出了面向对象的优势,封装,重载,多态,使得编程时只需要考虑抽象的数学,而不需要考虑计算实现细节。
热心网友 时间:2023-10-30 04:08
size(t)是t的大小,那么ones(size(t))就是建立一个元素都是1的向量,大小与t一样,因为matlab里面的矩阵除了用像ts(1,2)呀这样的表示,还可以直接用一维的表示像ts(5)等等,ts(:,ones(size(t)))就是取ts里相应的列向量,也就是都是第一类,值得一提的是,举个例子,