Contenu principal

La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.

awgn

Ajouter du bruit blanc gaussien à un signal

Description

Y = awgn(X,snr) ajoute du bruit blanc gaussien au signal vectoriel X. Cette syntaxe suppose que X a une puissance de 0 dBW. Pour plus d’informations sur le bruit blanc gaussien additif, veuillez consulter Qu’est-ce que le bruit AWGN ?

Y = awgn(X,snr,signalpower) accepte une valeur de puissance de signal d’entrée en dBW. Pour mesurer la puissance de X avant d’ajouter du bruit, définissez signalpower à 'measured'. L’option 'measured' ne génère pas le rapport signal à bruit (SNR) moyen demandé pour des appels de fonction awgn répétés en boucle si la puissance du signal d’entrée varie dans le temps en raison de l’évanouissement, mais aussi si le temps de cohérence du canal est supérieur à la durée de l’entrée.

exemple

Y = awgn(X,snr,signalpower,randobject) accepte également un objet de stream de nombres aléatoires pour générer des échantillons de bruit aléatoires normaux. Pour plus d’informations sur la génération d’échantillons de bruit reproductibles, veuillez consulter Conseils.

exemple

Y = awgn(X,snr,signalpower,seed) spécifie une valeur initiale pour initialiser le générateur de nombres aléatoires normaux qui sert à ajouter du bruit blanc gaussien au signal d’entrée.

exemple

Y = awgn(___,powertype) définit le type de puissance du signal et du bruit à 'dB' ou 'linear', en plus des arguments en entrée indiqués dans les syntaxes précédentes. Pour plus d’informations sur les relations entre le SNR et d’autres mesures de puissance relative du bruit telles que Es/N0 et Eb/N0, veuillez consulter AWGN Channel Noise Level.

[Y,var] = awgn(___) renvoie également la variance totale du bruit utilisée pour générer des échantillons de bruit aléatoires en échelle linéaire.

Exemples

réduire tout

Créez une onde en dents de scie.

t = (0:0.1:60)';
x = sawtooth(t);

Ajoutez du bruit blanc gaussien et tracez les résultats.

y = awgn(x,10,'measured');
plot(t,[x y])
legend('Original Signal','Signal with AWGN')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original Signal, Signal with AWGN.

Émettez et recevez des données avec une constellation « 16-aire » non rectangulaire en présence de bruit gaussien. Affichez le diagramme de dispersion de la constellation bruitée et estimez le taux d’erreur de symbole (SER) pour deux SNR différents.

Créez une constellation 16-QAM basée sur la norme V.29 pour les modems de ligne téléphonique.

c = [-5 -5i 5 5i -3 -3-3i -3i 3-3i 3 3+3i 3i -3+3i -1 -1i 1 1i];
sigpower = pow2db(mean(abs(c).^2));
M = length(c);

Générez des symboles aléatoires.

data = randi([0 M-1],2000,1);

Modulez les données avec la fonction genqammod. La modulation QAM générale est nécessaire car la constellation personnalisée n’est pas rectangulaire.

modData = genqammod(data,c);

Passez le signal à travers un canal AWGN avec un SNR de 20 dB.

rxSig = awgn(modData,20,sigpower);

Affichez un diagramme de dispersion du signal reçu et de la constellation de référence c.

h = scatterplot(rxSig);
hold on
scatterplot(c,[],[],'r*',h)
grid
hold off

Figure Scatter Plot contains an axes object. The axes object with title Scatter plot, xlabel In-Phase, ylabel Quadrature contains 2 objects of type line. One or more of the lines displays its values using only markers This object represents Channel 1.

Démodulez le signal reçu avec la fonction genqamdemod. Déterminez le nombre d’erreurs de symbole et le SER.

demodData = genqamdemod(rxSig,c);
[numErrors,ser] = symerr(data,demodData)
numErrors = 
4
ser = 
0.0020

Répétez le processus d’émission et de démodulation en utilisant un canal AWGN avec un SNR de 10 dB. Déterminez le SER pour ce SNR réduit. Comme on pouvait s’y attendre, les performances se dégradent lorsque le SNR est réduit.

rxSig = awgn(modData,10,sigpower);
demodData = genqamdemod(rxSig,c);
[numErrors,ser] = symerr(data,demodData)
numErrors = 
457
ser = 
0.2285

Générez des symboles de données aléatoires et le signal modulé 4-PSK.

M = 4;
k = log2(M);
snr = 3;
data = randi([0 M-1],2000,1);
x = pskmod(data,M);

Définissez la valeur initiale du générateur de nombres aléatoires.

seed = 12345;

Générez un bruit aléatoire reproductible avec la fonction rng avant d’appeler la fonction awgn.

rng(seed);
y = awgn(x,snr);

Calculez les erreurs sur les bits.

dataHat = pskdemod(y,M);
numErr1 = biterr(data,dataHat,k)
numErr1 = 
309

Réinitialisez la valeur initiale du générateur de nombres aléatoires.

rng(seed);

Démodulez le signal PSK et calculez les erreurs sur les bits.

y = awgn(x,snr);
dataHat = pskdemod(y,M);
numErr2 = biterr(data,dataHat,k)
numErr2 = 
309

Comparez numErr1 et numErr2. Le nombre d’erreurs reste le même après la réinitialisation de la valeur initiale du générateur de nombres aléatoires.

isequal(numErr1, numErr2)
ans = logical
   1

Générez des résultats d’ajout de bruit blanc gaussien avec un objet RandStream et la fonction d’objet reset.

Définissez la puissance du signal d’entrée à 0 dBW, ajoutez du bruit pour obtenir un SNR de 10 dB et utilisez un stream aléatoire local. Ajoutez du bruit blanc gaussien à sigin deux fois pour générer sigout1 et sigout2. Utilisez isequal pour comparer sigout1 et sigout2. Les sorties ne sont pas égales lorsque vous ne réinitialisez pas le stream aléatoire.

S = RandStream('mt19937ar',Seed=5489);
sigin = sqrt(2)*sin(0:pi/8:6*pi);
sigout1 = awgn(sigin,10,0,S);
sigout2 = awgn(sigin,10,0,S);
isequal(sigout1,sigout2)
ans = logical
   0

Réinitialisez l’objet de stream aléatoire pour qu’il revienne à l’état qu’il avait avant l’ajout du bruit AWGN à sigout1. Ajoutez du bruit AWGN à sigin pour générer sigout3, puis comparez sigout1 et sigout3. Les sorties sont égales lorsque vous réinitialisez le stream aléatoire.

reset(S);
sigout3 = awgn(sigin,10,0,S);
isequal(sigout1,sigout3)
ans = logical
   1

Arguments d'entrée

réduire tout

Signal d’entrée, défini par un scalaire, un vecteur, un tableau numérique ou un objet dlarray (Deep Learning Toolbox). La puissance du signal d’entrée est supposée égale à 0 dBW. Si X est complexe, awgn ajoute un bruit complexe. Pour plus d’informations, veuillez consulter Support des tableaux.

Types de données : double
Support des nombres complexes : Oui

Rapport signal à bruit en dB, défini par :

  • Un scalaire si le signal d’entrée est un scalaire ou un vecteur.

  • Un scalaire ou un vecteur si le signal d’entrée est un tableau 3D. Pour plus d’informations, veuillez consulter Support des tableaux.

La fonction applique la même valeur de snr à chaque canal. Les colonnes du signal d’entrée représentent les différents canaux d’un signal multicanal.

Types de données : double

Puissance du signal en dBW, définie par un scalaire ou par 'measured'.

  • Scalaire : la valeur indiquée est utilisée comme niveau de signal de X pour déterminer le niveau de bruit nécessaire pour atteindre le snr spécifié.

  • 'measured' : le niveau de signal de X est calculé pour déterminer le niveau de bruit nécessaire pour atteindre le snr spécifié. Vous ne pouvez pas utiliser cette valeur si le signal d’entrée est un dlarray ou si snr est un vecteur.

Si le signal d’entrée est multicanal, la fonction calcule une seule valeur signalpower pour tous les canaux. Elle utilise ensuite cette valeur pour calculer le niveau de bruit pour tous les canaux.

Types de données : double

Objet de stream de nombres aléatoires, défini par un objet RandStream. L’état de l’objet de stream aléatoire détermine la série de nombres générée par la fonction randn. Configurez l’objet de stream aléatoire avec la fonction reset (RandStream) et ses propriétés. Vous ne pouvez pas spécifier un objet de stream aléatoire si le signal d’entrée est un dlarray.

Pour plus d’informations sur la génération d’échantillons de bruit reproductibles, veuillez consulter Conseils.

Valeur initiale du générateur de nombres aléatoires, définie par un scalaire. Vous ne pouvez pas spécifier une valeur initiale si le signal d’entrée est un dlarray.

Types de données : double

Unité de puissance du signal, définie à 'dB' ou 'linear'.

  • Lorsque powertype est défini à 'dB', snr est mesuré en dB et signalpower en dBW.

  • Lorsque powertype est défini à 'linear', snr est mesuré sous forme de rapport et signalpower est mesuré en watts en supposant une charge de référence égale à 1 ohm.

Pour définir l’argument powertype, vous devez aussi définir snr et signalpower.

Arguments de sortie

réduire tout

Signal de sortie, renvoyé sous la forme d’un scalaire, d’un vecteur ou d’un objet dlarray (Deep Learning Toolbox). Le signal de sortie renvoyé est le signal d’entrée avec le bruit blanc gaussien ajouté. Si le signal d’entrée X est un dlarray, la sortie Y est également un dlarray. Pour plus d’informations, veuillez consulter Support des tableaux.

Variance totale du bruit en échelle linéaire, renvoyée sous la forme d’un scalaire positif ou d’un vecteur lorsque snr est un vecteur. La fonction utilise la variance du bruit pour générer des échantillons de bruit aléatoires.

En savoir plus

réduire tout

Conseils

  • Pour plus d’informations sur les relations entre le SNR et d’autres mesures de puissance relative du bruit telles que Es/N0 et Eb/N0, veuillez consulter AWGN Channel Noise Level.

  • Pour générer des échantillons de bruit blanc gaussien reproductibles, procédez de l’une des manières suivantes :

    • Utilisez rng (seed) avant d’appeler la fonction awgn pour générer un bruit aléatoire reproductible.

    • Indiquez une valeur seed statique en entrée de awgn sauf si l’entrée est un objet dlarray.

    • Utilisez la fonction reset (RandStream) avec l’objet randobject avant de le passer en entrée à awgn sauf si l’entrée est un objet dlarray.

    • Indiquez un objet randobject dont l’état est connu en entrée de awgn sauf si l’entrée est un objet dlarray. Pour plus d’informations, veuillez consulter RandStream.

  • Pour reproduire les streams de nombres aléatoires d’un CPU sur un GPU, vous devez aligner leurs générateurs de nombres aléatoires respectifs. Pour plus d’informations, veuillez consulter Random Number Streams on a GPU (Parallel Computing Toolbox).

Capacités étendues

développer tout

Historique des versions

Introduit avant R2006a

développer tout