Ich möchte Phasenrauschen modellieren. Der folgende Code zeigt, wie ich dem Signal Phasenrauschen hinzufüge. Allerdings bekomme ich keine korrekte Ausgabe. Das heißt, das Signalspektrum sollte sich im Frequenzbereich ausbreiten, es ändert jedoch nicht die Phase des Signals. Bitte, kann mir jemand sagen, wie man Phasenrauschen modelliert.
sigma = 0.5;
t = 0:0.01:1;
sig = cos(2*pi*4*t); % original signal
A = sigma *randn(1,length(t)); % standard deviation of phase noise
sig2 = (A) .* cos(2*pi*4*t + sigma*randn(1,length(t))); % signal with phase noise & amplitud4e noise
figure,plot(t,sig,'r',t,sig2, 'b');
figure, plot(abs(fft(sig,10*length(sig)))); %%% takin absolute value of fft and zero padding
figure, plot(abs(fft(sig2,10*length(sig2))));
return
Beweist Ihnen dieses Beispiel, dass sich das Spektrum ausbreitet? Das Spektraldiagramm verwendet dB (ich finde das bequemer) auf der Y-Achse, also betrachten Sie es als logarithmische Skala.
Sie können sehen, dass ich der Phase VIEL Rauschen hinzufügen muss. Ich denke, das hat damit zu tun, dass das Rauschen, das ich hinzufüge, weißes Rauschen ist. In praktischen Lösungen hat dieses Rauschen in der Regel einen 1/f-Charakter in der Nähe des Trägers.
Ich habe Octave dafür verwendet, da ich kein Matlab zur Verfügung habe (und Octave funktioniert für mich und ist kostenlos :-))
clear all;clc;
Fin =1;
Ttotal = 1000;
nop = 100000;
Tsample = Ttotal/nop;
t = 0:Tsample:Ttotal;
Fsample = nop/Ttotal;
x = sin(2*pi*Fin*t);
xn = sin(2*pi*Fin*(t + 0.1*randn(size(t))));
subplot(2, 1, 1);
points = 500;
plot(Fsample*t(1:points),xn(1:points),'r',Fsample*t(1:points),x(1:points),'b')
NFFT = 2^nextpow2(nop); % Next power of 2 from length of y
SX = fft(x,NFFT)/nop;
SXn = fft(xn,NFFT)/nop;
dBSX = 20 * log( abs(SX));
dBSXn = 20 * log( abs(SXn));
f = Fsample/2*linspace(0,1,NFFT/2+1);
subplot(2, 1, 2);
plot(f,dBSXn(1:NFFT/2+1),'r',f,dBSX(1:NFFT/2+1),'b')
axis([0.5,1.5,-200,0]);
Ich denke, Sie können dies mit diesen Schritten tun:
Nehmen Sie fft des ursprünglichen Signals.
Rauschen als Exponentialterm hinzufügen (durch Multiplikation).
Nehmen Sie inverses fft als verrauschtes Signal.
close all
sigma = 10;
t = 0:0.01:1;
sig = cos(2*pi*4*t); % original signal
A = sigma *randn(1,length(t)); % standard deviation of phase noise
fftsig=fft(sig);
fftsig2=fftsig.*exp(A*1i); %adding noise
sig2=ifft(fftsig2);% signal with phase noise
anders vielleicht:
sigma = 100;
t = 0:0.01:10;
sig = cos(2*pi*4*t); % original signal
sig3 = cos(2*pi*4*t+sigma *randn(1,length(t)));
Urban_Yogi
Bimpelrekkie
Urban_Yogi
Bimpelrekkie
Urban_Yogi
Bimpelrekkie
Urban_Yogi