¿Cómo modelar el ruido de fase?

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

Respuestas (2)

¿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]);

ingrese la descripción de la imagen aquí

Hola IC_designer, gracias por tu respuesta. Pero cuando tomo fft de su señal y señal agregada de ruido de fase. el espectro en el dominio de la frecuencia sigue siendo el mismo.
Creo que el espectro cambia, vea la mitad inferior de la trama incluida. La traza azul es la señal sin ruido, la roja con ruido. Cerca de la portadora, la señal es similar, pero lejos de la portadora, el ruido de fondo aumenta. Que esperas ver ??
Hola IC_designer_Rimpelbekkie, espero ver la ampliación del espectro. Dado que el ruido de fase crea un ensanchamiento en ambos lados de la frecuencia central, espero ver un ensanchamiento del espectro en el dominio de la frecuencia. Creé una simulación ideal de radar fmcw y quiero que no sea ideal, por lo tanto, quiero agregar ruido de fase y ruido de amplitud.
Ja, también trabajo en el radar (FMCW) :-) Creo que estás en el camino correcto, pero necesitarás agregar ruido 1/f a la señal. El carácter 1/f se encarga de que la frecuencia se propague cerca de la portadora, que es lo que desea ver. Así es también como se comporta el ruido en los osciladores. Si busca en Google "phasenoise", se pueden descargar algunos artículos interesantes. Esto explicará el comportamiento 1/f del ruido de fase.
ah perfecto. hay un intercambio de archivos en mathworks para el ruido de fase. mathworks.com/matlabcentral/fileexchange/8844-phase-noise Sin embargo, tampoco obtengo el resultado correcto. Necesito desesperadamente esta solución ya que tengo fecha límite para mi tesis: P
Desafortunadamente, este no es un tema que pueda entenderse fácilmente en poco tiempo :-( ¿Hizo que su señal de entrada fuera lo suficientemente larga como para obtener la resolución de frecuencia requerida después de FFT? Generando un 1/f (ruido rosa) en el dominio del tiempo también no me parece tan obvio :-(
Sí. mi señal de entrada es lo suficientemente larga. Me refiero a una literatura ( link.springer.com/chapter/10.1007/978-3-319-03659-5_7 ) ahora para el ruido de fase de modelado.

Creo que puedes hacerlo siguiendo estos pasos:

  1. Tome fft de la señal original.

  2. Agregue el ruido como un término exponencial (por multiplicación).

  3. 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
    

Resumen de Resultados

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)));

ingrese la descripción de la imagen aquí

Hola SMA.D. Gracias por su respuesta. si ve el fft de ambas señales, es lo mismo. Debería haber una dispersión del espectro cuando agrego ruido de fase en la señal.
Editado! tal vez...
Gracias SMA.D. Pero esto ya lo he hecho. Me refiero a la forma en que editaste.