MATLABで学ぶ信号処理 平均化によるノイズの低減(時刻歴編)


スポンサーリンク

はじめに

「平均化するとノイズの影響を低減できる」って良く聞きますよね?
ただ、実測データを扱わない人(実験をしない人)はあまり理解できませんよね。
なぜかというと、そもそも扱うデータに誤差が混入していないからです。

本記事では、平均化によるノイズの低減(誤差の低減)について説明したいと思います。
今回は”平均化”についての1回目の記事ということで、はじめて勉強する方にイメージをつかんでもらうことを目的としています。次回以降でより専門的な内容について紹介していきます。

ノイズの種類

大きく分けて、振動や騒音分野で扱うノイズは2種類あります。

1つ目は無相関のノイズです。「無相関のノイズ」とは、測定したい信号とは相関性がないノイズということです。

2つ目は周期性のノイズです。電源ノイズやファン騒音などが周期性のノイズです。

無相関のノイズ(ランダムノイズ)

”「無相関のノイズ」とは、測定したい信号とは相関性がないノイズということ”と先ほど述べました。
超簡単に説明するとMATLABのrand関数を使った信号が「無相関のノイズ」です。

・コード

clc;clear all;close all
fs=1024;
t=linspace(0,1,fs+1);
rand_sig=2*(rand(1,fs+1)-0.5);

figure
plot(t,rand_sig)
xlabel('時間 [s]')
ylabel('音圧 [Pa]')

周期性のノイズ

周期性のノイズは電源ノイズやファン騒音を指します。

実験したことない人には理解されにくいですが、ほとんどの機械には電子機器が搭載されています。この電子機器は電気で動くので、電源(コンセント)につながなければいけません。振動や騒音を測定しているときに、電源の周波数である50Hzもしくは60Hzのノイズが測定信号にのることがあります。
このノイズを電源ノイズと呼んでいます。電子機器もしくは測定器のアースをとることで、電源ノイズを低減できます。
(ただ、電源ノイズ対策は結構大変で、対策に1日かかることもあります。)

ファン騒音は(ファンの羽枚数)×(回転周波数)の周波数で騒音が発生します。これをファン騒音、またはファンノイズと呼びます。

ここでは説明しませんが、モーターを扱う場合は電磁ノイズと呼ばれるノイズがのることがあります。

平均化によるノイズ低減

先に結論から述べると、無相関のノイズは平均化で低減可能ですが、周期性のノイズは平均化で低減不可能です。

無相関のノイズ(ランダムノイズ)

では、例題を用いながら説明したいと思います。

○例題
“観測したい信号”が”無相関のノイズ”で埋もれていたとします。”測定する信号”は”観測したい信号”と”無相関のノイズ”ということになります。平均化処理によって”測定する信号”から”観測したい信号”を抽出してください。なお、各信号は以下とします。
観測したい信号:振幅0.1で周波数10Hzのsin波
無相関のノイズ:振幅1の白色雑音(ランダムノイズ)

 

さて、どうします?
(”平均化によるノイズ低減”という題目のとおり、平均化すればいいだけですが…..)

まずは平均化をしない場合の結果を確認しましょう。平均化しない場合は下図になります。

 

 

では、10回平均をしてみましょう。ちなみにコードは以下です。
・コード

clc;clear all;close all

fs=1024;
t=linspace(0,1,fs+1);

% % % 観測したい信号
sig=0.1*sin(10*pi*t);
% % % 無相関のノイズ1
rand_sig=2*(rand(1,fs+1)-0.5);
% % % 測定信号
measurement_sig1=sig+rand_sig;

% % % 10回平均
measurement_sig2=zeros(10,fs+1);
for ii1=1:10
    rand_sig=2*(rand(1,fs+1)-0.5);
    measurement_sig2(ii1,:)=sig+rand_sig;
end

figure
% subplot(411)
plot(t,measurement_sig1)
xlabel('時間 [s]')
ylabel('音圧 [Pa]')
title('平均化なし')
ylim([-1.2 1.2])

figure
% subplot(412)
plot(t,mean(measurement_sig2))
xlabel('時間 [s]')
ylabel('音圧 [Pa]')
title('10回平均')
ylim([-1.2 1.2])

結果は下図になります。

ノイズの影響が低減され、少しだけsin波の特徴が表れてきましたね。
同じ手順で100回平均、10000回平均の結果を確認します。

10000回平均化をするとかなり綺麗なsin波が抽出できますね。平均化の回数をさらに増加させるとより綺麗なsin波が抽出できます。

スポンサーリンク

実用上は平均化回数を無限に増やすことができないので、十分なSN比(Signal to Noise Ratio)を確保できる回数だけ平均化をすることになります。(適当に決めることもあります。)

周期性のノイズ

先ほどの例題と同様に下記を検証しましょう。

・位相に相関性がある場合

○例題
観測したい信号:振幅1で周波数10Hzのsin波
周期性のノイズ:振幅1で周波数60Hzのsin波

では、10000回平均の結果を見てみましょう。平均化しても周期性のノイズの影響は低減できないことが確認できたと思います。そもそも平均化は、無相関の値が平均値or中央値に収束することを利用しているので、周期性のノイズに対しては効果はないのです。

・コード

clc;clear all;close all

fs=1024;
t=linspace(0,1,fs+1);

% % % 観測したい信号
sig=1*sin(10*pi*t);

% % % 10000回平均
measurement_sig=zeros(10000,fs+1);
for ii1=1:10000
    % % % 周期性のノイズ
    sig_noise=1*sin(60*pi*t);
    % % % 測定信号
    measurement_sig(ii1,:)=sig+sig_noise;
end

figure
plot(t,mean(measurement_sig))
xlabel('時間 [s]')
ylabel('音圧 [Pa]')
title('10000回平均')
% ylim([-1.2 1.2])

 

・位相が無相関の場合

先ほどと同様の例題でも、位相が無相関の場合は平均化の効果が表れます。

 

スポンサーリンク

「周期性のノイズでも平均化処理でノイズの影響を低減できるじゃん!」って思った方もいると思います。ただ、これはかなり特殊な条件です。

「位相が無相関」とは、平均化の回数ごとに”観測したい信号”と”周期性のノイズ”の位相角の比が違うということです。試験条件によっては、「位相が無相関」という状態を作り出すことができますが、かなり手間なので現実的ではありません。

例えば、ファン騒音(周期性のノイズ)のうるさい空間でスピーカーから音を出して、評価点で測定しているとします。このファン騒音の影響を低減したいので、スピーカーとの位相を無相関にしたいとします。

この試験条件だと、スピーカーから音を出すタイミングを測定ごとにランダム的に変化させて、その測定結果を平均化することでファン騒音を低減することができます。

測定ごとに音源再生のOn-Offを無相関になるように繰り返して、数十回~数百回 測定することになります。なかなかハードルが高いですよね。

・コード

clc;clear all;close all

fs=1024;
t=linspace(0,1,fs+1);

% % % 観測したい信号
sig=1*sin(10*pi*t);
phy=rand(1)*2*pi;
% % % 周期性のノイズ
sig_noise=1*sin(60*pi*t+phy);
% % % 測定信号
measurement_sig1=sig+sig_noise;


% % % 10回平均
measurement_sig2=zeros(10,fs+1);
for ii1=1:10
    % % % 位相
    phy=rand(1)*2*pi;
    % % % 周期性のノイズ
    sig_noise=1*sin(60*pi*t+phy);
    % % % 測定信号
    measurement_sig2(ii1,:)=sig+sig_noise;
end

% % % 100回平均
measurement_sig3=zeros(100,fs+1);
for ii1=1:100
    % % % 位相
    phy=rand(1)*2*pi;
    % % % 周期性のノイズ
    sig_noise=1*sin(60*pi*t+phy);
    % % % 測定信号
    measurement_sig3(ii1,:)=sig+sig_noise;
end

% % % 10000回平均
measurement_sig4=zeros(10000,fs+1);
for ii1=1:10000
    % % % 位相
    phy=rand(1)*2*pi;
    % % % 周期性のノイズ
    sig_noise=1*sin(60*pi*t+phy);
    % % % 測定信号
    measurement_sig4(ii1,:)=sig+sig_noise;
end


figure
subplot(411)
plot(t,measurement_sig1)
xlabel('時間 [s]')
ylabel('音圧 [Pa]')
title('平均なし')
% ylim([-1.2 1.2])

subplot(412)
plot(t,mean(measurement_sig2))
xlabel('時間 [s]')
ylabel('音圧 [Pa]')
title('10回平均')
% ylim([-1.2 1.2])

subplot(413)
plot(t,mean(measurement_sig3))
xlabel('時間 [s]')
ylabel('音圧 [Pa]')
title('100回平均')
% ylim([-1.2 1.2])

subplot(414)
plot(t,mean(measurement_sig4))
xlabel('時間 [s]')
ylabel('音圧 [Pa]')
title('10000回平均')
% ylim([-1.2 1.2])

 

コメント