yProcessingClub

すみません、許してください

SN比計算 SN比から信号の大きさを逆算する

シミュレーション等で信号にノイズを重畳する際、SN比を指定したいことがあると思われる。
検索しても出てこなかったので、自分で記事を書いてみようと思う。
合ってるかは知りません。



[2018/11/11追記ここから]
合っているかは知らないと書いたが、おそらく合っていない(途中計算が)。
yuri-processing-club.hatenablog.com
ここに書いた通りであるが、離散信号の積分計算をする場合、T_sを掛ける必要がある。 ただしP_s/P_nを計算する際に分母分子にあるT_sが約分されて消えるので、T_sがあってもなくても結果は変わらないはず。 そして今回はT_s=1として正規化していることにして、以降の説明は特に修正しないものとする。
[2018/11/11追記ここまで]


SN比が任意の値になるように雑音をa倍する。
この係数aを求めるものとする。


まず、元のSN比を求めてみる。

サンプル数K個の信号s\left[k\right]及びノイズn\left[k\right]として(k=0,1,2,\cdots,K-1)
\bf s \rm = [s [ 0 ] \ s [ 1 ] \ s [ 1 ] \ \cdots \ s [ K-1 ]]
\bf n \rm = [n [ 0 ] \ n [ 1 ] \ n [ 1 ] \ \cdots \ n [ K-1 ]]

2乗して、
\bf s^2 \rm = [s [ 0 ]^2 \ s [ 1 ]^2 \ s [ 1 ]^2 \ \cdots \ s [ K-1 ]^2]
\bf n^2 \rm = [n [ 0 ]^2 \ n [ 1 ]^2 \ n [ 1 ]^2 \ \cdots \ n [ K-1 ]^2]

各要素を足し合わせるとパワーP_s及びP_nが求まる。
P_s = \sum \bf s^2 \ \rm = \displaystyle  \sum _{k=0} ^{K-1} s [ k ] ^2
= s [0 ]^2 + s [1 ]^2 + s [2 ]^2 + \cdots + s [K-1 ]^2

P_n = \sum \bf n^2 \ \rm = \displaystyle  \sum _{k=0} ^{K-1} n [ k ] ^2
= n [0 ]^2 + n [1 ]^2 + n [2 ]^2 + \cdots + n [K-1 ]^2

SN比は以下の通り。

SNR_{original} = 10\log (\frac{P_s}{P_n})


次にノイズ\bf na倍したものを\bf n_{sc}として、\bf s\bf n_{sc}SN比が指定した値となるような係数aを求める。
\bf n_{sc} \rm = a \bf n

パワーP_{n_{sc}}

P_{n_{sc}} = \sum \bf n_{sc} ^2 = \rm \sum  a^2 \bf n^2 \ \rm = a ^2 \sum \bf  n^2 \rm = \displaystyle a ^2 P_n


SN比は以下の通り。

SNR = 10\log(\frac{P_s}{P_{n_{sc}}}) = 10\log (\frac{P_s}{a ^2 P_n}) = 10\log (\frac{P_s}{P_n}) - 10\log a^2 \\
\ \ \ \ \ \ \ \ \ = SNR_{original} - 10\log a^2

*1

ここからaを求めていく。

10\log a^2 = SNR_{original} - SNR \\
\ \ 20\log a = SNR_{original} - SNR \\
\ \ \ \ \ \ \log a = \frac{SNR_{original} - SNR}{20}\\
\\
\ \ \ \ \ \ \ \ \ \ \ \ a = 10^{\frac{SNR_{original} - SNR}{20}}

ということで、SNRに任意の値を入れることで、係数aが求められる。

*1:はてなブログtexのイコール揃えが出来ないっぽい?ので、スペース挿入の力技でイコールを揃えている。