Добавил:
koba004
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
close all;
hr10 = table2array(readtable("hr10.csv"));
Fd = 0.1;
T = 1/Fd;
N = 13;
signal = hr10(((N/10)*3600/T):length(hr10), 1);
t = duration (0,0,(N/10)*3600:10:length(hr10)*10,"Format","hh:mm:ss");
figure("Name","Simple Moving Average");
output_60 = sma(signal,60,T);
output_120 = sma(signal,120,T);
output_180 = sma(signal,180,T);
subplot(1,2,1);
plot(t,signal);
grid on;
hold on;
plot(t,output_60);
hold on;
plot(t,output_120);
hold on;
plot(t,output_180);
hold on;
legend("Original", "30 sec window", "100 sec window", "200 sec window");
title("Full Time Series");
subplot(1,2,2);
plot(t(1:200),signal(1:200));
grid on;
hold on;
plot(t(1:200),output_60(1:200));
hold on;
plot(t(1:200),output_120(1:200));
hold on;
plot(t(1:200),output_180(1:200));
hold on;
legend("Original", "30 sec window", "100 sec window", "200 sec window");
title("Magnified Time Series");
figure("Name","Weighted Moving Average");
output_60 = wma(signal,60,T);
output_120 = wma(signal,120,T);
output_180 = wma(signal,180,T);
subplot(1,2,1);
plot(t,signal);
grid on;
hold on;
plot(t,output_60);
hold on;
plot(t,output_120);
hold on;
plot(t,output_180);
hold on;
legend("Original", "30 sec window", "100 sec window", "200 sec window");
title("Full Time Series");
subplot(1,2,2);
plot(t(1:200),signal(1:200));
grid on;
hold on;
plot(t(1:200),output_60(1:200));
hold on;
plot(t(1:200),output_120(1:200));
hold on;
plot(t(1:200),output_180(1:200));
hold on;
legend("Original", "30 sec window", "100 sec window", "200 sec window");
title("Magnified Time Series");
figure("Name","Tests compare with windows size = 60 sec");
subplot(2,2,1);
output_sma_60 = sma(signal,60,T);
output_wma_60 = wma(signal,60,T);
output_sma_120 = sma(signal,120,T);
output_wma_120 = wma(signal,120,T);
output_sma_180 = sma(signal,180,T);
output_wma_180 = wma(signal,180,T);
plot(t, signal, "Color","#aaaaaa");
grid on;
hold on;
plot(t, output_sma_60);
grid on;
plot(t, output_wma_60);
legend("Original", "SMA", "WMA");
title("Full Time Series, windows = 60 sec");
subplot(2,2,2);
plot(t(1:200), signal(1:200), "Color","#aaaaaa");
grid on;
hold on;
plot(t(1:200), output_sma_60(1:200));
grid on;
plot(t(1:200), output_wma_60(1:200));
legend("Original", "SMA", "WMA");
title("Magnified Time Series, windows = 60 sec");
subplot(2,2,3);
plot(t(1:200), signal(1:200), "Color","#aaaaaa");
grid on;
hold on;
plot(t(1:200), output_sma_120(1:200));
grid on;
plot(t(1:200), output_wma_120(1:200));
legend("Original", "SMA", "WMA");
title("Magnified Time Series, windows = 120 sec");
subplot(2,2,4)
plot(t(1:200), signal(1:200), "Color","#aaaaaa");
grid on;
hold on;
plot(t(1:200), output_sma_180(1:200));
grid on;
plot(t(1:200), output_wma_180(1:200));
legend("Original", "SMA", "WMA");
title("Magnified Time Series, windows = 180 sec");
function [outputArray] = sma(inputArray,windowSize, T)
windowSize = windowSize/T;
bufer = zeros(windowSize, 1); %Буфер
outputArray = zeros(length(inputArray), 1);
if windowSize < 1
windowSize = 1;
end
if windowSize > length(inputArray)
windowSize = length(inputArray);
end
for i = 1:length(inputArray)
if i <= windowSize
bufer(1:i) = inputArray(1:i);
outputArray(i) = sum(bufer)/i;
else
bufer(1:windowSize) = inputArray(i-(windowSize-1):i);
outputArray(i) = sum(bufer)/windowSize;
end
end
end
function [outputArray] = wma(inputArray,windowSize, T)
windowSize = windowSize/T;
bufer = zeros(windowSize, 1); %Буфер
outputArray = zeros(length(inputArray), 1);
if windowSize < 1
windowSize = 1;
end
if windowSize > length(inputArray)
windowSize = length(inputArray);
end
for i = 1:length(inputArray)
tempSumm = 0;
if i <= windowSize
bufer(1:i) = inputArray(1:i);
for j = 1:i
w = j;
tempSumm = tempSumm + bufer(j)*w;
end
outputArray(i) = tempSumm/sum(1:i);
else
bufer(1:windowSize) = inputArray(i-(windowSize-1):i);
for j = 1:windowSize
w = (i-windowSize+j);
tempSumm = tempSumm + bufer(j)*w;
end
outputArray(i) = tempSumm/sum(i-(windowSize-1):i);
end
end
end
hr10 = table2array(readtable("hr10.csv"));
Fd = 0.1;
T = 1/Fd;
N = 13;
signal = hr10(((N/10)*3600/T):length(hr10), 1);
t = duration (0,0,(N/10)*3600:10:length(hr10)*10,"Format","hh:mm:ss");
figure("Name","Simple Moving Average");
output_60 = sma(signal,60,T);
output_120 = sma(signal,120,T);
output_180 = sma(signal,180,T);
subplot(1,2,1);
plot(t,signal);
grid on;
hold on;
plot(t,output_60);
hold on;
plot(t,output_120);
hold on;
plot(t,output_180);
hold on;
legend("Original", "30 sec window", "100 sec window", "200 sec window");
title("Full Time Series");
subplot(1,2,2);
plot(t(1:200),signal(1:200));
grid on;
hold on;
plot(t(1:200),output_60(1:200));
hold on;
plot(t(1:200),output_120(1:200));
hold on;
plot(t(1:200),output_180(1:200));
hold on;
legend("Original", "30 sec window", "100 sec window", "200 sec window");
title("Magnified Time Series");
figure("Name","Weighted Moving Average");
output_60 = wma(signal,60,T);
output_120 = wma(signal,120,T);
output_180 = wma(signal,180,T);
subplot(1,2,1);
plot(t,signal);
grid on;
hold on;
plot(t,output_60);
hold on;
plot(t,output_120);
hold on;
plot(t,output_180);
hold on;
legend("Original", "30 sec window", "100 sec window", "200 sec window");
title("Full Time Series");
subplot(1,2,2);
plot(t(1:200),signal(1:200));
grid on;
hold on;
plot(t(1:200),output_60(1:200));
hold on;
plot(t(1:200),output_120(1:200));
hold on;
plot(t(1:200),output_180(1:200));
hold on;
legend("Original", "30 sec window", "100 sec window", "200 sec window");
title("Magnified Time Series");
figure("Name","Tests compare with windows size = 60 sec");
subplot(2,2,1);
output_sma_60 = sma(signal,60,T);
output_wma_60 = wma(signal,60,T);
output_sma_120 = sma(signal,120,T);
output_wma_120 = wma(signal,120,T);
output_sma_180 = sma(signal,180,T);
output_wma_180 = wma(signal,180,T);
plot(t, signal, "Color","#aaaaaa");
grid on;
hold on;
plot(t, output_sma_60);
grid on;
plot(t, output_wma_60);
legend("Original", "SMA", "WMA");
title("Full Time Series, windows = 60 sec");
subplot(2,2,2);
plot(t(1:200), signal(1:200), "Color","#aaaaaa");
grid on;
hold on;
plot(t(1:200), output_sma_60(1:200));
grid on;
plot(t(1:200), output_wma_60(1:200));
legend("Original", "SMA", "WMA");
title("Magnified Time Series, windows = 60 sec");
subplot(2,2,3);
plot(t(1:200), signal(1:200), "Color","#aaaaaa");
grid on;
hold on;
plot(t(1:200), output_sma_120(1:200));
grid on;
plot(t(1:200), output_wma_120(1:200));
legend("Original", "SMA", "WMA");
title("Magnified Time Series, windows = 120 sec");
subplot(2,2,4)
plot(t(1:200), signal(1:200), "Color","#aaaaaa");
grid on;
hold on;
plot(t(1:200), output_sma_180(1:200));
grid on;
plot(t(1:200), output_wma_180(1:200));
legend("Original", "SMA", "WMA");
title("Magnified Time Series, windows = 180 sec");
function [outputArray] = sma(inputArray,windowSize, T)
windowSize = windowSize/T;
bufer = zeros(windowSize, 1); %Буфер
outputArray = zeros(length(inputArray), 1);
if windowSize < 1
windowSize = 1;
end
if windowSize > length(inputArray)
windowSize = length(inputArray);
end
for i = 1:length(inputArray)
if i <= windowSize
bufer(1:i) = inputArray(1:i);
outputArray(i) = sum(bufer)/i;
else
bufer(1:windowSize) = inputArray(i-(windowSize-1):i);
outputArray(i) = sum(bufer)/windowSize;
end
end
end
function [outputArray] = wma(inputArray,windowSize, T)
windowSize = windowSize/T;
bufer = zeros(windowSize, 1); %Буфер
outputArray = zeros(length(inputArray), 1);
if windowSize < 1
windowSize = 1;
end
if windowSize > length(inputArray)
windowSize = length(inputArray);
end
for i = 1:length(inputArray)
tempSumm = 0;
if i <= windowSize
bufer(1:i) = inputArray(1:i);
for j = 1:i
w = j;
tempSumm = tempSumm + bufer(j)*w;
end
outputArray(i) = tempSumm/sum(1:i);
else
bufer(1:windowSize) = inputArray(i-(windowSize-1):i);
for j = 1:windowSize
w = (i-windowSize+j);
tempSumm = tempSumm + bufer(j)*w;
end
outputArray(i) = tempSumm/sum(i-(windowSize-1):i);
end
end
end
