D'abord, je pense qu'il est important de savoir quelles sont les choses que nous avons un système BPSK:
La constellation d'un système BPSK est [-A, A] dans ce cas [-1,1] le SNR varie de 0 db à 40 db
Je chose que la réponse est dans cette fonction:
y = awgn (...); à partir de matlab central:
y = awgn (x, snr) ajoute un bruit blanc gaussien au signal vectoriel x. Le scalaire snr spécifie le rapport signal sur bruit par échantillon, en dB. Si x est complexe, awgn ajoute du bruit complexe. Cette syntaxe suppose que la puissance de x est 0 dBW. Y = awgn (x, snr, sigpower) est identique à la syntaxe ci-dessus, sauf que sigpower est la puissance de x en dBW. Y = awgn (x, snr, 'mesuré') est le même que y = awgn (x, snr), sauf que awgn mesure la puissance de x avant d'ajouter du bruit.
vous utilisez y = awgn (x, RSB, « mesurée »), de sorte que vous n'avez pas besoin de vous inquiéter, beacuse Matlab porte tout pour vous, mesurer la puissance du signal, et appliquer ensuite à canaliser un bruit avec la variance nécessaire pour obtenir ce rapport SNR.
nous allons voir comment cela peut-il arriver
SNRbit = Eb/No = A^2/No = dmin^2 /4N0
the constelation [A,-A] in this case is [-1,1] so
10 log10(A^2/N0) = 10 log10(1/N0) = SNRbitdb
SNRlineal = 10^(0.1*SNRdb)
donc avec ce que:
noise_var=0.5/(EbN0_lin); % s^2=N0/2
et le signal sera quelque chose comme ça
y = s + sqrt(noise_var)*randn(1,size);
donc dans votre cas, je vais générer le signal comme vous le faites:
>> N = 100; %number of samples
>> s = 2*round(rand(N,1))-1; %bpsk modulation
prépare ensuite un SNR varie de 0 à 40 db
>> SNR_DB = 0:1:40;
après que calulating tous les signaux posible:
>> y = zeros(100,length(SNR_DB));
>> for i = 1:41
y(:,i) = awgn(s,SNR_DB(i),'measured');
end
à ce moment la meilleure façon de voir le signal est à l'aide d'un intrigue constellation comme ceci:
>> scatterplot(y(:,1));
>> scatterplot(y(:,41));
vous pouvez voir un mauvais signal 0 bruit db puissance égale en tant que signal et un signal de très bon signal plus grand que 40 bruit DB. Eb/No = Signal de puissance - Db de puissance, donc 0 signifie un bruit de puissance égal à la puissance du signal, 40 db signifie la puissance du signal plus grand que la puissance du bruit
alors pour vous, calculer le mse, matlab en a un la fonction de cette
err = immse (X, Y) description de
exemple
err = immse (X, Y) calcule l'erreur quadratique moyenne (MSE) entre les tableaux X et Y. X et Y peuvent être des tableaux de n'importe quelle dimension, mais doivent être de la même taille et la classe.
donc avec ceci:
>> for i = 1:41
err(i) = immse(s,y(:,i));
end
>> stem(SNR_DB,err)
Placettes, et puisque nous travaillons dans db, il devrait être beeter d'utiliser des axes logarithmiques
Nous vous remercions de votre réponse le long avec les parcelles, cependant peu de choses ne sont pas claires. Pourriez-vous clarifier s'il vous plaît? (1) Comme 'awgn' s'occupe des parties de bruit de signal, la plupart du temps, à partir des articles de recherche, on ne sait pas quelle est la variance du bruit et la variance du signal. Lorsque je rédige des documents, je dois également le mentionner. J'ai donc posé la question. Pouvez-vous dire quelle est la variance de signal et de bruit qui devrait être écrite théoriquement? (2) Je ne comprends pas comment la valeur de 1 vient dans la formule 'A^2 = 1' – SKM
J'ai corrigé la formule pour la question (2), vous avez raison de dire que c'était inexact. Pour la première question, autant que je sache, la chose importante ici est l'énergie par bit du signal et la variance du bruit. – anquegi
Désolé de sembler bruyant.Je ne pouvais pas comprendre ce qui est 'dmin^2/4N0' et je n'ai trouvé aucune référence sur la façon dont vous avez obtenu cette valeur et noise_var = 0.5/(EbN0_lin); % s^2 = N0/2'. Pouvez-vous s'il vous plaît expliquer/fournir une référence comment vous avez obtenu cette valeur. Merci pour votre temps et vos efforts. – SKM