Дискриминатор частоты с временным сдвигом квадратурных компонент
|
Дискриминатор частоты с временным сдвигом квадратурных компонент известен в англоязычной литературе как cross-product дискриминатор[1].
Дискриминатор использует отсчеты коррелятора с текущего и предыдущего такта работы:
- ,
где
- ,
- ,
- ,
- .
Особенности работы
Возможны различные реализация дискриминатора. На рисунке представлено два варианта, условно названных "Перекрытие" и "Перекрытие отсутствует". Поясним рисунок.
Пусть в некоторый момент времени доступны отсчеты с выхода коррелятора и отсчеты из предыдущей эпохи . На их основе можно сформировать отсчет дискриминатора . Далее возможны варианты.
В случае, если работа идет с "перекрытием", следующий отсчет дискриминатора будет сформирован из новых отсчетов коррелятора и уже использованных в предыдущем шаге . Таким образом, каждое вычисление отсчета дискриминатора использует отсчеты коррелятора, уже использованные в расчете предыдущего значения дискриминатора. Поэтому шум выхода дискриминатора в данном случае оказывается коррелированным, а его СПМ отличается от СПМ белого шума.
Если дискриминатор работает без "перекрытия", для расчета соседних значений выхода дискриминатора каждый раз используются разные корреляционные суммы. В этом случае, шум дискриминатора будет некорреллированным с равномерной СПМ. Однако, темп работы такого дискриминатора ниже в 2 раза: ему нужно "дождаться" следующей пары отсчетов.
Для дискриминатора "с перекрытием" использование статистического эквивалента вида
- , где
при моделировании следящих систем недопустимо, т.к. он не отражает корреляционных свойств. Следует воспользоваться статистическими эквивалентами коррелятора.
Дискриминационная характеристика
Сделано допущение, что .
где , - амплитуда сигнала , - количество отчетов, накапливаемых в корреляторе, - разность истинного и опорного параметров.
Крутизна дискриминационной характеристики при нулевой расстройке по частоте: .
В модели задержка сигнала полагалась известной: .
Дискриминационная характеристика при различных временах накопления:
Флуктуационная характеристика
Получены зависимости СКО шума на выходе дискриминатора от для различных времен накопления. Теоретические кривые пунктирной линией.
Дисперсия шума эквивалентного наблюдения частоты, т.е. шума с выхода дискриминатора, пересчитанного к его входу при нулевой расстройке по частоте:
Сравнение с другими ЧД
Интересно сравнить дисперсию шумов по входу для разных дискриминаторов:
- Собственно дисперсия шума на входе рассматриваемого в этой статье дискриминатора. Обозначим ее как :
- Дисперсия шума на входе оптимального при низком отношении сигнал/шум частотного дискриминатора (тот, который ) [2]. Формула из диссера Корогодина И. В., или, например, из этой статьи. Обозначим ее как :
Вообще говоря, время накопления в корреляторах может быть различно. Если принять равными времена и , получится что дискриминатору с временным сдвигом квадратур (c ) нужны будут квадратуры, накопленные на суммарном времени и разбитые по времени пополам. Для корректности сравнения положим, что во втором дискриминаторе (у которого ) коррелятор копит на времени . Разделим на . После нехитрых вычислений окажется, что
, т. е. или для СКО:.
Таким образом, по дисперсии шумов наблюдается не очень то большая разница между сравниваемыми дискриминаторами. На рисунке ниже приведен график зависимости СКО эквивалентных шумов представленных ЧД от отношения сигнал/шум q_{c/n0}.
convert: no images defined `/tmp/transform_7ba6ae3d2193-1.png' @ error/convert.c/ConvertImageCommand/3044.
Листинг модели
Ниже представлен листинг модели, с которой сняты картинки.
clc
close all
plotDX = 1; %считаем ДХ
plotFX = 0; %считаем дисперсию шумов
if plotDX
N = 3000;
stdn_IQ = 8;
Tc = 0.005;
qcno_dB = 45;
qcno = 10^(qcno_dB/10);
wdop_real = 2*pi*100;
wdop_oporn = [wdop_real-2*pi*(1/Tc):2*pi*(2/Tc)/500:wdop_real + 2*pi*(1/Tc)];
UdFLL = zeros(1, length(wdop_oporn));
A_IQ = stdn_IQ * sqrt(2 * qcno * Tc);
Sd = A_IQ^2*Tc;
for k = 1:N
for j = 1:length(wdop_oporn)
n_I_old = 1*stdn_IQ * randn(1,1);
n_I = 1*stdn_IQ * randn(1,1);
n_Q_old = 1*stdn_IQ * randn(1,1);
n_Q = 1*stdn_IQ * randn(1,1);
phi_real = [pi/3 pi/3 + Tc*wdop_real(1)];
phi_oporn =[pi/4 pi/4 + Tc*wdop_oporn(j)];
m_I_old = A_IQ * sinc((wdop_real(1)-wdop_oporn(j))*Tc/2 /pi)*cos(phi_real(1) - phi_oporn(1) + (wdop_real(1)-wdop_oporn(j))*Tc/2);
m_I = A_IQ * sinc((wdop_real(1)-wdop_oporn(j))*Tc/2 /pi)*cos(phi_real(2) - phi_oporn(2) + (wdop_real(1)-wdop_oporn(j))*Tc/2);
m_Q_old = - A_IQ * sinc((wdop_real(1)-wdop_oporn(j))*Tc/2 /pi)*sin(phi_real(1) - phi_oporn(1) + (wdop_real(1)-wdop_oporn(j))*Tc/2);
m_Q = - A_IQ * sinc((wdop_real(1)-wdop_oporn(j))*Tc/2 /pi)*sin(phi_real(2) - phi_oporn(2) + (wdop_real(1)-wdop_oporn(j))*Tc/2);
I_old = m_I_old + n_I_old;
I = m_I + n_I;
Q_old = m_Q_old + n_Q_old;
Q = m_Q + n_Q;
UdFLL(1, j) = UdFLL(1,j) + I*Q_old - Q*I_old;
end
if ~mod(k, N/10)
fprintf('Progress %d%%\n', k*100/N)
end
end
UdFLL_mean = A_IQ^2*(sinc((wdop_real(1)-wdop_oporn)*Tc/2 /pi)).^2.*sin((wdop_real(1)-wdop_oporn)*Tc);
UdFLL = UdFLL/N;
figure
plot((wdop_real-wdop_oporn)/2/pi,[UdFLL; UdFLL_mean; Sd*(wdop_real-wdop_oporn)]);
ylim([1.1*min(UdFLL_mean) 1.1*max(UdFLL_mean)])
grid on;
xlabel('\Delta f, Гц')
ylabel('M[u_{Д}]')
title(['q = ' num2str(qcno_dB) ' дБГц, T = ' num2str(Tc) ' c'])
end
if plotFX
N = 5000;
stdn_IQ = 8;
Tc = 0.02;
qcno_dB = [10:1:50];
wdop_real = [2*pi*100];
wdop_oporn = [2*pi*100];
D_etta_FLL = zeros(1,length(qcno_dB));
CKO_etta_FLL_teor = nan(1,length(qcno_dB));
for i = 1:length(qcno_dB)
fprintf('qcno_dB = %.0f\n', qcno_dB(i));
qcno = 10^(qcno_dB(i)/10);
A_IQ = stdn_IQ * sqrt(2 * qcno * Tc);
UdFLL = nan(1, N);
for k = 1:N
for j = 1:length(wdop_oporn)
n_I_old = 1*stdn_IQ * randn(1,1);
n_I = 1*stdn_IQ * randn(1,1);
n_Q_old = 1*stdn_IQ * randn(1,1);
n_Q = 1*stdn_IQ * randn(1,1);
phi_real = [pi/3 pi/3 + Tc*wdop_real(1)];
phi_oporn =[pi/4 pi/4 + Tc*wdop_oporn(j)];
m_I_old = A_IQ * sinc((wdop_real(1)-wdop_oporn(j))*Tc/2 /pi)*cos(phi_real(1) - phi_oporn(1) + (wdop_real(1)-wdop_oporn(j))*Tc/2);
m_I = A_IQ * sinc((wdop_real(1)-wdop_oporn(j))*Tc/2 /pi)*cos(phi_real(2) - phi_oporn(2) + (wdop_real(1)-wdop_oporn(j))*Tc/2);
m_Q_old = - A_IQ * sinc((wdop_real(1)-wdop_oporn(j))*Tc/2 /pi)*sin(phi_real(1) - phi_oporn(1) + (wdop_real(1)-wdop_oporn(j))*Tc/2);
m_Q = - A_IQ * sinc((wdop_real(1)-wdop_oporn(j))*Tc/2 /pi)*sin(phi_real(2) - phi_oporn(2) + (wdop_real(1)-wdop_oporn(j))*Tc/2);
I_old = m_I_old + n_I_old;
I = m_I + n_I;
Q_old = m_Q_old + n_Q_old;
Q = m_Q + n_Q;
UdFLL(1, k) = I*Q_old - Q*I_old;
end
end
D_etta_FLL(1,i) = mean((UdFLL - mean(UdFLL)).^2);
CKO_etta_FLL(1,i) = sqrt(D_etta_FLL(1,i));
CKO_etta_FLL_teor(1,i) = sqrt((A_IQ^2*Tc)^2*(1/(qcno*Tc^3))*(1 + 1/(2*qcno*Tc)));
end
figure
plot(qcno_dB, CKO_etta_FLL, 'r*', qcno_dB, CKO_etta_FLL_teor, 'g')
xlabel('q_c/n0, дБГц')
ylabel('\sigma_{вых} ЧД')
grid on
end