Effacer les filtres
Effacer les filtres

Using delay seq to shift data with different delay conditions

3 vues (au cours des 30 derniers jours)
Zuha Yousuf
Zuha Yousuf le 19 Mar 2020
Commenté : Zuha Yousuf le 20 Mar 2020
Hi! I have a matrix that has 10 columns and 50 rows. I want to introduce a delay in columns 2,3 and 4, and then again in columns 7,8,9 and 10. In column 2, I want a delay by one sample, in column 3 I want a delay by 2 samples, in column 4 I want a delay of 3 samples, and similarly in columns 7,8,9 and 10 I want delays of 4,5,6 and 7 samples. Is there a way I could use delayseq to automate this process? Thanks in advance!
  4 commentaires
Sriram Tadavarty
Sriram Tadavarty le 19 Mar 2020
So, to see if i understand correctly, you want the output to be [2 0 0;5 3 0;8 6 4;0 9 7;0 0 10], for the input matrix you placed. Am i right?
Zuha Yousuf
Zuha Yousuf le 19 Mar 2020
Yes exactly!

Connectez-vous pour commenter.

Réponse acceptée

Sriram Tadavarty
Sriram Tadavarty le 19 Mar 2020
Hi Zuha,
Here is the code for what is looked for:
a = rand(50,10);
shift = [0 1 2 3 0 0 1 2 3 4]; % Use the shift required for eah column
a1 = zeros(54,10);
a1(1:50,shift==0) = a(:,shift==0);
a1(2:51,shift==1) = a(:,shift==1);
a1(3:52,shift==2) = a(:,shift==2);
a1(4:53,shift==3) = a(:,shift==3);
a1(5:54,shift==4) = a(:,shift==4);
% Or this can be done through loop
a2 = zeros(size(a,1)+max(shift),size(a,2));
for i = 1:size(a,2)
a2(shift(i)+1:size(a,1)+shift(i),i) = a(:,i);
end
Hope this helps.
Regards,
Sriram
  3 commentaires
Sriram Tadavarty
Sriram Tadavarty le 20 Mar 2020
Modifié(e) : Sriram Tadavarty le 20 Mar 2020
Hi Zuha, In the shift variable provide the shift as non-zero for the sixth column and that would solve. The update to shift vector in the answer will help. Let me know if the sixth value changed from 0 to the value you want and you get the expected answer. And then, seeing the image below you don't want the number of rows to be changed, so after the loop, or after those calculations, update a1 = a1(1:50,1:10); and a2 = a(1:size(a,1),1:size(a,2)); Hope this helps.
Zuha Yousuf
Zuha Yousuf le 20 Mar 2020
Thanks so much! That helped.

Connectez-vous pour commenter.

Plus de réponses (1)

Zuha Yousuf
Zuha Yousuf le 19 Mar 2020
Basically, something like this. The first column after the one not being delayed should always have one 0, the next always have two 0s and so on. I've attached a picture for clarity.

Catégories

En savoir plus sur Operating on Diagonal Matrices dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by