Перейти к содержанию
    

Модель фазового шума

Для чего тогда эта куча статей по фазовым шумам OFDM? :05:

1. Как понимаю, вы взяли опорный генератор, дюже хорошего качества. Про свч синтезаторы, приемный и передающий, с параметрами -85дб на отстройке 100КГц вы случайно не забыли?

2. Влияние фш зависит от полосы сигнала. -85 на 100, могут быть не заметны для полосы 100МГц, но чувствительны для полосы 450КГц

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Как понимаю, вы взяли опорный генератор, дюже хорошего качества. Про свч синтезаторы, приемный и передающий, с параметрами -85дб на отстройке 100КГц вы случайно не забыли?

2. Влияние фш зависит от полосы сигнала. -85 на 100, могут быть не заметны для полосы 100МГц, но чувствительны для полосы 450КГц

 

Я моделил для полосы 15 кГц частота дискретизации 48 кГц, разнос поднесущих приблизительно 46 Гц диапазон КВ. Моделил следующим образом:

1. Генерировал OFDM на нулевой частоте, никуда не переносил

2. Задавал белый шум, мерил ОСШ

3. Моделил фазу по маске, и умножал Ofdm на экспоненту в степени фазы

4. Мерил ОСШ, брал разность с ОСШ до добавления фазы

 

методика измерений верна? или может я не правильно измеряю?

 

И вообще есть какие то требования к ухудшению ОСШ из за фазовых шумов? какие то ГОСТЫ... на скока допустимо ухудшение ОСШ?

Изменено пользователем Ivan55

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ИМХО не верно

 

3. Моделил фазу по маске, и умножал Ofdm на экспоненту в степени фазы

Фазу по маске? Это как это? Вы должны были задать профиль ФШ в частотной области, затем его синтезировать, затем перейти от частоты ко времени, и только потом моделировать фазу (это фазовая компонента фазового шума). При этом, по хорошему, нужно брать 2 источника ФШ, с разной инициализацией и добавить еще между ними рассинхронизацию по частоте

 

4. Мерил ОСШ, брал разность с ОСШ до добавления фазы

Если ОСШ вы измеряете через энергии то не увидите вы его. Либо измеряйте RxMER либо чутье.

 

И вообще есть какие то требования к ухудшению ОСШ из за фазовых шумов? какие то ГОСТЫ... на скока допустимо ухудшение ОСШ?

Требования - коэффициент системы связи/чувствительность приемника. А уж какими методами и на каких генераторах вы этого добились, будет определять цену вашего изделия.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Фазу по маске? Это как это? Вы должны были задать профиль ФШ в частотной области, затем его синтезировать, затем перейти от частоты ко времени, и только потом моделировать фазу (это фазовая компонента фазового шума). При этом, по хорошему, нужно брать 2 источника ФШ, с разной инициализацией и добавить еще между ними рассинхронизацию по частоте

да так и делал кроме разсинхронизации, это на чтото повлияет если на приеме делать идеальную синхру по частоте?

Если ОСШ вы измеряете через энергии то не увидите вы его. Либо измеряйте RxMER либо чутье.

Возможно. Я в матлабе мерил через библиотеку "snr"... Ну ОСШ это же отношение мощности сигнала к шума либо по амплитуде но будет тоже самое тока в два раза больше...

 

Значит надо было развернуть до созвездия померить MER до ФШ и после, так?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да так и делал кроме разсинхронизации, это на чтото повлияет если на приеме делать идеальную синхру по частоте?

 

Возможно. Я в матлабе мерил через библиотеку "snr"... Ну ОСШ это же отношение мощности сигнала к шума либо по амплитуде но будет тоже самое тока в два раза больше...

 

Значит надо было развернуть до созвездия померить MER до ФШ и после, так?

ну на бумажке формулу напишите, как вращение сигнала по фазе влияет на него (особенно его мощность) и каким местом тут расстройка по частоте, сигнал шум и прочее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вы взяли опорный генератор, дюже хорошего качества.

Не подскажите генератор плохого качества, мне для КВ диапазона

 

нужно брать 2 источника ФШ, с разной инициализацией и добавить еще между ними рассинхронизацию по частоте

сделал посмотрел... Рассинхронизация приводит к вращению созвездия, что я и предпологал, но я анализирую влияние фазовых шумов

рассинхронизация это другая проблема

Изменено пользователем Ivan55

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не подскажите генератор плохого качества, мне для КВ диапазона

[-30 -35 -50 -85] на [1 2 10 100] кгц

 

сделал посмотрел... Рассинхронизация приводит к вращению созвездия, что я и предпологал, но я анализирую влияние фазовых шумов

рассинхронизация это другая проблема

генераторы слишком хорошие у вас, потому и выводы такие) Как точка отсчета - ФШ рождается в синтезаторах частот, а петля восстановления по несущей, компенсирует несушку для сквозного тракта.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

[-30 -35 -50 -85] на [1 2 10 100] кгц

Это что за генератор? где на него посмотреть?)) Это же генератор шума а не несущей))))))

Как точка отсчета - ФШ рождается в синтезаторах частот, а петля восстановления по несущей, компенсирует несушку для сквозного тракта.

У меня мало знаний в этой области. Не могу понять к чему это все и как влияет... Я так понял это вы щас про PLL?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это что за генератор? где на него посмотреть?)) Это же генератор шума а не несущей))))))

это классический, не запетлеванный RF синтезатор, диапазона 5-11Ггц. И мои модемы работают на таких синтезаторах :)

 

У меня мало знаний в этой области. Не могу понять к чему это все и как влияет... Я так понял это вы щас про PLL?

Это я к тому, что ФШ накладывается в разных "местах" спектра. Давят его уже после восстановления несушки, которая компенсирует весь канал. В итоге, если посмотреть ФШ сигнала после восстановления частот, он будет отличен от суммы ФШ передающего и приемного генераторов. При этом часть ФШ будет носить амплитудный, а не фазовый характер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это классический, не запетлеванный RF синтезатор, диапазона 5-11Ггц. И мои модемы работают на таких синтезаторах :)

Ну там то это возможно если полоса 20 МГц и разнос поднесущих килогерц 400

У меня же диапазон 3-30 Мгц полоса сигнала максимум 20 кГц и разнос поднесущих около 40 Гц

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня же диапазон 3-30 Мгц полоса сигнала максимум 20 кГц и разнос поднесущих около 40 Гц

Вот и начните ухудшать свой генератор. В качестве отправной точки возьмите дрожание QPSK точки. Подберите в модели параметры когда дрожание будет +-25 градусов. И потом загоняйте туда OFDM. Это будет плохой, дешманский генератор

 

Ну там то это возможно если полоса 20 МГц и разнос поднесущих килогерц 400

у меня и 1.75 полоса работает :)

 

 

и еще, если вы тестируетесь на QPSK, то вы не практически не увидите влияние ФШ. Нужно смотреть на созвездиях класса 64 кам и выше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и еще, если вы тестируетесь на QPSK, то вы не практически не увидите влияние ФШ. Нужно смотреть на созвездиях класса 64 кам и выше.

 

это понятно, там угол меньше между точками, поэтому чем больше созведие тем больше верхние точки подвержены влиянию ФШ

 

 

у меня и 1.75 полоса работает :)

А между несущими скока кГц?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А между несущими скока кГц?

я на Single Carrier специализируюсь

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прокоментируйте код

 

Написал на основе модели вроде работает. С фазовыми шумами разбираюсь не давно

Модель разработана для оценки влияния фазвых шумов на качество ofdm сигнала

 

Прошу подсказать что не так... как лучше сделать... правильно ли измеряю

 

clc; clear all; close all;

Fs = 48000;         % Частота дискретизации сигнала
SNR = 20;         % ОСШ
Nfft = 1024; Ng = Nfft/4; Nofdm = Ng+Nfft; % Параметры OFDM сигнала
Tofdm = Nfft/Fs;                   % Длительность OFDM сигнала в сек
nCar = 312;     % Кол-во поднесущих
Nbps = 6; M = 2^Nbps;
Nsym = 10000;                % Колличество генерируемых OFDM символов
H_QAM4=modem.qammod('M',M,'PhaseOffset', 0, 'SymbolOrder',...
       'binary', 'InputType', 'bit');                   
Es = 1; A = (3/2/(M-1)*Es);


tx = [];

fft_in = complex(zeros(Nfft,Nsym),zeros(Nfft,Nsym));
QAM = zeros(Nsym,nCar);
In_Data = randi([0 1],Nsym,nCar*log2(M));
QAM = A*modulate(H_QAM4, In_Data');
fft_in(1:nCar/2,:) = QAM(1:nCar/2,:);
fft_in(end-nCar/2+1:end,:) = QAM(nCar/2+1:end,:);
fft_out = ifft(fft_in);
tx = [fft_out(end-Ng+1:end,:); fft_out].';
tx = reshape(tx.', 1, Nsym*Nofdm);


   sig_awgn = awgn(tx, 10*log10(nCar/Nfft) + SNR, 'measured', 'dB');
   out_sig = add_phase_noise(sig_awgn, 300e3, [10 100 1e3 10e3 100e3], [-80 -125 -145 -148 -150], 0);
   rx = add_phase_noise(out_sig, 300e3, [10 100 1e3 10e3 100e3], [-80 -125 -145 -148 -150], 0);


   for k = 1:Nsym
% Демодуляция OFDM с фазовым шумом
       OFDM_rx = rx(1,Ng+(k-1)*Nofdm+1:k*Nofdm);
       carier = fft(OFDM_rx);
       QAM_rx = [carier(1,1:nCar/2) carier(1,end-nCar/2+1:end)];

       OFDM_sig_awgn = sig_awgn(1,Ng+(k-1)*Nofdm+1:k*Nofdm);
       carier = fft(OFDM_sig_awgn);
       QAM_awgn = [carier(1,1:nCar/2) carier(1,end-nCar/2+1:end)];

       OFDM_tx = tx(1,Ng+(k-1)*Nofdm+1:k*Nofdm);
       carier = fft(OFDM_tx);
       QAM_tx = [carier(1,1:nCar/2) carier(1,end-nCar/2+1:end)];

       noise(1,k) = sum(abs(QAM_awgn - QAM_tx).^2);
       SNR_awgn(1,k) = 10*log10(sum(abs(QAM_tx).^2)/noise(1,k));

       noise(1,k) = sum(abs(QAM_rx - QAM_tx).^2);
       SNR_ph(1,k) = 10*log10(sum(abs(QAM_tx).^2)/noise(1,k));
   end

SNR = mean(SNR_ph) - mean(SNR_awgn)

 

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
% [email protected]
%
% 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 = M * sqrt( dF .* P ) .* awgn_P1; %(2*M-2)

% 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

Изменено пользователем Ivan55

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже на правду. Но поворот созвездия нужно скомпенсировать и выделить в отдельный параметр.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...