¿Cómo modelar el ruido de fase?

3

Quiero modelar el ruido de fase. El código a continuación muestra cómo estoy agregando ruido de fase en la señal. Sin embargo, no estoy obteniendo salida correcta. Eso significa que el espectro de la señal debe extenderse en el dominio de la frecuencia, sin embargo, no está cambiando la fase de la señal. Por favor, cualquiera 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
    
pregunta Urban_Yogi

2 respuestas

4

¿Este ejemplo te demuestra que el espectro se propaga? La gráfica espectral usa dB (lo encuentro más conveniente) en el eje Y, así que considérelo una escala logarítmica.

Puede 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 generalmente tiene un carácter 1 / f cerca del operador.

Usé Octave para esto ya que 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]);

    
respondido por el Bimpelrekkie
0

Creo que puedes hacerlo siguiendo estos pasos:

  1. Toma pies de la señal original.

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

  3. Tome el pie derecho al revés, 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
    

otraformatalvez:

sigma=100;t=0:0.01:10;sig=cos(2*pi*4*t);%originalsignalsig3=cos(2*pi*4*t+sigma*randn(1,length(t)));

    
respondido por el SMA.D

Lea otras preguntas en las etiquetas