Время переключения сигнала - PullRequest
0 голосов
/ 06 мая 2018

С учетом сигнала x = t.*(2*t + 4)

В случае, если я хочу сдвинуть время по сигналу, скажем, 2 значения времени вправо, возможно ли сделать что-то вроде

x = x(t-2)

Чтобы сдвинуть все значения? Я наткнулся на circshift, но я не нашел никакого смысла для своего дела

РЕДАКТИРОВАТЬ: Я ищу решение, где оно будет работать для каждого сигнала, например, если я отразить х (или сделать что-нибудь на нем) и сохранить его на Y, как я должен рассчитывать время сдвиг Y?

1 Ответ

0 голосов
/ 06 мая 2018

Вы можете определить сигнал как функцию, чтобы затем можно было сдвигать его по своему желанию.

Например,

x = @(t) t.*(2*t + 4); % A function x(t)
y = @(t) x(-t); % A reflected version of the function
z = @(t,a) x(t-a); % A delayed version of the function 

t = -5:0.01:5; % Sampling instants

X = x(t); % A vector of samples of the original signal
Y = x(t-2); % A vector of samples of the delayed signal

Обратите внимание, что если вы хотите определить операторы, которые могут отражать и сдвигать любую функцию, вы можете, например, написать

Rop = @(s,t) s(-t);
Sop = @(s,a,t) s(t-a);

И вы можете использовать их на сигнале x как

Rop(x,[-2 -1 0 1 2]) % Calculates x([2 1 0 -1 -2])
Sop(x,5,[1 2 3 4 5]) % Calculates x([-4 -3 -2 -1 0])

Если вы хотите совместить сдвиг и отражение, вы можете сделать это так:

Rop(@(t) Sop(x,2,t),[1 2 3 4 5]) % First shifts x by 2, then reflects
Sop(@(t) Rop(x,t),2,[1 2 3 4 5]) % First reflects x, and then shifts by 2

Если вы запустите приведенный выше код, вы увидите, что отражение и сдвиг не являются коммутативными, поскольку результирующие векторы отличаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...