Дискриминатор частоты с временным сдвигом квадратурных компонент — различия между версиями
Korogodin (обсуждение | вклад) (→Дискриминационная характеристика) |
Dneprov (обсуждение | вклад) (→Сравнение с другими ЧД) |
||
(не показаны 44 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
− | + | {{TOCright}} | |
− | + | ||
− | <math>u_{ | + | Дискриминатор частоты '''с временным сдвигом квадратурных компонент''' известен в англоязычной литературе как cross-product дискриминатор<ref name="NavipediaFLL">http://www.navipedia.net/index.php/Frequency_Lock_Loop_(FLL)</ref>. |
+ | |||
+ | Дискриминатор использует отсчеты коррелятора с текущего и предыдущего такта работы: <br /> | ||
+ | |||
+ | :<math>u_{D \omega, k} = I_k(\widetilde{\tau}_k,\widetilde{\omega}_{d\,k})Q_{k-1}(\widetilde{\tau}_{k-1},\widetilde{\omega}_{d\,k-1}) - Q_k(\widetilde{\tau}_k,\widetilde{\omega}_{d\,k})I_{k-1}(\widetilde{\tau}_{k-1},\widetilde{\omega}_{d\,k-1})</math>, | ||
где <br /> | где <br /> | ||
− | <math>I_k(\widetilde{\tau}_k,\widetilde{\omega}_{d\,k}) = \sum_{l=1}^{L}y(t_{k,l})h_{c}(t_{k,l}-\widetilde{\tau}_k)\mbox{cos}(\omega_0t_{k,l}+\widetilde{\omega}_{d\,k}(l-1)T_d))</math>,<br /> | + | :<math>I_k(\widetilde{\tau}_k,\widetilde{\omega}_{d\,k}) = \sum_{l=1}^{L}y(t_{k,l})h_{c}(t_{k,l}-\widetilde{\tau}_k)\mbox{cos}(\omega_0t_{k,l}+\widetilde{\omega}_{d\,k}(l-1)T_d))</math>,<br /> |
− | <math>Q_k(\widetilde{\tau}_k,\widetilde{\omega}_{d\,k}) = \sum_{l=1}^{L}y(t_{k,l})h_{c}(t_{k,l}-\widetilde{\tau}_k)\mbox{sin}(\omega_0t_{k,l}+\widetilde{\omega}_{d\,k}(l-1)T_d))</math>.<br /> | + | :<math>Q_k(\widetilde{\tau}_k,\widetilde{\omega}_{d\,k}) = \sum_{l=1}^{L}y(t_{k,l})h_{c}(t_{k,l}-\widetilde{\tau}_k)\mbox{sin}(\omega_0t_{k,l}+\widetilde{\omega}_{d\,k}(l-1)T_d))</math>,<br /> |
+ | |||
+ | :<math>I_{k-1}(\widetilde{\tau}_{k-1},\widetilde{\omega}_{d\,{k-1}}) = \sum_{l=1}^{L}y(t_{k-1,l})h_{c}(t_{k-1,l}-\widetilde{\tau}_{k-1})\mbox{cos}(\omega_0t_{k-1,l}+\widetilde{\omega}_{d\,k-1}(l-1)T_d))</math>,<br /> | ||
+ | :<math>Q_{k-1}(\widetilde{\tau}_{k-1},\widetilde{\omega}_{d\,k-1}) = \sum_{l=1}^{L}y(t_{k-1,l})h_{c}(t_{k-1,l}-\widetilde{\tau}_{k-1})\mbox{sin}(\omega_0t_{k-1,l}+\widetilde{\omega}_{d\,k-1}(l-1)T_d))</math>.<br /> | ||
+ | |||
+ | == Особенности работы == | ||
+ | [[Файл:20151028_Про перекрытие.png|мини|справа|600пкс|Варианты работы дискриминатора]] | ||
+ | |||
+ | Возможны различные реализация дискриминатора. На рисунке представлено два варианта, условно названных "Перекрытие" и "Перекрытие отсутствует". Поясним рисунок. | ||
+ | |||
+ | Пусть в некоторый момент времени <math>t_{k}</math> доступны отсчеты с выхода коррелятора <math>I_k, Q_k</math> и отсчеты из предыдущей эпохи <math>I_{k-1}, Q_{k-1}</math>. На их основе можно сформировать отсчет дискриминатора <math>u_{D\omega,k}</math>. Далее возможны варианты. | ||
+ | |||
+ | В случае, если работа идет с "перекрытием", следующий отсчет дискриминатора <math>u_{D\omega,k+1}</math> будет сформирован из новых отсчетов коррелятора <math>I_{k+1}, Q_{k+1}</math> и уже использованных в предыдущем шаге <math>I_k, Q_k</math>. Таким образом, каждое вычисление отсчета дискриминатора использует отсчеты коррелятора, уже использованные в расчете предыдущего значения дискриминатора. Поэтому шум выхода дискриминатора в данном случае оказывается коррелированным, а его СПМ отличается от СПМ белого шума. | ||
+ | |||
+ | Если дискриминатор работает без "перекрытия", для расчета соседних значений выхода дискриминатора каждый раз используются разные корреляционные суммы. В этом случае, шум дискриминатора будет некорреллированным с равномерной СПМ. Однако, темп работы такого дискриминатора ниже в 2 раза: ему нужно "дождаться" следующей пары отсчетов. | ||
+ | |||
+ | Для дискриминатора "с перекрытием" использование статистического эквивалента вида | ||
+ | |||
+ | :<math>u_{D\omega,k} = S_{D}(\omega_k - \widetilde{\omega_k}) + n_{D,k}</math>, где <math>n_{D,k} \sim N(0, D_\eta)</math> | ||
+ | |||
+ | при моделировании следящих систем недопустимо, т.к. он не отражает корреляционных свойств. Следует воспользоваться статистическими эквивалентами коррелятора. | ||
+ | |||
+ | <br clear="all" /> | ||
== Дискриминационная характеристика == | == Дискриминационная характеристика == | ||
Строка 12: | Строка 37: | ||
Сделано допущение, что <math>\varepsilon_{\omega,k-1} = \varepsilon_{\omega,k}</math>. | Сделано допущение, что <math>\varepsilon_{\omega,k-1} = \varepsilon_{\omega,k}</math>. | ||
− | <math>U(\varepsilon_\omega) = A_{IQ}^2\rho(\varepsilon_{\tau,k})\rho(\varepsilon_{\tau,k-1})\mbox{sinc}^2(\varepsilon_{\omega,k-1}T/2)\mbox{sin}(\varepsilon_{\omega,k-1}T),</math> | + | :<math>U(\varepsilon_\omega) = A_{IQ}^2\rho(\varepsilon_{\tau,k})\rho(\varepsilon_{\tau,k-1})\mbox{sinc}^2(\varepsilon_{\omega,k-1}T/2)\mbox{sin}(\varepsilon_{\omega,k-1}T),</math> |
где <math>A_{IQ} = \frac{AL}{2}</math>, <math>A</math> - амплитуда сигнала <math>y(t_{k,l})</math>, <math>L</math> - количество отчетов, накапливаемых в корреляторе, <math>\varepsilon</math> - разность истинного и опорного параметров. | где <math>A_{IQ} = \frac{AL}{2}</math>, <math>A</math> - амплитуда сигнала <math>y(t_{k,l})</math>, <math>L</math> - количество отчетов, накапливаемых в корреляторе, <math>\varepsilon</math> - разность истинного и опорного параметров. | ||
− | Крутизна дискриминационной характеристики <math> | + | Крутизна дискриминационной характеристики при нулевой расстройке по частоте: <math>S_D = A_{IQ}^2T</math>. |
В модели задержка сигнала полагалась известной: <math>\rho(\varepsilon_{\tau,k}), \rho(\varepsilon_{\tau,k-1}) = 1</math>. | В модели задержка сигнала полагалась известной: <math>\rho(\varepsilon_{\tau,k}), \rho(\varepsilon_{\tau,k-1}) = 1</math>. | ||
− | <center><gallery widths=" | + | Дискриминационная характеристика при различных временах накопления: |
− | Файл: | + | <center><gallery mode="packed" widths="400px" heights="400px"> |
− | Файл: | + | Файл:20151028_DhChd_new.png|Дискриминационная характеристика при T=1 мс |
+ | Файл:20151028_DhChd_newT5ms.png|Дискриминационная характеристика при T=5 мс | ||
</gallery></center> | </gallery></center> | ||
Строка 29: | Строка 55: | ||
Получены зависимости СКО шума на выходе дискриминатора от <math>q_{c/n_0}</math> для различных времен накопления. Теоретические кривые пунктирной линией. | Получены зависимости СКО шума на выходе дискриминатора от <math>q_{c/n_0}</math> для различных времен накопления. Теоретические кривые пунктирной линией. | ||
− | [[File:20132504 CKO(q,T) ChD.png|300x300px|frame|center| | + | [[File:20132504 CKO(q,T) ChD.png|300x300px|frame|center|]] <br /> |
+ | |||
+ | Дисперсия шума эквивалентного наблюдения частоты, т.е. шума с выхода дискриминатора, пересчитанного '''к его входу''' при нулевой расстройке по частоте: <br /> | ||
+ | |||
+ | :<math>D_{\widetilde{\eta}_\omega} = \frac{1}{q_{c/n_0}T^3}(1+\frac{1}{2q_{c/n_0}T}).</math> | ||
+ | |||
+ | === Сравнение с другими ЧД === | ||
+ | |||
+ | Интересно сравнить дисперсию шумов по входу для различных дискриминаторов: | ||
+ | |||
+ | * Собственно дисперсия шума на входе рассматриваемого в этой статье cross дискриминатора. Обозначим ее как <math>D_1</math>: | ||
+ | |||
+ | :<math> D_1 = D_{\widetilde{\eta}_\omega} = \frac{1}{q_{c/n_0}T_1^3}(1+\frac{1}{2q_{c/n_0}T_1}).</math> | ||
+ | |||
+ | * Дисперсия шума на входе оптимального при низком отношении сигнал/шум частотного дискриминатора (тот, который <math>I_kI'_k+Q_kQ'_k</math>) <ref name="OptimalFLL">[[Публикация:Корогодин 2013 Потенциальные характеристики оценивания частоты в некогерентном приемнике]]</ref>, <ref name="KorPhD">[[Публикация:Корогодин 2013 Разработка алгоритмов обработки сигналов СНС в аппаратуре определения угловой ориентации объектов]]</ref>. Обозначим ее как <math>D_2</math>: | ||
+ | |||
+ | :<math> D_2 = D_{\widetilde{\eta}_\omega} = \frac{6}{q_{c/n_0}T_2^3}(1+\frac{1}{q_{c/n_0}T_2}).</math> | ||
+ | |||
+ | Пусть cross дискриминатор реализован по схеме без перекрытия, тогда <math>T_2 = 2T_1</math> и | ||
+ | |||
+ | :<math>\frac{D_2}{D_1} = \frac{6}{8}</math>, | ||
+ | |||
+ | или для СКО: | ||
+ | |||
+ | :<math>\sigma_2 = 0.866*\sigma_1</math>. | ||
+ | |||
+ | Дискриминатор cross проигрывает <math>I_kI'_k+Q_kQ'_k</math> около 15% по СКО во всем диапазоне с/ш. На рисунке ниже приведен график зависимости СКО эквивалентных шумов представленных ЧД от отношения сигнал/шум <math>q_{c/n0}</math>. | ||
+ | |||
+ | [[File:20151029_Сравнение СКО.png|центр|500px]] | ||
+ | |||
+ | |||
+ | Далее построены нормированные на крутизну дискриминационные характеристики сравниваемых дискриминаторов. Как и при сравнении дисперсий шума, полагаем <math>T_2 = 2T_1</math>. | ||
+ | |||
+ | [[File:20151103_FreqDiskrCompare.png|центр|500px]] | ||
+ | |||
+ | |||
+ | Из приведенного рисунка следует вывод, что апертура обоих частотных дискриминаторов равна <br /> | ||
+ | <math>A_\omega=\frac{2}{T_u}</math>.<br /> | ||
+ | <math>T_u</math> - темп работы дискриминатора. Ранее дискриминаторы сравнивались при условии <math>T_u = T_2 = 2T_1</math>, т.е. при одинаковом темпе работы. При анализе "cross" дискриминатора нужно помнить, что <math>T_1</math> в формулах его характеристик - это время когерентного накопления в корреляторе, а темп работы самого дискриминатора по схеме без перекрытия <math>T_u = 2T_1</math>. | ||
+ | |||
+ | == Листинг модели == | ||
+ | Ниже представлен листинг модели, с которой сняты картинки. | ||
+ | {{Hider | ||
+ | |title = Листинг модели | ||
+ | |content = <source lang = matlab> | ||
+ | clear all | ||
+ | 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 | ||
+ | </source> | ||
+ | |frame-style = border:1px solid Plum | ||
+ | |title-style = color:black;background-color:lavender;font-weight:bold;text-align:left | ||
+ | |content-style = color:black;background-color:ghostwhite;text-align:center | ||
+ | |hidden = yes | ||
+ | }} | ||
− | |||
− | + | == Ссылки == | |
+ | <references/> | ||
[[Категория:Дискриминаторы]] | [[Категория:Дискриминаторы]] | ||
[[Категория:Оценивание частоты]] | [[Категория:Оценивание частоты]] |
Текущая версия на 15:22, 3 ноября 2015
|
Дискриминатор частоты с временным сдвигом квадратурных компонент известен в англоязычной литературе как cross-product дискриминатор[1].
Дискриминатор использует отсчеты коррелятора с текущего и предыдущего такта работы:
- ,
где
- ,
- ,
- ,
- .
[править] Особенности работы
Возможны различные реализация дискриминатора. На рисунке представлено два варианта, условно названных "Перекрытие" и "Перекрытие отсутствует". Поясним рисунок.
Пусть в некоторый момент времени доступны отсчеты с выхода коррелятора и отсчеты из предыдущей эпохи . На их основе можно сформировать отсчет дискриминатора . Далее возможны варианты.
В случае, если работа идет с "перекрытием", следующий отсчет дискриминатора будет сформирован из новых отсчетов коррелятора и уже использованных в предыдущем шаге . Таким образом, каждое вычисление отсчета дискриминатора использует отсчеты коррелятора, уже использованные в расчете предыдущего значения дискриминатора. Поэтому шум выхода дискриминатора в данном случае оказывается коррелированным, а его СПМ отличается от СПМ белого шума.
Если дискриминатор работает без "перекрытия", для расчета соседних значений выхода дискриминатора каждый раз используются разные корреляционные суммы. В этом случае, шум дискриминатора будет некорреллированным с равномерной СПМ. Однако, темп работы такого дискриминатора ниже в 2 раза: ему нужно "дождаться" следующей пары отсчетов.
Для дискриминатора "с перекрытием" использование статистического эквивалента вида
- , где
при моделировании следящих систем недопустимо, т.к. он не отражает корреляционных свойств. Следует воспользоваться статистическими эквивалентами коррелятора.
[править] Дискриминационная характеристика
Сделано допущение, что .
где , - амплитуда сигнала , - количество отчетов, накапливаемых в корреляторе, - разность истинного и опорного параметров.
Крутизна дискриминационной характеристики при нулевой расстройке по частоте: .
В модели задержка сигнала полагалась известной: .
Дискриминационная характеристика при различных временах накопления:
[править] Флуктуационная характеристика
Получены зависимости СКО шума на выходе дискриминатора от для различных времен накопления. Теоретические кривые пунктирной линией.
Дисперсия шума эквивалентного наблюдения частоты, т.е. шума с выхода дискриминатора, пересчитанного к его входу при нулевой расстройке по частоте:
[править] Сравнение с другими ЧД
Интересно сравнить дисперсию шумов по входу для различных дискриминаторов:
- Собственно дисперсия шума на входе рассматриваемого в этой статье cross дискриминатора. Обозначим ее как :
- Дисперсия шума на входе оптимального при низком отношении сигнал/шум частотного дискриминатора (тот, который ) [2], [3]. Обозначим ее как :
Пусть cross дискриминатор реализован по схеме без перекрытия, тогда и
- ,
или для СКО:
- .
Дискриминатор cross проигрывает около 15% по СКО во всем диапазоне с/ш. На рисунке ниже приведен график зависимости СКО эквивалентных шумов представленных ЧД от отношения сигнал/шум .
convert: no images defined `/tmp/transform_4a1803cb2802-1.png' @ error/convert.c/ConvertImageCommand/3044.
Далее построены нормированные на крутизну дискриминационные характеристики сравниваемых дискриминаторов. Как и при сравнении дисперсий шума, полагаем .
Из приведенного рисунка следует вывод, что апертура обоих частотных дискриминаторов равна
.
- темп работы дискриминатора. Ранее дискриминаторы сравнивались при условии , т.е. при одинаковом темпе работы. При анализе "cross" дискриминатора нужно помнить, что в формулах его характеристик - это время когерентного накопления в корреляторе, а темп работы самого дискриминатора по схеме без перекрытия .
[править] Листинг модели
Ниже представлен листинг модели, с которой сняты картинки.
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