新たなワイヤレスシステムのデジタルフロントエンド補償

function out = RX_PN(in、dBc、cutoff、floor、Fs)
%================================== =======================================
%本のタイトル:新興のデジタルフロントエンド補償ワイヤレスシステム
%作成者:Fran鏾isHorlin(ULB)、Andr Bourdoux(IMEC)
%編集者:John Wiley&Sons、Ltd
%日付:2008
%================= ================================================== ======
%の
%の説明
%この関数は、信号ストリーム(複数可)に位相ノイズを印加します。各行
%には1つのストリームが含まれます。
同じ局部発振器で動作している場合、%と同じ位相ノイズが各ストリームに適用されます位相ノイズの
%PSD、積分位相ノイズ、カットオフ周波数、
%位相ノイズフロアとサンプルレート。カットオフ周波数で、PSDの
%は、開始-20dB / decでロールオフ

%INPUTS
% -で[長さX NS]:各行が信号である入力信号を
異なるアンテナからの%。
% - dBcの[1]:統合位相雑音
% -カット[1]:PSD用のカットオフ周波数
% -床[1]:位相ノイズフロア
% - Fsを[1]:サンプルレート

%OUTPUTS
% -アウト[長さx Ns]:出力信号のNsストリーム
[MN] = size(in);
ltx = 2 ^(fix(log2(M-0.5))+ 2); %ltxは
、cutoff /(Fs / ltx)<16、
ltx = 16 * Fs / cutoffの場合、常に少なくとも2xMになります。
ltx = 2 ^(fix(log2(ltx-0.5))+ 1);
終わり
PhaseNoise = FreqSynthLorenzian_new(dBc、cutoff、floor、Fs、ltx)。 ';
Nphn = length(PhaseNoise);
if Nphn <M
error(['位相ノイズベクトルは' num2str(Nsamples)])より長くなければなりません
end
Nstart = fix(rand(1,1)*(Nphn-M)); %ランダムな開始点
PhaseNoise = PhaseNoise(Nstart:Nstart + M-1);
%データ出力に位相ノイズを追加
= zeros(size(in));
for k = 1:N
out(:、k)= in(:、k)。* PhaseNoise。 ';
終了
%%%%%%%%%%%%%
関数y = FreqSynthLorenzian_new(K、B、p2、Fs、ltx);
%-lo:時間領域ベクトル、
%発振器振幅の可能な時間領域表現
%-K:総ノイズ電力(dBc)
%-B:3dB帯域幅
%-p2:dBc / Hz単位のノイズプラトーレベル
ノイズフロアより#20dB上に設定されます。
%-ltx:返す信号のloベクトルの長さ
%BB等価LOスペクトルの負の周波数
は、正の周波数の複素共役です(結果として、phi(t)は
実数です)。この理由は、phi(t)またはlo(t)が
実数である必要はありませんが、その
ような「対称」周波数応答を作成するFMまたはPM変調との類似性から来ています。
%-PHI(f)、したがってLO(f)は、必要な
形状のスペクトルとしてではなく、必要
マスクのあるPSD(ランダムプロセスの表現)として生成する必要があります
グローバル
dNs = ltx; %ifft計算のサンプル数
df = Fs / Ns; %周波数分解能
k = [0:1:Ns / 2-1、-Ns / 2:1:-1]; %周波数インデックス範囲
%周波数範囲:f = k * df
p2o = p2;
p2 = 10 ^(p2 / 10); %in V ^ 2 / Hz
p2 = p2 * df; %in V ^ 2 / df
Ko = K;
K = 10 ^(K / 10); %in V ^ 2
B = B / df; %3 dB帯域幅インデックス
%低周波数部分は、ローレンツ関数
SSBmask = sqrt(K * B / pi./([1:Ns/2].^2+B^2));によって定義されます。
%高周波部分は、システムのノイズフロアによって定義されます
。p2SSBmask= max(SSBmask、sqrt(p2)* ones(size(SSBmask)));
%-位相ノイズPHI(f、f> 0)は、最初に広帯域信号として生成されます
PHI = sqrt(0.5)* abs(randn(1、Ns / 2)+ j * randn(1、Ns / 2)) ;
PHI = PHI。* exp(j * 2 * pi * rand(1、Ns / 2));
%-位相ノイズPHI(f、f> 0)は、必要なマスク
PHI = PHI。* SSBmaskに従って整形されます。
%-位相ノイズPHI(f)は、PHI(f、f> 0)から生成されます。
%(キャリアに位相ノイズはありません)
PHI = [0 PHI(1:Ns / 2-1)conj(PHI(Ns / 2:-1:1))];
NoisePower = 10 * log10(sum(abs(PHI)。^ 2));
if(0)
f = k(2:Ns / 2)* df;
PHI_f = 20 * log10(abs(PHI(2:Ns / 2))/ sqrt(df));
SSBmask_f = 20 * log10(SSBmask(1:Ns / 2-1)/ sqrt(df));
dBc / dfではなくdBc / HzでPHI(f)を取得するための%正規化
figure(20)、semilogx(f、PHI_f、 'b-'、 'linewidth'、1);
つかまっている; グリッドオン; ズーム;
semilogx(f、SSBmask_f、 'r-'、 'linewidth'、2);
axis([f(1)f(end)p2o-10 SSBmask_f(1)+10]);
終わり;
%-積分位相ノイズパワーの補正:
PHI = PHI * 10 ^((Ko-NoisePower)/ 20);
%-時間領域の位相ノイズphi(t)
phi = ifft(PHI、Ns)* Ns;
%-時間領域の局部発振器信号lo(t)
lo = exp(j * phi);
%-
(0)
LO = fft(lo、Ns)/ Nsの場合、周波数領域の局部発振器信号LO(f)
f = k(2:Ns / 2)* df;
LO_f = 20 * log10(abs(LO(2:Ns / 2))/ sqrt(df));
SSBmask_f = 20 * log10(SSBmask(1:Ns / 2-1)/ sqrt(df));
figure(21); semilogx(f、LO_f、 'k-'、 'linewidth'、1);
つかまっている; グリッドオン; ズーム;
semilogx(f、SSBmask_f、 'r-'、 'linewidth'、2);
axis([f(1)f(end)p2o-10 SSBmask_f(1)+10]);
終わり;
%-dbbm_feで効率的に使用するためにlo(t)を準備します
y = lo(1,1:ltx * fix(Ns / ltx));
y = reshape(y、ltx、fix(Ns / ltx));

おすすめ

転載: blog.csdn.net/ccsss22/article/details/113878276