yuri-processing-club.hatenablog.com
こちらの記事でSN比を指定してノイズの大きさを調整する計算を紹介した。
matlabにて計算が正しいかを確認する。
matlabコード
% sin信号及び白色ノイズを生成 % 自前の計算及び標準の関数を用いてSN比を計算し、表示する % 指定したSN比になるようノイズのパワーを調整する Fs = 44100; % サンプリング周波数(Hz) T = 10; % 信号の時間長さ(秒) N = Fs * T; % 信号のサンプル数 n = randn(1, N); % N点の白色ノイズ % sin信号の生成 f = 100; % sin波の周波数(Hz) t = ((1:N) - 1) / Fs; % 周期1/Fs, サンプル数Nの時間配列 s = sin(2 * pi * f * t); % N点, 周波数fのsin波 % パワーの計算 Pn = n * n'; % ノイズのパワー(2乗の和) Ps = s * s'; % チャープ信号のパワー(2乗の和) % SN比の計算 SNR = 10 * log10(Ps/Pn); SNR1 = snr(s, n); % matlab標準の関数 fprintf('調整前:SNR = %fdB, SNR1 = %fdB\n', SNR, SNR1); % 指定したSN比となるようにノイズの大きさを調整する SNR2 = -30; % 指定するSN比(dB) coef = 10^((SNR - SNR2)/20);% ノイズの大きさを調整する係数 n = coef * n; % ノイズの大きさを調整 % 再度SN比の計算 Pn = n * n'; % ノイズのパワーを再度求める SNR = 10 * log10(Ps/Pn); SNR1 = snr(s, n); fprintf('調整後:SNR = %fdB, SNR1 = %fdB\n', SNR, SNR1);