Magicode logo
Magicode
5 min read

[MATLAB]演習(MA)

https://cdn.apollon.ai/media/notebox/d105b686-d86d-43b4-819d-1ce69bdcbfd2.jpeg

演習

1. MAの次数が高いほど・信号の周波数が高いほど,信号成分が減衰してしまうことを確認せよ.

2. 偶数次数のMA処理は「位相をずらす」ことを次の例で確認せよ.

例:適当な正弦波にP=10と11のMAを施した結果をMA処理前の正弦波に重ね書きして確認せよ.

3. 次数の異なるMAを2回施すとき,順番により結果が変わるか否かを次の例で確認せよ.

例:正弦波にノイズを重畳させたデータをxとし, これに7点MAをかけたものをy07,y07に3点MAをかけたものをy0703とする. 次にxに3点MAをかけたものをy03, y03に7点MAをかけたものをy0307とする. y0703とy0307を重ね書きして比較.

ソースコード

上記の課題3つを一つのソースコードにまとめて実装した。
t = 0:0.02:5;       %データの作成 
x = 2*sin(2*pi*1*t);
noise = randn(1, length(t));
x1 = x + noise;

y3 = x*0;               %これより3点MA
for k=2: length(x)-1
y3(k) = (x(k-1) + x(k) + x(k+1))/3;
end
y3(1) = (x(1)+x(2))/2;
y3(end) = (x(end-1) + x(end))/2;

y5 = x*0;                %これより5点MA
for k=3: length(x)-2
y5(k) = (x(k-2)+x(k-1)+x(k)+x(k+1)+x(k+2))/5;
end
y5(1) = (x(1) + x(2) + x(3))/3;
y5(2) = (x(1) + x(2) + x(3) + x(4))/4;
y5(end-1) = (x(end-3) + x(end-2) + x(end-1) + x(end))/4;
y5(end) = (x(end-2) + x(end-1) + x(end))/3;

y11 = x*0;              %これより11点MA 
N = length(x);
for k=6: N-5
y11(k) = mean(x(k-5:k+5));
end
y11(1) = mean(x(1:6));
y11(2) = mean(x(1:7));
y11(3) = mean(x(1:8));
y11(4) = mean(x(1:9));
y11(5) = mean(x(1:10));
y11(N-4) = mean(x(N-5:N));
y11(N-3) = mean(x(N-4:N));
y11(N-2) = mean(x(N-3:N));
y11(N-1) = mean(x(N-2:N));
y11(N) = mean(x(N-1:N));


y10 = movmean(x,10);              %これより10点MA 

y07 = movmean(x1,7);              %3つ目の課題
y0703 = movmean(y07,3);

y03 = movmean(x1,3);
y0307 = movmean(y03,7);


figure (1)%グラフの描画
plot(t, x, 'bo-', t, y3, 'r', t, y5, 'g', t, y11, 'y');
legend('x(k): signal', 'y3(k): after 3MA', 'y5(k): after 5MA', 'y11(k): after 11MA')
title('3点5点11点MA');     % タイトルを記入

figure (2)
plot(t, x, 'bo-', t, y3, 'r', t, y5, 'g', t, y11, 'y');
legend('x(k): signal', 'y3(k): after 3MA', 'y5(k): after 5MA', 'y11(k): after 11MA')
title('3点5点11点MA');  

xlim([-0.147 0.859])
ylim([1.249 2.196])

figure (3)
plot(t,x, 'b', t, y10, 'r', t, y11, 'g')
legend('x(k): signal', 'y10(k): after 10MA', 'y11(k): after 11MA')
title('10点11点MA'); 

xlim("auto")
ylim("auto")

figure (4)
plot(t,x1, 'b', t, y0307, 'r', t, y0703, 'g')
legend('x1(k): signal+noise', 'y0307(k): after 3MA7MA', 'y0703(k): after 7MA3MA')

figure (4)
plot(t,x1, 'b', t, y0307, 'r', t, y0703, 'g')
legend('x1(k): signal+noise', 'y0307(k): after 3MA7MA', 'y0703(k): after 7MA3MA')
title('')

xlim([0.364 1.188])
ylim([-2.34 -0.17])

実行結果

Screenshot from 2022-05-13 02-21-30 Screenshot from 2022-05-13 02-21-40 Screenshot from 2022-05-13 02-22-05 Screenshot from 2022-05-13 02-22-15 Screenshot from 2022-05-13 02-22-35

説明

  1. 次数が大きくなると、移動平均の導出に使われるデータが増え、広範囲で処理されるため、信号がなめらかになる分ノイズ以外の成分も減衰してしまう。
  2. 実行結果のグラフより、次数が偶数の際の移動平均は位相がずれていることがわかる。
  3. 実行結果のグラフより、次数が異なる移動平均処理を2回行う場合、実行する順番は結果に影響しないことがわかる。

Discussion

コメントにはログインが必要です。