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

 
 
> Модель фазового шума
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
сообщение Jun 10 2015, 17:12
Сообщение #2


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

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



Цитата(Grizzzly @ Jun 10 2015, 22:39) *
Почему мы формируем спектр требуемого фазового шума, умножая awgn_P1, а не fft(awgn_P1)?

Потому что характер фазового шума синтезаторного оборудования во временной области далек от AWGN, т.е. его отчеты не независимы. Убедится в этом просто, возьмите 2 генератора, : шумящий и эталонный. Засинхронизируйте шумящий от эталонного и вычтите сигналы друг из друга после фазирования. Увидите непосредственно ФШ. Затем сгенерируйте AWGN, пропустите через фильтр и сравните что получилось. Должны сильно удивиться. Ну либо мне повезло и я удивился sm.gif

Что касается вопросов генерации ФШ, то если стоит задача случайно замоделировать фазу несущей (положим дела связные), то модель в вашем посте, свою задачу решает. Но, если брать именно физический смысл ФШ в синтезаторах, то ИМХО нужно генерировать ФШ во временной области, используя специальные модели генерации ФШ. Правда в них напрямую не задашь маску, она задается косвенно.


--------------------
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Jun 10 2015, 17:21
Сообщение #3


Знающий
****

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



Цитата(des00 @ Jun 10 2015, 20:12) *
Потому что характер фазового шума синтезаторного оборудования во временной области далек от AWGN, т.е. его отчеты не независимы.

Спасибо)
Цитата(des00 @ Jun 10 2015, 20:12) *
Но, если брать именно физический смысл ФШ в синтезаторах, то ИМХО нужно генерировать ФШ во временной области, используя специальные модели генерации ФШ. Правда в них напрямую не задашь маску, она задается косвенно.

А не могли бы подсказать, как они называются?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Grizzzly   Модель фазового шума   Jun 10 2015, 15:39
|- - 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   Фазовый шум - вариация фазы генератора, причем тут...   Feb 11 2016, 11:11
|- - Ivan55   Цитата(des00 @ Feb 11 2016, 14:11) Фазовы...   Feb 11 2016, 11:32
|- - des00   Цитата(Ivan55 @ Feb 11 2016, 18:32) В так...   Feb 11 2016, 12:08
|- - Ivan55   Цитата(des00 @ Feb 11 2016, 15:08) Наверн...   Feb 11 2016, 12:20
|- - des00   Цитата(Ivan55 @ Feb 11 2016, 20:20) точне...   Feb 11 2016, 15:27
|- - Ivan55   Цитата(des00 @ Feb 11 2016, 18:27) это-то...   Feb 11 2016, 17:12
|- - des00   Цитата(Ivan55 @ Feb 12 2016, 01:12) Было ...   Feb 16 2016, 05:59
|- - Fat Robot   Очень впечатляет. Вы могли бы объяснить природу эт...   Feb 16 2016, 08:04
|- - 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 Текстовая версия Сейчас: 24th June 2025 - 18:22
Рейтинг@Mail.ru


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