Compensation frontale numérique pour les systèmes sans fil émergents

function out = RX_PN (in, dBc, cutoff, floor, Fs)
% ================================== ========================================
% Titre du livre: Digital Front-End Compensation for Emerging Wireless Systems
% Auteurs: Fran 鏾 est Horlin (ULB), Andr Bourdoux (IMEC)
% Editeur: John Wiley & Sons, Ltd
% Date: 2008
% ================= =================================================== ======
%
% DESCRIPTION
% Cette fonction applique un bruit de phase dans le flux de signaux (s). Chaque ligne
% contient un flux. Le même bruit de phase est appliqué à chaque flux en
% s'ils fonctionnent avec le même oscillateur local. Le bruit de phase a
% a PSD défini par quatre valeurs: bruit de phase intégré, fréquence de coupure, a
% plancher de bruit de phase et taux d'échantillonnage. A la fréquence de coupure, le PSD
% démarre un -20dB / dec roll-off
%
% ENTREES
% - dans [longueur x Ns]: le signal d'entrée dans lequel chaque ligne est un signal
% par rapport à une antenne différente.
% - dBc [1]: bruit de phase intégré
de% - coupure [1]: fréquence de coupure du PSD
% - sol [1]: bruit de phase plancher
% - Fs [1]: la fréquence d' échantillonnage
%
% SORTIES
% - out [longueur x Ns]: Ns flux de signaux de sortie
[MN] = taille (po);
ltx = 2 ^ (fix (log2 (M-0,5)) + 2); % ltx sera toujours au moins 2xM
si cutoff / (Fs / ltx) <16,
ltx = 16 * Fs / cutoff;
ltx = 2 ^ (fix (log2 (ltx-0.5)) + 1);
finir
PhaseNoise = FreqSynthLorenzian_new (dBc, coupure, plancher, Fs, ltx). ';
Nphn = longueur (PhaseNoise);
if Nphn <M
error (['Le vecteur de bruit de phase doit être plus long que' num2str (Nsamples)])
end
Nstart = fix (rand (1,1) * (Nphn-M)); % point de
départ aléatoire PhaseNoise = PhaseNoise (Nstart: Nstart + M-1);
% Ajouter le bruit de phase aux données
out = zeros (size (in));
pour k = 1: N
out (:, k) = in (:, k). * PhaseNoise. ';
end
%%%%%%%%%%%%%
function y = FreqSynthLorenzian_new (K, B, p2, Fs, ltx);
% - lo: vecteur du domaine temporel, représentation possible du domaine temporel de l'
amplitude de l'oscillateur%.
% - K: puissance de bruit totale en dBc
% - B: bande passante 3dB
% - p2: niveau de plateau de bruit en dBc / Hz, à régler à # 20dB au-dessus du
% de bruit de fond.
% - ltx: longueur du signal lo vecteur à renvoyer
% Les fréquences négatives du spectre LO équivalent BB sont le
% complexe conjugué des fréquences positives (par conséquent, phi (t) est
% réel). La raison à cela n'est pas la nécessité pour le phi (t) ou le lo (t) d'être
% réel, mais cela vient de l'analogie avec les modulations FM ou PM qui
créent de telles réponses en fréquence 抯 ymétriques .
% - PHI (f), donc LO (f), ne doit pas être généré comme un spectre avec une
forme de% souhaité , mais comme une PSD (représentation pour un processus aléatoire) avec un
masque de% souhaité .
global d
Ns = ltx; % Nombre d'échantillons pour le calcul de l'ifft
df = Fs / Ns; % résolution de fréquence
k = [0: 1: Ns / 2-1, -Ns / 2: 1: -1]; % plage d'indice de
fréquence% plage de fréquence: f = k * df
p2o = p2;
p2 = 10 ^ (p2 / 10); % en V ^ 2 / Hz
p2 = p2 * df; % en V ^ 2 / df
Ko = K;
K = 10 ^ (K / 10); % dans V ^ 2
B = B / df; % Indice de bande passante 3 dB
% La partie basse fréquence est définie par la fonction
lorenzienne SSBmask = sqrt (K * B / pi ./ ([1: Ns / 2]. ^ 2 + B ^ 2));
% La partie haute fréquence est définie par le bruit de fond du système p2
SSBmask = max (SSBmask, sqrt (p2) * ones (size (SSBmask)));
% - Le bruit de phase PHI (f, f> 0) est d'abord généré comme un signal large bande
PHI = sqrt (0.5) * abs (randn (1, Ns / 2) + j * randn (1, Ns / 2)) ;
PHI = PHI. * Exp (j * 2 * pi * rand (1, Ns / 2));
% - Le bruit de phase PHI (f, f> 0) est mis en forme selon le masque
utile PHI = PHI. * SSBmask;
% - Le bruit de phase PHI (f) est alors généré à partir de PHI (f, f> 0)
% (pas de bruit de phase sur la porteuse)
PHI = [0 PHI (1: Ns / 2-1) conj (PHI (Ns / 2: -1: 1))];
NoisePower = 10 * log10 (somme (abs (PHI). ^ 2));
si (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));
% normalisation pour obtenir PHI (f) en dBc / Hz, et non dBc / df
figure (20), semilogx (f, PHI_f, 'b -', 'linewidth', 1);
attendez; grille sur; zoomez sur;
semilogx (f, SSBmask_f, 'r -', 'linewidth', 2);
axe ([f (1) f (fin) p2o-10 SSBmask_f (1) +10]);
finir;
% - Correction de la puissance de bruit de phase intégrée:
PHI = PHI * 10 ^ ((Ko-NoisePower) / 20);
% - Bruit de phase phi (t) dans le domaine temporel
phi = ifft (PHI, Ns) * Ns;
% - Signal d'oscillateur local lo (t) dans le domaine temporel
lo = exp (j * phi);
% - Signal d'oscillateur local LO (f) dans le domaine fréquentiel
si (0)
LO = fft (lo, Ns) / Ns;
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);
attendez; grille sur; zoomez sur;
semilogx (f, SSBmask_f, 'r -', 'linewidth', 2);
axe ([f (1) f (fin) p2o-10 SSBmask_f (1) +10]);
finir;
% - Préparez lo (t) pour une utilisation efficace dans dbbm_fe
y = lo (1,1: ltx * fix (Ns / ltx));
y = remodeler (y, ltx, fixer (Ns / ltx));

Je suppose que tu aimes

Origine blog.csdn.net/ccsss22/article/details/113878276
conseillé
Classement