根据Yu等人提供的文章(Toeplitz结构混沌感知矩阵用于压缩感知),涉及到两个混沌感知矩阵。让我们分别探讨它们。
1. 混沌感知矩阵(A节)
明确指出要创建这样的矩阵,您必须建立
m
个独立的信号(序列),每个序列都需要具有
N
的长度,并使用
m
个不同的初始条件 (在]0;1[范围内),然后将这些信号按行连接在一起(即,一个信号=一行)。这实际上就是您的矩阵
R
,其正确性得到了正确评估。虽然我想建议一种代码改进方法:直接按行构建此类矩阵,而不是构建列然后转置矩阵。
R=zeros(m,N);
R(:,1)=rand(m,1);
请注意:通过运行randn()函数,您会选择具有高斯(正态)分布的值,这些值可能不在论文中所述的范围] 0;1 [内(即在第9个方程式下面)。相反,使用rand()函数可以在该范围内获取均匀分布的值。
之后,您可以根据for循环单独构建每一行。
for i=1:m
for j=2:N
R(i,j)=4*R(i,j-1)*(1-R(i,j-1));
R(i,j)=R(i,j)-0.5;
end
end
- Toeplitz混沌感知矩阵(第B节)
在第B节的开头明确指出,要构建Toeplitz矩阵,您应该考虑一个具有给定单个初始条件的单个序列x
。因此,让我们构建这样的序列:
x=rand();
for j=2:N
x(j)=4*x(j-1)*(1-x(j-1));
x(j)=x(j)-0.5;
end
现在,要构建矩阵,您可以考虑以下几点:
- 第一行是什么样的?它看起来像序列本身,但是翻转了(即从n-1到0而不是从0到n-1)
- 第一列是什么样的?它是
x
的最后一个项目与范围0到m-2中的元素连接而成
让我们构建第一行(
r
)和第一列(
c
):
r=fliplr(x);
c=[x(end) x(1:m-1)];
请注意:在Matlab中,索引从1开始,而不是从0开始(因此,我们从1到m-1而不是从0到m-2)。另外,end表示给定数组的最后一个元素。
现在通过查看toeplitz()函数的帮助,可以清楚地说明您可以通过指定第一行和第一列来构建非平方Toeplitz矩阵。因此,最终,您可以构建这样的矩阵:
T=toeplitz(c,r);
这样的矩阵确实具有
m*N
的尺寸,正如论文中所述。
尽管作者都称其为\Phi,但它们实际上是两个不同的矩阵。
它们没有对类似Beta的矩阵进行Toeplitz变换(Toeplitz矩阵不是某种函数或运算符),也没有将其转化为Toeplitz矩阵。
首先是Beta-Like矩阵(即混沌感知矩阵),然后是Toeplitz-
structured混沌感知矩阵:这种
结构通常用于Toeplitz矩阵,即对角线恒定结构(沿对角线的所有元素具有相同的值)。
m
个不同的初始条件。 值x(1)
永远不会改变。 每个for循环迭代都将从完全相同的值开始。 - AlessioXR
基本上包含了所有长度为N
的m
个序列/信号。因此,在描述R
时,你正确地使用了索引n
(离散时间)和m
(序列索引)。但在T
中,你把事情搞混了。 - AlessioX