Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Matlab: How to convert a matrix into a Toeplitz matrix

Considering a discrete dynamical system where x[0]=rand() denotes the initial condition of the system.

I have generated an m by n matrix by the following step -- generate m vectors with m different initial conditions each with dimension N (N indicates the number of samples or elements). This matrix is called R. Using R how do I create a Toeplitz matrix, T? T Mathematically,

 R =               [ x_0[0], ....,x_0[n-1];
                    ...,        ,.....;
                    x_m[0],.....,x_m[n-1]]

The toeplitz matrix T =

                        x[n-1], x[n-2],....,x[0];
                        x[0], x[n-1],....,x[1];
                          :    :           :
                         x[m-2],x[m-3]....,x[m-1]

I tried working with toeplitz(R) but the dimension changes. The dimension should no change, as seen mathematically.

like image 954
Sm1 Avatar asked Dec 22 '25 03:12

Sm1


1 Answers

According to the paper provided (Toeplitz structured chaotic sensing matrix for compressive sensing by Yu et al.) there are two Chaotic Sensing Matrices involved. Let's explore them separately.

  1. The Chaotic Sensing Matrix (Section A)

It is clearly stated that to create such matrix you have to build m independent signals (sequences) with m different initials conditions (in range ]0;1[) and then concatenate such signals per rows (that is, one signal = one row). Each of these signals must have length N. This actually is your matrix R, which is correctly evaluated as it is. Although I'd like to suggest a code improvement: instead of building a column and then transpose the matrix you can directly build such matrix per rows:

R=zeros(m,N);
R(:,1)=rand(m,1); %build the first column with m initial conditions

Please note: by running randn() you select values with Gaussian (Normal) distribution, such values might not be in range ]0;1[ as stated in the paper (right below equation 9). As instead by using rand() you take uniformly distributed values in such range.

After that, you can build every row separately according to the for-loop:

for i=1:m
    for j=2:N %skip first column
        R(i,j)=4*R(i,j-1)*(1-R(i,j-1));
        R(i,j)=R(i,j)-0.5;
    end
end
  1. The Toeplitz Chaotic Sensing Matrix (Section B)

It is clearly stated at the beginning of Section B that to build the Toeplitz matrix you should consider a single sequence x with a given, single, initial condition. So let's build such sequence:

x=rand();
for j=2:N %skip first element
   x(j)=4*x(j-1)*(1-x(j-1));  
   x(j)=x(j)-0.5;
end

Now, to build the matrix you can consider:

  • how do the first row looks like? Well, it looks like the sequence itself, but flipped (i.e. instead of going from 0 to n-1, it goes from n-1 to 0)
  • how do the first column looks like? It is the last item from x concatenated with the elements in range 0 to m-2

Let's then build the first row (r) and the first column (c):

r=fliplr(x);
c=[x(end) x(1:m-1)];

Please note: in Matlab the indices start from 1, not from 0 (so instead of going from 0 to m-2, we go from 1 to m-1). Also end means the last element from a given array.

Now by looking at the help for the toeplitz() function, it is clearly stated that you can build a non-squared Toeplitz matrix by specifying the first row and the first column. Therefore, finally, you can build such matrix as:

T=toeplitz(c,r);

Such matrix will indeed have dimensions m*N, as reported in the paper.

Even though the Authors call both of them \Phi, they actually are two separate matrices.
They do not take the Toeplitz of the Beta-Like Matrix (Toeplitz matrix is not a function or operator of some kind), neither do they transform the Beta-Like Matrix into a Toeplitz-matrix.
You have the Beta-Like Matrix (i.e. the Chaotic Sensing Matrix) at first, and then the Toeplitz-structured Chaotic Sensing Matrix: such structure is typical for Toeplitz matrices, that is a diagonal-constant structure (all elements along a diagonal have the same value).

like image 148
AlessioX Avatar answered Dec 24 '25 01:12

AlessioX



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!