スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【ADC】SNRについて③ (SNRとSFDRの関係)

「SNRについて」のつづき。 SFDRとの関係についても。

下図は、入力信号とサンプリング周波数の相関有無による
スペクトラムの変化について示している。

zu2.png

相関関係(互いの周波数比)によって、
量子化ノイズに影響を及ぼすことで、スペクトラムが変化している様子。
(これは、ディザ信号を付与するメリットを示唆している)

ここで、なぜSNRよりSFDRが小さいのか?(SNR<SFDR)
これは、いままで見てきた通り、SNRがナイキスト”全域”における
量子化ノイズで算出されていることによる。

これに対して、SFDRは、最大スプリアスとの比率。
スプリアスなので、なにかしら帯域をもっており、
”帯域内”の電力から算出されている。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
①ADC評価などで入力信号に単一正弦波を使用するときは、
サンプリング周波数と整数倍比率とならないようにすること。

②SFDRは、ある帯域をもつスプリアスとの比率。
それに対して、SNRはナイキスト全域における量子化ノイズ
から算出した比率。
よって、SNR < SFDR と一般的になる。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
スポンサーサイト

【ADC】SNRについて②

「SNRについて」のつづき。

信号帯域を考えた時のSNRについて、次式となる。

siki3.png

第2項までは、ナイキスト”全域”の量子化ノイズを用いて、SNRを算出している。
そのため、第3項において、”信号帯域”分だけの量子化ノイズとしている。
ナイキスト領域(Fs/2)を信号帯域(BW)で割っているだけ。 ⇒ (Fs/2)/BW

※※※※※※※※※※※※※※※※※※※※※※※※※※
つまり、ナイキスト全域での量子化ノイズを使っていたので、
必要帯域分だけに絞って考えようということ。
これは、FFTによる処理利得についても同じ考え方が適用できる。
※※※※※※※※※※※※※※※※※※※※※※※※※※


下図は、FFT処理利得について、図示されたもの。

zu.png


※※※※※※※※※※※※※※※※※※※※※※※※※※
FFT処理利得は 10log(M/2) となっているが、さきほどの帯域と同じはなし。
FFT1ビンあたりの帯域は、Fs/M となる。(Mはサンプリング数)
よって、(Fs/2)/BW = (Fs/2)/(Fs/M) = M/2 となる。
※※※※※※※※※※※※※※※※※※※※※※※※※※

【ADC】SNRについて


量子化ノイズの式は、下記となる。

siki2.png

この式は、1サンプリング間の量子化誤差を”2乗平均”したあと”RMS値”としたもの。
量子化なので電圧誤差に着目していたものが、”2乗平均”することで、電圧から電力へ変換されている。
このRMS値が、ナイキスト領域内(Fs/2)に、一様分布する。

※※※※※※※※※※※※※※※※※※※※※※※
Q1. なぜ、ナイキスト領域内で考えているのか?
A1. 仮にNサンプルしても、量子化誤差は各サンプルで存在しており、時間波形として表せる。その波形に対して周波数分析(FFT)すると、波形の高調波成分は、すべてナイキスト領域に折り返ってくる。そのため、ナイキスト領域内で考えている。
   
Q2. ナイキスト領域内で一様分布と考えてよい理由は?
A2. 量子化ノイズはホワイトノイズと類似であるため。
※※※※※※※※※※※※※※※※※※※※※※※


次式は、よく目にする「6.02*N + 1.76」の導出。

siki

信号、量子化ノイズともに”RMS値”を用いている。
また、この量子化ノイズは、ナイキスト領域”全域”におけるノイズであることに注意する。
これは、帯域が狭くなれば、SNRが変化することを式が表している。

【参考文献】
アプリケーションノート MT-001:「S/N 比=6.02N+1.76DB ~ 」より。

【MUSIC】SCILAB版 その2

SCILAB版を作成。

/////////////////////////////////////////////
//// MUSIC処理
//// 生成ファイル"music_data.dat"
//// scilab変数を保存したファイル
/////////////////////////////////////////////

clear

FILE_PASS = 'C:\scilab_works\MUSIC\';
FILE_NAME_R = 'array_data.dat';
FILE_NAME_W = 'music_data.dat';

load (FILE_PASS + FILE_NAME_R) // 受信信号 読込み

j = sqrt(-1); // jは複素数
pa = 3; // 推定する信号の個数

// 固有値(特異値)分解
[Uxx, Sxx, Vxx] = svd(Rxx);
sv = diag(Sxx);
Us = Uxx(:,1:pa);
Un = Uxx(:,pa+1:m);
// ステアリングベクトル(行列)の計算
th=[-90:1:90]';
A = exp(-j*2*%pi*([0:m-1]'*sin(th'*deg2rad))*d/wavelen)/sqrt(m);
// MUSICスペクトラムの計算
num = diag(A'*A);
En = Un'*A;
den = diag(En'*En);
doa = 10*log10(num./den);

// 推定結果の表示
// MUSIC Spectrum の表示
subplot(2,1,1);
plot(th, doa)
title('MUSIC DOA Estimator');
xlabel('Angle [deg.]')
ylabel('DOA Spectrum [dB]')
xgrid;

// 固有値の分布を表示
subplot(2,1,2);
plot(sv,'o')
title('Distribution of Eigenvalues');
xlabel('Index');
ylabel('Value')
xgrid;

save (FILE_PASS + FILE_NAME_W);

【MUSIC】SCILAB版 その1

SCILAB版を作成。

/////////////////////////////////////////////
//// ANT受信信号生成
//// 生成ファイル"array_data.dat"
//// scilab変数を保存したファイル
/////////////////////////////////////////////

clear
//load sig_data // 変調波信号の読み込み

FILE_PASS = 'C:\scilab_works\MUSIC\';
FILE_NAME = 'array_data.dat';


///////////////// 信号生成 /////////////////
OS = 10; //オーバーサンプル数
n = 1:2048;
f1 = 1;
f2 = 2;
f3 = 3;
s1 = cos(2*%pi*f1/OS*n);
s2 = cos(2*%pi*f2/OS*n);
s3 = cos(2*%pi*f3/OS*n);
///////////////////////////////////////////


//
j = sqrt(-1); // jは複素数
m = 8; // m : アレー素子数
p = 3; // p:到来波数
fc = 1e9; // 搬送波の周波数(1GHz)
c = 3e8; // 伝搬速度
wavelen = c/fc; // 搬送波の波長
d = wavelen/2; // 素子間隔(半波長)
theta = [ 85; 40; -20]; // 入射角の設定
nn = 1024; // nn:データ数
sn1 = 5; // 信号1のSNR (dB)
sn2 = 5; // 信号2のSNR (dB)
sn3 = 5; // 信号3のSNR (dB)
SN = [ sn1; sn2; sn3 ]; // 各信号のSN比
sn = SN(1:p); // SNベクトルの定義
deg2rad = %pi/180; // ラジアンへの変換係数
//
// 信号源ベクトルの作成
tt = 1:nn;
//SS = [ s1(tt).'; s2(tt).'; s3(tt).'];
SS = [ s1(tt); s2(tt); s3(tt)];
S = SS(1:p,:);
// 観測雑音の生成
nr = rand(m,nn); //real
ni = rand(m,nn); //imag
U = nr+j*ni;
//
// SNの計算
//
Ps = S*S'/nn; // (ΣS)/nn
ps = diag(Ps); // 対角行列 ⇒ 各信号電力
refp= 2*10.^(sn/10); // SN真数変換 , "2"乗算は不明
tmp=sqrt(refp./ps); // SN調整して、各信号を電圧へ
S2 = diag(tmp)*S; // 対角化し、各SN値を各信号にのみ乗算
//S2 = [tmp(1,1)*S(1,:); tmp(2,1)*S(2,:); tmp(3,1)*S(3,:)]; と同等

//
// ステアリング行列の作成
//
a2=-j*2*%pi*([0:m-1]'*sin(theta'*deg2rad))*d/wavelen;
A = exp(a2); //行:ANT番号 列:信号種類(到来数)
//
// アレーアンテナ受信信号の計算
X = A*S2+U; //ステアリング*信号+ノイズ、信号内には各諸元をもつ波形の合成
//
// 相関行列と逆行列の計算
Rxx = X*X'/nn;
Rinv = inv(Rxx);
//
save (FILE_PASS + FILE_NAME, 'X', 'A', 'S2', 'U', 'Rxx', 'Rinv', 'm', 'nn', 'wavelen', 'd', 'deg2rad', 'theta', 'p');

直交復調(ゼロIF) シミュレーション

clear
clf()

//////////////// 共通パラメータ ///////////////////////////////////////////////////
n = 1:1024; //解析範囲
fs = 1000; //サンプリング周波数[MHz]
///////////////////////////////////////////////////////////////////////////////

Tini = 0;//%pi/4; //初期位相
f = 400; //RF周波数[MHz]
fl = 400; //LO周波数[MHz]


w = 2*%pi*f/fs;
wl = 2*%pi*fl/fs;

RF = cos(w*n + Tini);
LO_I = cos(wl*n);
LO_Q = cos(wl*n + %pi/2);

I = RF .* LO_I;
Q = RF .* LO_Q;

fig = figure(0);
subplot(121);
title("waveform");
xlabel("time");
ylabel("amplitude");
xgrid;
plot(n,RF)
plot(n,LO_I,'r')
plot(n,LO_Q,'g')
//zoom_rect(gca(),[0,0,20,1.5])

subplot(122);
title("waveform");
xlabel("time");
ylabel("amplitude");
xgrid;
plot(n,I)
plot(n,Q,'r')
//zoom_rect(gca(),[0,0,0.5,50])


///////////////////////////////////////////
// LPF
///////////////////////////////////////////
TAP_NUM = 64;

[wft,wff,fr]=wfir('lp',TAP_NUM,[0.1 0],'hn',[1 0]); //wft:インパルス応答、wff:周波数応答、fr:周波数グリッド

figure(1)
subplot(121)
title("周波数応答");
plot(fr,wff)
xgrid;

subplot(122)
title("インパルス応答");
plot(0:TAP_NUM-1,wft)
xgrid;


///////////////////////////////////////////
// LPF適用
///////////////////////////////////////////
I_LPF = convol(wft,I);
I_LPF_len = size(I_LPF,2); //畳込みの計算上、(信号長さ - 1) = (畳込み結果の長さ)
Q_LPF = convol(wft,Q);
Q_LPF_len = size(Q_LPF,2);

P = sqrt(I_LPF^2 + Q_LPF^2);

fig = figure(3);
subplot(121);
title("waveform");
xlabel("time");
ylabel("amplitude");
xgrid;
//plot(n,RF)
plot(0:I_LPF_len-1,I_LPF)
plot(0:Q_LPF_len-1,Q_LPF,'r')
//zoom_rect(gca(),[0,0,20,1.5])

subplot(122);
title("waveform");
xlabel("time");
ylabel("amplitude");
xgrid;
plot(0:I_LPF_len-1,P)
//plot(n,Q,'r')
//zoom_rect(gca(),[0,0,0.5,50])
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。