2015-02-26 3 views
0

У меня возникла проблема с реализацией этого кода из-за переменной s_k, являющейся логической 0/1. Каким образом я могу реализовать это утверждение?Matlab: помощь в реализации квантованных временных рядов

s_k представляет собой случайную последовательность 0/1 генерируется с использованием rand() и квантование выход rand() его средним приведены ниже. После этого я не знаю, как реализовать. Пожалуйста помоги.

N =1000; 
    input = randn(N); 

    s = (input>=0.5); %converting into logical 0/1; 

UPDATE

N = 3; 
tmax = 5; 
y(1) = 0.1; 
for i =1 : tmax+N-1 %// Change here 
     y(i+1) = 4*y(i)*(1-y(i)); %nonlinear model for generating the input to Autoregressive model 
    end 
s = (y>=0.5); 
ind = bsxfun(@plus, (0:tmax), (0:N-1).'); 
x = sum(s(ind+1).*(2.^(-ind+N+1))); % The output of this conversion should be real numbers 

% Autoregressive model of order 1 
z(1) =0; 
for j =2 : N 
    z(j) = 0.195 *z(j-1) + x(j); 
end 
+0

Ну, вы используете 'randn' not' rand', что, вероятно, не то, что вы намеревались. Тогда у вас есть 's_k', так что такое' k'? После того, как вы знаете 'k', вы должны уметь выработать' 2^(- (k-n + 1)) 'и т. Д. – David

+0

(Другой вопрос, в котором код был удален, откат другим пользователем в то время). – halfer

ответ

2

Вы сформировали случайную logical последовательность, которая является большим. Вам также необходимо знать N, который представляет собой общее количество точек для сбора за один раз, а также список значений времени t. Поскольку это дискретное суммирование, я собираюсь предположить, что значения t являются дискретными. Сначала вам нужно создать скользящую оконную матрицу. Каждый столбец этой матрицы представляет собой набор значений времени для каждого значения t для вывода. Этого можно легко достичь с помощью bsxfun. Предполагая, что максимальное время tmax, стартовое время от 0 и размера окрестности N (как в вашем уравнении), мы можем сделать:

ind = bsxfun(@plus, (0:tmax), (0:N-1).'); 

Например, если предположить tmax = 5 и N = 3, мы получаем:

ind = 

    0  1  2  3  4  5 
    1  2  3  4  5  6 
    2  3  4  5  6  7 

Каждый столбец представляет собой время, в течение которого мы хотим рассчитать вывод, и каждая строка в столбце отображает список значений времени, которые мы хотим рассчитать для желаемого вывода.

Наконец, чтобы вычислить выход x, вы просто берете свой s_k вектор, сделать это вектор-столбец, используйте ind для доступа к нему, сделать точку за точкой умножения с 2^(-k+N+1) путем замены k с тем, что мы получили от ind и суммировать вдоль строк. Таким образом:

s = rand(max(ind(:))+1, 1) >= 0.5; 
x = sum(s(ind+1).*(2.^(-ind+N+1))); 

Первое утверждение генерирует случайный вектор, который равен максимальному значению времени, которое у нас есть. После этого мы используем ind для индексации этого случайного вектора, чтобы мы могли сгенерировать скользящее окно значений logical. Нам нужно компенсировать это на 1, поскольку MATLAB начинает индексирование на 1.

+0

Благодарим вас за ответ. Ваш код работает для конкретного случая, когда я использую произвольный сигнал вместо использования rand(). Не могли бы вы взглянуть на вопрос, на который я применил ваш ответ для другого случая. В этом случае вместо использования rand() я использую нелинейную модель для генерации ввода, который затем квантуется. Ошибка: «индекс превышает размер матрицы». Спасибо за ваш быстрый ответ и усилие. – SKM

+0

Где эта нелинейная модель, о которой вы говорите? Пожалуйста, обновите свой вопрос. – rayryeng

+0

Я добавил и обновил вопрос. Пожалуйста, смотрите. – SKM

Смежные вопросы