Quiero modelar el ruido de fase. El siguiente código muestra cómo estoy agregando ruido de fase en la señal. Sin embargo, no obtengo la salida correcta. Eso significa que el espectro de la señal debería expandirse en el dominio de la frecuencia, sin embargo, no cambia la fase de la señal. por favor, alguien puede decirme cómo modelar el ruido de fase.
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
¿Te prueba este ejemplo que el espectro se expande? La gráfica espectral usa dB (lo encuentro más conveniente) en el eje Y, así que considéralo una escala logarítmica.
Puedes ver que necesito agregar MUCHO ruido a la fase. Creo que esto tiene que ver con el hecho de que el ruido que agrego es ruido blanco. En soluciones prácticas, este ruido suele tener un carácter 1/f cerca de la portadora.
Usé Octave para esto porque no tengo Matlab disponible (y Octave funciona para mí y es gratis :-))
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]);
Creo que puedes hacerlo siguiendo estos pasos:
Tome fft de la señal original.
Agregue el ruido como un término exponencial (por multiplicación).
Tome fft inversa, como señal ruidosa.
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
otra manera tal vez:
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)));
yogui_urbano
bimpelrekkie
yogui_urbano
bimpelrekkie
yogui_urbano
bimpelrekkie
yogui_urbano