z и y1 идентичны в вашем примере кода.Таким образом, синяя линия и черная линия идентичны.Поэтому синяя линия скрыта под черной, поскольку черная была создана последней.С исправлением Tobold для NaN, выводящего некоторые значения z, я подозреваю, что вы видите синюю / черную / синюю линию.
Как уже упоминалось, ваш цикл for ничего не делает.Однако, если вы пытаетесь выполнить простой усредняющий фильтр по z, попробуйте следующее. Функция фильтра Matlab
windowSize = 21;
z = filter(ones(1,windowSize)/windowSize,1,y1);
Я предпочитаю функцию Matlab filterfilt (), поскольку это прямой и обратный фильтры, но для них требуется набор инструментов обработки сигналов.в качестве примечания, поскольку это неинициализированный фильтр, первые значения windowsize-1 будут перекошены.Существуют способы инициализации вашего фильтра, но это выходит за рамки вашего вопроса.
Ваш цикл for по-прежнему ничего не делает.Вам нужно индексировать в y1 с вашим i / j.Я думаю, что вы пытаетесь сделать центрированное среднее, где точка в z равна среднему значению в y1 +/- 10 выборок.Вот некоторый код, который сделает это.
% Define half window. True window size is 2*halfWindow+1
halfWindow = 10;
% Init z to zeros.
% There will be halfWindow worth of zeros at the beginning and end of z after the loop.
z = zeros(size(y1));
%Loop starting at 11 (if halfWindow = 10) and ending 10 from the end.
for i = (1+halfWindow):(length(y1)-halfWindow)
z(i) = mean(y1(i-halfWindow:i+halfWindow)); %Take mean of current point +/- 10 samples
end
Я бы, вероятно, все равно использовал бы функцию фильтра вместо приведенного выше кода и узнал, как инициализировать указанный фильтр.Но по крайней мере это должно показать вам, как индексировать массивы.