реклама на сайте
подробности

 
 
> Модель фазового шума
Grizzzly
сообщение Jun 10 2015, 15:39
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Тут коллеги моделируют фазовый шум. Разбирают код, взятый с MATLAB File Exchange: http://www.mathworks.com/matlabcentral/fil...844-phase-noise
Сам код:
CODE
function Sout = add_phase_noise( Sin, Fs, phase_noise_freq, phase_noise_power, VALIDATION_ON )
%
% function Sout = add_phase_noise( Sin, Fs, phase_noise_freq, phase_noise_power, VALIDATION_ON )
%
% Oscillator Phase Noise Model
%
% INPUT:
% Sin - input COMPLEX signal
% Fs - sampling frequency ( in Hz ) of Sin
% phase_noise_freq - frequencies at which SSB Phase Noise is defined (offset from carrier in Hz)
% phase_noise_power - SSB Phase Noise power ( in dBc/Hz )
% VALIDATION_ON - 1 - perform validation, 0 - don't perfrom validation
%
% OUTPUT:
% Sout - output COMPLEX phase noised signal
%
% NOTE:
% Input signal should be complex
%
% EXAMPLE ( How to use add_phase_noise ):
% Assume SSB Phase Noise is specified as follows:
% -------------------------------------------------------
% | Offset From Carrier | Phase Noise |
% -------------------------------------------------------
% | 1 kHz | -84 dBc/Hz |
% | 10 kHz | -100 dBc/Hz |
% | 100 kHz | -96 dBc/Hz |
% | 1 MHz | -109 dBc/Hz |
% | 10 MHz | -122 dBc/Hz |
% -------------------------------------------------------
%
% Assume that we have 10000 samples of complex sinusoid of frequency 3 KHz
% sampled at frequency 40MHz:
%
% Fc = 3e3; % carrier frequency
% Fs = 40e6; % sampling frequency
% t = 0:9999;
% S = exp(j*2*pi*Fc/Fs*t); % complex sinusoid
%
% Then, to produce phase noised signal S1 from the original signal S run follows:
%
% Fs = 40e6;
% phase_noise_freq = [ 1e3, 10e3, 100e3, 1e6, 10e6 ]; % Offset From Carrier
% phase_noise_power = [ -84, -100, -96, -109, -122 ]; % Phase Noise power
% S1 = add_phase_noise( S, Fs, phase_noise_freq, phase_noise_power );

% Version 1.0
% Alex Bur-Guy, October 2005
% alex@wavion.co.il
%
% Revisions:
% Version 1.5 - Comments. Validation.
% Version 1.0 - initial version

% NOTES:
% 1) The presented model is a simple VCO phase noise model based on the following consideration:
% If the output of an oscillator is given as V(t) = V0 * cos( w0*t + phi(t) ),
% then phi(t) is defined as the phase noise. In cases of small noise
% sources (a valid assumption in any usable system), a narrowband modulation approximation can
% be used to express the oscillator output as:
%
% V(t) = V0 * cos( w0*t + phi(t) )
%
% = V0 * [cos(w0*t)*cos(phi(t)) - sin(w0*t)*sin(phi(t)) ]
%
% ~ V0 * [cos(w0*t) - sin(w0*t)*phi(t)]
%
% This shows that phase noise will be mixed with the carrier to produce sidebands around the carrier.
%
%
% 2) In other words, exp(j*x) ~ (1+j*x) for small x
%
% 3) Phase noise = 0 dBc/Hz at freq. offset of 0 Hz
%
% 4) The lowest phase noise level is defined by the input SSB phase noise power at the maximal
% freq. offset from DC. (IT DOES NOT BECOME EQUAL TO ZERO )
%
% The generation process is as follows:
% First of all we interpolate (in log-scale) SSB phase noise power spectrum in M
% equally spaced points (on the interval [0 Fs/2] including bounds ).
%
% After that we calculate required frequency shape of the phase noise by X(m) = sqrt(P(m)*dF(m))
% and after that complement it by the symmetrical negative part of the spectrum.
%
% After that we generate AWGN of power 1 in the freq domain and multiply it sample-by-sample to
% the calculated shape
%
% Finally we perform 2*M-2 points IFFT to such generated noise
% ( See comments inside the code )
%
% 0 dBc/Hz
% \ /
% \ /
% \ /
% \P dBc/Hz /
% .\ /
% . \ /
% . \ /
% . \____________________________________________/ /_ This level is defined by the phase_noise_power at the maximal freq. offset from DC defined in phase_noise_freq
% . \
% |__| _|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__ (N points)
% 0 dF Fs/2 Fs
% DC
%
%
% For some basics about Oscillator phase noise see:
% http://www.circuitsage.com/pll/plldynamics.pdf
%
% http://www.wj.com/pdf/technotes/LO_phase_noise.pdf

if nargin < 5
VALIDATION_ON = 0;
end

% Check Input
error( nargchk(4,5,nargin) );

if ~any( imag(Sin(:)) )
error( 'Input signal should be complex signal' );
end
if max(phase_noise_freq) >= Fs/2
error( 'Maximal frequency offset should be less than Fs/2');
end

% Make sure phase_noise_freq and phase_noise_power are the row vectors
phase_noise_freq = phase_noise_freq(:).';
phase_noise_power = phase_noise_power(:).';
if length( phase_noise_freq ) ~= length( phase_noise_power )
error('phase_noise_freq and phase_noise_power should be of the same length');
end

% Sort phase_noise_freq and phase_noise_power
[phase_noise_freq, indx] = sort( phase_noise_freq );
phase_noise_power = phase_noise_power( indx );

% Add 0 dBc/Hz @ DC
if ~any(phase_noise_freq == 0)
phase_noise_power = [ 0, phase_noise_power ];
phase_noise_freq = [0, phase_noise_freq];
end

% Calculate input length
N = prod( size( Sin ) );

% Define M number of points (frequency resolution) in the positive spectrum
% (M equally spaced points on the interval [0 Fs/2] including bounds),
% then the number of points in the negative spectrum will be M-2
% ( interval (Fs/2, Fs) not including bounds )
%
% The total number of points in the frequency domain will be 2*M-2, and if we want
% to get the same length as the input signal, then
% 2*M-2 = N
% M-1 = N/2
% M = N/2 + 1
%
% So, if N is even then M = N/2 + 1, and if N is odd we will take M = (N+1)/2 + 1
%
if rem(N,2), % N odd
M = (N+1)/2 + 1;
else
M = N/2 + 1;
end


% Equally spaced partitioning of the half spectrum
F = linspace( 0, Fs/2, M ); % Freq. Grid
dF = [diff(F) F(end)-F(end-1)]; % Delta F


% Perform interpolation of phase_noise_power in log-scale
intrvlNum = length( phase_noise_freq );
logP = zeros( 1, M );
for intrvlIndex = 1 : intrvlNum,
leftBound = phase_noise_freq(intrvlIndex);
t1 = phase_noise_power(intrvlIndex);
if intrvlIndex == intrvlNum
rightBound = Fs/2;
t2 = phase_noise_power(end);
inside = find( F>=leftBound & F<=rightBound );
else
rightBound = phase_noise_freq(intrvlIndex+1);
t2 = phase_noise_power(intrvlIndex+1);
inside = find( F>=leftBound & F<rightBound );
end
logP( inside ) = ...
t1 + ( log10( F(inside) + realmin) - log10(leftBound+ realmin) ) / ( log10( rightBound + realmin) - log10( leftBound + realmin) ) * (t2-t1);
end
P = 10.^(real(logP)/10); % Interpolated P ( half spectrum [0 Fs/2] ) [ dBc/Hz ]

% Now we will generate AWGN of power 1 in frequency domain and shape it by the desired shape
% as follows:
%
% At the frequency offset F(m) from DC we want to get power Ptag(m) such that P(m) = Ptag/dF(m),
% that is we have to choose X(m) = sqrt( P(m)*dF(m) );
%
% Due to the normalization factors of FFT and IFFT defined as follows:
% For length K input vector x, the DFT is a length K vector X,
% with elements
% K
% X(k) = sum x(n)*exp(-j*2*pi*(k-1)*(n-1)/K), 1 <= k <= K.
% n=1
% The inverse DFT (computed by IFFT) is given by
% K
% x(n) = (1/K) sum X(k)*exp( j*2*pi*(k-1)*(n-1)/K), 1 <= n <= K.
% k=1
%
% we have to compensate normalization factor (1/K) multiplying X(k) by K.
% In our case K = 2*M-2.

% Generate AWGN of power 1

if ~VALIDATION_ON
awgn_P1 = ( sqrt(0.5)*(randn(1, M) +1j*randn(1, M)) );
else
awgn_P1 = ( sqrt(0.5)*(ones(1, M) +1j*ones(1, M)) );
end

% Shape the noise on the positive spectrum [0, Fs/2] including bounds ( M points )
X = (2*M-2) * sqrt( dF .* P ) .* awgn_P1;

% Complete symmetrical negative spectrum (Fs/2, Fs) not including bounds (M-2 points)
X( M + (1:M-2) ) = fliplr( conj(X(2:end-1)) );

% Remove DC
X(1) = 0;

% Perform IFFT
x = ifft( X );

% Calculate phase noise
phase_noise = exp( j * real(x(1:N)) );

% Add phase noise
if ~VALIDATION_ON
Sout = Sin .* reshape( phase_noise, size(Sin) );
else
Sout = 'VALIDATION IS ON';
end

if VALIDATION_ON
figure;
plot( phase_noise_freq, phase_noise_power, 'o-' ); % Input SSB phase noise power
hold on;
grid on;
plot( F, 10*log10(P),'r*-'); % Input SSB phase noise power
X1 = fft( phase_noise );
plot( F, 10*log10( ( (abs(X1(1:M))/max(abs(X1(1:M)))).^2 ) ./ dF(1) ), 'ks-' );% generated phase noise exp(j*x)
X2 = fft( 1 + j*real(x(1:N)) );
plot( F, 10*log10( ( (abs(X2(1:M))/max(abs(X2(1:M)))).^2 ) ./ dF(1) ), 'm>-' ); % approximation ( 1+j*x )
xlabel('Frequency [Hz]');
ylabel('dBc/Hz');
legend( ...
'Input SSB phase noise power', ...
'Interpolated SSB phase noise power', ...
'Positive spectrum of the generated phase noise exp(j*x)', ...
'Positive spectrum of the approximation ( 1+j*x )' ...
);
end


У них возник вопрос по строчке:
Код
X = (2*M-2) * sqrt( dF .* P ) .* awgn_P1;


Почему мы формируем спектр требуемого фазового шума, умножая awgn_P1, а не fft(awgn_P1)?
Сейчас задумался, вроде бы действительно надо перейти в частотную область, чтобы получить равномерный спектр, затем его умножить на характеристику генератора, а потом сделать ifft. Или же можно считать, что awgn_P1 уже в частотной области, поскольку ограничения на вид распределения у нас нет?

Нашел статейку. Там как раз к отсчетам АБГШ применяется fft. Как всё-таки правильно?

Сообщение отредактировал Grizzzly - Jun 10 2015, 15:40
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
des00
сообщение Feb 11 2016, 11:11
Сообщение #2


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Фазовый шум - вариация фазы генератора, причем тут спектральная плотность мощности этого генератора?

Шум после фильтра скорее всего моделирует вариацию фазы мгновенную.


--------------------
Go to the top of the page
 
+Quote Post
Ivan55
сообщение Feb 11 2016, 11:32
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 212
Регистрация: 17-01-12
Пользователь №: 69 640



Цитата(des00 @ Feb 11 2016, 14:11) *
Фазовый шум - вариация фазы генератора, причем тут спектральная плотность мощности этого генератора?


В таком случае было бы все просто, белый шум в экспоненту и все
Но тут они задают профиль фазового шума фильтром, тем самым видимо моделируют уровень фазовых шумов при отстройке в N Гц
Могу ошибаться, я тут новичок в моделировании фазовых шумов laughing.gif
Go to the top of the page
 
+Quote Post
des00
сообщение Feb 11 2016, 12:08
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Ivan55 @ Feb 11 2016, 18:32) *
В таком случае было бы все просто, белый шум в экспоненту и все

Вот как раз белый шум, так добавлять нельзя. Вы не получите адекватности. У вас будут просто хаотичные скачки фазы, которые не предсказать, не получить тренд. Адекватность можно получить либо используя винеровский шум, либо фильтруя белый. Наверное они подобрали фильтр, похожий на какой то стандартный генератор и сделали вот такую модель.


--------------------
Go to the top of the page
 
+Quote Post
Ivan55
сообщение Feb 11 2016, 12:20
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 212
Регистрация: 17-01-12
Пользователь №: 69 640



Цитата(des00 @ Feb 11 2016, 15:08) *
Наверное они подобрали фильтр, похожий на какой то стандартный генератор и сделали вот такую модель.

как я понял из инфы в гугле все так и делают, задают фильтром параметры генератора

Цитата(Ivan55 @ Feb 11 2016, 15:16) *
как я понял из инфы в гугле все так и делают, задают фильтром параметры генератора

точнее даже не фильтр а спектральная маска. Задают функцию лоренца в частотной области потом обратное фурье и умножают отсчеты шума

Сообщение отредактировал Ivan55 - Feb 11 2016, 12:21
Go to the top of the page
 
+Quote Post
des00
сообщение Feb 11 2016, 15:27
Сообщение #6


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Ivan55 @ Feb 11 2016, 20:20) *
точнее даже не фильтр а спектральная маска. Задают функцию лоренца в частотной области потом обратное фурье и умножают отсчеты шума

это-то понятно. в начале темы я писал чем чреват похожий подход, при моделировании во временной области.

ЗЫ. если вам интересно, через пару дней смогу сделать несколько скринов или гифку фазового шума с реального генератора. посмотрите как он выглядит во временной области и сравните с тем, что видите у себя в модели.


--------------------
Go to the top of the page
 
+Quote Post
Ivan55
сообщение Feb 11 2016, 17:12
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 212
Регистрация: 17-01-12
Пользователь №: 69 640



Цитата(des00 @ Feb 11 2016, 18:27) *
это-то понятно. в начале темы я писал чем чреват похожий подход, при моделировании во временной области.

Да читал. Спасибоsm.gif
Цитата(des00 @ Feb 11 2016, 18:27) *
ЗЫ. если вам интересно, через пару дней смогу сделать несколько скринов или гифку фазового шума с реального генератора. посмотрите как он выглядит во временной области и сравните с тем, что видите у себя в модели.

Было бы интересноsm.gif неверно не только мне)) Спасибо!
Go to the top of the page
 
+Quote Post
des00
сообщение Feb 16 2016, 05:59
Сообщение #8


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Ivan55 @ Feb 12 2016, 01:12) *
Было бы интересноsm.gif неверно не только мне)) Спасибо!

https://youtu.be/0DzZy5ldpaA

QAM256 без коррекции -> с коррекцией -> фазовый шум синтезаторов (зеленый)/отфильтрованный фазовый шум синтезаторов (красный)



--------------------
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Feb 16 2016, 08:04
Сообщение #9


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Очень впечатляет. Вы могли бы объяснить природу этих шумов в вашем случае?

Цитата(des00 @ Feb 16 2016, 09:59) *
https://youtu.be/0DzZy5ldpaA

QAM256 без коррекции -> с коррекцией -> фазовый шум синтезаторов (зеленый)/отфильтрованный фазовый шум синтезаторов (красный)

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Grizzzly   Модель фазового шума   Jun 10 2015, 15:39
- - des00   Цитата(Grizzzly @ Jun 10 2015, 22:39) Поч...   Jun 10 2015, 17:12
|- - Grizzzly   Цитата(des00 @ Jun 10 2015, 20:12) Потому...   Jun 10 2015, 17:21
|- - des00   Цитата(Grizzzly @ Jun 11 2015, 00:21) А н...   Jun 10 2015, 17:26
|- - Grizzzly   Цитата(des00 @ Jun 10 2015, 20:26) Уже то...   Jun 10 2015, 17:28
- - serjj   ЦитатаУвидите непосредственно ФШ. Затем сгенерируй...   Jun 10 2015, 17:35
|- - des00   Цитата(serjj @ Jun 11 2015, 01:35) Ну ФШ ...   Jun 10 2015, 17:40
- - des00   Немного интересных документов. Есть еще, но весят ...   Jun 11 2015, 04:26
|- - Кнкн   Цитата(des00 @ Jun 11 2015, 07:26) Немног...   Jun 11 2015, 06:12
|- - des00   Цитата(Кнкн @ Jun 11 2015, 14:12) Тема ин...   Jun 11 2015, 06:54
||- - andyp   Цитата(des00 @ Jun 11 2015, 09:54) Не зна...   Jun 11 2015, 07:00
||- - des00   Цитата(andyp @ Jun 11 2015, 15:00) А нель...   Jun 11 2015, 07:16
||- - des00   Цитата(des00 @ Jun 11 2015, 15:16) ок, ча...   Jun 11 2015, 17:49
||- - andyp   Цитата(des00 @ Jun 11 2015, 20:49) http:/...   Jun 11 2015, 18:28
||- - Grizzzly   Цитата(des00 @ Jun 11 2015, 20:49) http:/...   Jun 11 2015, 18:33
|- - des00   Цитата(Кнкн @ Jun 11 2015, 14:12) Может б...   Jun 12 2015, 03:22
|- - Кнкн   Цитата(des00 @ Jun 12 2015, 06:22) положи...   Jun 15 2015, 07:08
|- - Ivan55   Всем добрый день! Заинтересовался данной темой...   Feb 11 2016, 10:02
- - andyp   Цитата(Grizzzly @ Jun 10 2015, 18:39) У н...   Jun 12 2015, 19:50
|- - Grizzzly   Цитата(andyp @ Jun 12 2015, 22:50) Подума...   Jun 14 2015, 10:10
|- - des00   Цитата(Fat Robot @ Feb 16 2016, 16:04) Вы...   Feb 16 2016, 08:23
|- - Ivan55   фазовый шум описывается Винеровским процессом: ph(...   Apr 19 2016, 08:08
- - KalashKS   Похоже на правду. По дному символу такое созвездие...   Apr 19 2016, 08:37
|- - Ivan55   Цитата(KalashKS @ Apr 19 2016, 12:37) По ...   Apr 19 2016, 08:45
- - KalashKS   Да, правильно.   Apr 19 2016, 08:46
|- - Ivan55   Цитата(KalashKS @ Apr 19 2016, 12:46) Да,...   Apr 19 2016, 08:48
- - serjj   О влиянии фазового шума в OFDM модеме мне понравил...   Apr 25 2016, 06:34
|- - des00   Цитата(serjj @ Apr 25 2016, 14:34) при ус...   Apr 25 2016, 08:36
- - serjj   Цитатавот сделать это на разных, дешевых, шумящих ...   Apr 27 2016, 21:02
|- - des00   Цитата(serjj @ Apr 28 2016, 04:02) Ну есл...   Apr 28 2016, 01:32
- - serjj   Можно проделать мысленный эксперимент. Допустим ес...   Apr 28 2016, 13:29
|- - des00   Цитата(serjj @ Apr 28 2016, 21:29) Можно ...   Apr 28 2016, 13:45
- - serjj   Цитатаа еще если pRX11 == pRx22, т.е. двухканальны...   Apr 28 2016, 14:00
|- - des00   Цитата(serjj @ Apr 28 2016, 21:00) Спорти...   Apr 29 2016, 02:38
|- - Ivan55   Добрый день! возвращаясь к данной теме возник...   Jun 22 2016, 08:54
- - serjj   Имеется в виду ширина спектра генератора по уровню...   Jun 23 2016, 17:04
|- - Ivan55   Добрый день всем! Возвращаясь к данной теме ...   Jul 22 2016, 12:01
|- - des00   Цитата(Ivan55 @ Jul 22 2016, 19:01) Для ч...   Jul 23 2016, 05:44
|- - Ivan55   Цитата(des00 @ Jul 23 2016, 09:44) 1. Как...   Jul 26 2016, 06:26
||- - des00   ИМХО не верно Цитата(Ivan55 @ Jul 26 2016, 1...   Jul 26 2016, 06:49
||- - Ivan55   Цитата(des00 @ Jul 26 2016, 10:49) Фазу п...   Jul 26 2016, 07:22
||- - des00   Цитата(Ivan55 @ Jul 26 2016, 14:22) да та...   Jul 26 2016, 07:27
|- - Ivan55   Цитата(des00 @ Jul 23 2016, 08:44) вы взя...   Jul 28 2016, 06:14
|- - des00   Цитата(Ivan55 @ Jul 28 2016, 13:14) Не по...   Jul 28 2016, 09:15
|- - Ivan55   Цитата(des00 @ Jul 28 2016, 12:15) [-30 -...   Jul 28 2016, 09:33
|- - des00   Цитата(Ivan55 @ Jul 28 2016, 16:33) Это ч...   Jul 28 2016, 09:40
|- - Ivan55   Цитата(des00 @ Jul 28 2016, 12:40) это кл...   Jul 28 2016, 09:48
|- - des00   Цитата(Ivan55 @ Jul 28 2016, 16:48) У мен...   Jul 28 2016, 10:08
|- - Ivan55   Цитата(des00 @ Jul 28 2016, 13:08) и еще,...   Jul 28 2016, 10:46
|- - des00   Цитата(Ivan55 @ Jul 28 2016, 17:46) А меж...   Jul 28 2016, 10:53
|- - Ivan55   RE: Модель фазового шума   Aug 2 2016, 06:35
- - KalashKS   Похоже на правду. Но поворот созвездия нужно скомп...   Aug 2 2016, 08:40
- - Ivan55   Доброго дня всем! Возможно щас глупость спрош...   Aug 16 2016, 08:45
- - Ivan55   Можно еще так вопрос задать есть структурная схем...   Aug 17 2016, 08:13
- - Ivan55   Цитата(Ivan55 @ Aug 17 2016, 12:13) Можно...   Aug 22 2016, 05:07
- - Ivan55   И снова здравствуйте!) есть такой вопрос в ...   Jan 24 2017, 11:51


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th June 2025 - 02:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01521 секунд с 7
ELECTRONIX ©2004-2016