цикл для корреляции и редактирования векторов - PullRequest
0 голосов
/ 15 октября 2018

Мне нужно отредактировать вектор в 2 переменных так, чтобы они соответствовали друг другу.

For example, 
y = 1 2 3 4 5 6
q = 8 26 1 5 1 6

Let's say I fix q and shift y by 1
y =    1 2 3 4 5 6
q = 8 26 1 5 1 6

I need vector y1 = 1 2 3 4 5 and q1 = 26 1 5 1 6
This means I need to kick out 6 in y and 8 in q respectively.

Let's say I fix q and shift y by 2
y =      1 2 3 4 5 6
q = 8 26 1 5 1 6
As before, now I need to remove 5,6 in y and 8,26 in q respectively.

Я хочу сделать это в цикле for, поскольку мой вектор очень длинный.Прямо сейчас я изо всех сил пытаюсь получить правильный вектор для q (который является моим soundtwo), как показано ниже.Любые советы?

% Creating time vector, "t"
t = linspace(0,16*pi,1000);

sound1 = 5*(cos(t) + 1*(rand(size(t))-0.5));
sound2 = 8*(cos(t) + 1.5*(rand(size(t))-0.5));

% Setting the time shift "dt"
dt = 1000;

% Creating a matrix to store product later on
list = zeros(dt,1);

% For loop for different shifts
for i=1:dt

      % Now edit sound1 such that sound1 shifts while sound2 remains unchanged
      %different time shift

      sound1 = 5*(cos(t+ i ) + 1*(rand(size(t))-0.5));
      sound2 = 8*(cos(t) + 1.5*(rand(size(t))-0.5));

      % Shifting sound1
      soundone = sound1(i:numel(sound1))

      % Sound 2 unchanged, but have to assign respective vector to sound1
      soundtwo = sound2()

      multipliedsound = (soundone) .* (soundtwo);

      add = sum(multipliedsound)

      product = add  / numel(t);

      % Append product to list vector
      list(i,1) = product;

end

1 Ответ

0 голосов
/ 15 октября 2018

Функция circshift будет вращать значения y, затем вы можете установить повернутые значения NaN.Установка повернутых значений y в значение NaN устраняет необходимость также изменять или удалять значения в q: значениями продукта с NaN также будет NaN, которые затем игнорируются суммой NaN.В приведенном ниже примере значения сдвигаются на 2, но вы можете легко заменить другие значения сдвига.

y = [1 2 3 4 5 6];
q = [8 26 1 5 1 6];

shift_value = 2;

y_shifted = circshift(y, shift_value);
y_shifted(1:shift_value) = NaN;

product_value = y_shifted .* q;
sum_value = nansum(product_value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...