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

 
 
> Не стабилизируется ФАПЧ в Матлаб
Acvarif
сообщение Apr 26 2018, 13:12
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Помогите пожалуйста найти ошибку в Матлаб коде петли ФАПЧ
CODE
%% Тест ФАПЧ

clear all;
close all;

%% Исходные установки

%bit_stream = (rand(1, 20) > 0.5);
bit_stream = [0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1];
N = length(bit_stream);

% Частота семплирования 288 кГц (8 выборок на период)
fs = 288000;
% Несущая частота относительно частоты выборок 36 кГц
f = 0.125;
% Частота доплера
fdop = 0;
% время выборки
Ts = 1/fs;
fprintf('Время выборки Ts %d\n', Ts);
% Амплитуда
A = 1.0;
% Символьная частота Гц
fsim = 3600;
% Количество выборок на период несущей
ns = 1/f;
% Количество выборок необх. для одного символа
% при символьной скорости fsim
tsymbol = fs*f*ns/fsim;
fprintf('Кол. пер. несущ. в одном симв. tsymbol %d\n', fs*f/fsim);
% несущая частота Гц
fref = f*fs;
fprintf('Несущая %d\n', fref);
ttotal = N*tsymbol;

%% Входной сигнал

t = 0;
for i = 1:length(bit_stream)
% phase = pi * bit_stream(i);
phase = 0;
for j = 1:tsymbol
% входной сигнал
BPSK_signal(t+1) = cos(2*pi*(f+fdop)*t + phase);
t = t + 1;
end
end

%% Расчет коэффициентов петлевого фильтра

% натуральная частота Гц
fn = 500;
% коэффициент усиления NCO (по факту минимальный шаг соотв. разр. сетке)
Knco= 1/4096;
% коэфф. усил. фазового детектора 1/cycles
KP = 2;
% демпинг фактор
zeta = 1.0;
% круговая натуральная частота rad/s fn = fn/(2*pi)
wn = 2*pi*fn;
% пропорциональный коэффициент петлевого фильтра
KL= 2*zeta*wn*Ts/(KP*Knco);
% интегральный коэффициент петлевого фильтра
KI= wn^2*Ts^2/(KP*Knco);
% распечатка
fprintf('Пропорц. коэфф KL %d\n', KL);
fprintf('Интегр. коэфф KI %d\n', KI);

% Расчет коэффициентов передаточной функции с замкнутого контура u / ref_phase
% CL(z) = (b0 + b1z^-1)/(a2Z^-2 + a1z^-1 + 1)
b0= KP*KL*Knco;
b1= KP*Knco*(KI - KL);
a1= KP*KL*Knco - 2;
a2= 1 + KP*Knco*(KI - KL);
% коэффициенты петлевого фильтра (numerator denominator)
b = [b0 b1];
a = [1 a1 a2];
fprintf('b %d\n', cool.gif;
fprintf('a %d\n', a);

%% Собственно ФАПЧ

% начальная частота NCO Гц
fnco = fref;
fprintf('fnco Гц %d\n', fnco);
% индексы времени модели
n = 0:ttotal;
% циклы начальной фазы опорного сигнала
init_phase = 0.7;
% циклы фазы опорного сигнала
ref_phase = fref*n*Ts + init_phase;
% циклы фазы опорн. сигн. по mod 1
ref_phase = mod(ref_phase,1);
fprintf('ref_phase %d\n', ref_phase);

u(1) = 0;
ur(1) = 0;
int(1)= 0;
% начальная фазовая ошибка
phase_error(1) = -init_phase;
% начальная значение на входе NCO
vtune(1) = -init_phase*KL;
fprintf('vtune(1) %d\n', vtune(1));

%per = 0.05;

for step = 2:ttotal

% NCO

x = fnco*Ts + u(step-1) + vtune(step-1)*Knco; % циклы NCO фазы
% x = fnco*Ts + u(step-1); % циклы NCO фазы
u(step) = mod(x,1); % циклы NCO фазы по mod 1
s = cos(2*pi*u(step-1)); % NCO sin выход
y(step)= round(2^15*s)/2^15; % квантованный выход синуса NCO

% Fref входной сигнал

% xr = fref*Ts + ur(step-1); % циклы fref
% ur(step) = mod(xr,1); % циклы fref фазы по mod 1
% sr = sin(2*pi*ur(n-1)); % sin выход fref
sr = BPSK_signal(step-1); % sin выход fref
yr(step)= round(2^15*sr)/2^15; % квантованный выход fref

% выход умножителя опорного и NCO
Detect(step) = yr(step)*y(step);

% фазовый детектор

per= ref_phase(step-1) - u(step-1); % ошибка фазы
per= 2*(mod(per+1/2,1) - 1/2); % обертка, если пересечение фаз +/- 1/2 цикла
phase_error(step) = per;

% Петлевой фильтр
int(step) = KI*per + int(step-1); % интегратор
vtune(step) = int(step) + KL*per; % выход петлевого фильтра

end

%% графика

% фазовая ошибка с фазового детектора
figure
plot(phase_error, 'b-', 'LineWidth', 2),grid
axis([0 3 -1 1])
xlabel('t (ms)'),ylabel('phase_error'),title('фазовая ошибка с фаз. детектора')

figure;
plot(Detect, 'r-', 'LineWidth', 2);
hold on;
grid on;
title('Выход умножителя входного и NCO сигналов')

% выход VCO
figure
plot(vtune, 'r-', 'LineWidth', 2),grid
%axis([0 30 -1 5])
title('выходной сигнал петлевого фильтра')

% sin NCO и fref
figure;
plot(yr, 'b-', 'LineWidth', 2);
hold on;
grid on;
plot(y, 'r-', 'LineWidth', 2);
hold on
hold off;
title('Входной и опорный сигналы')

% Частотная характеристика замкнутого контура
figure
u = 0:.1:.9;
f= 10* 10 .^u; % log-scale frequencies
f = [f 10*f 100*f 1000*f];
z = exp(j*2*pi*f/fs); % complex frequency z
CL= (b0 + b1*z.^-1)./(1 + a1*z.^-1 + a2*z.^-2); % closed-loop response
CL_dB= 20*log10(abs(CL));
semilogx(f,CL_dB),grid
xlabel('Hz'),ylabel('CL(z) dB'),title('Частотная характеристика замкнутого контура')

Фапч посчитана по правилам приведенным в букваре pll_notes
Посчитаны интегрирующий и пропорциональный коэффициенты.
Сделана собственно петля с фазовым детектором, интегратором, и NCO.
Но, блин не выходит частота NCO на частоту входного сигнала, даже при нулевой расстройке. Не врубаюсь почему.
Для контроля просто вывел на картинку выход с умножителя опорного на NCO
Вот что получается:
Прикрепленное изображение


Сообщение отредактировал Acvarif - Apr 26 2018, 13:20
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Acvarif   Не стабилизируется ФАПЧ в Матлаб   Apr 26 2018, 13:12
- - petrov   Нарисуйте уже в симулинке вашу петлю из простейших...   Apr 26 2018, 13:31
- - Acvarif   Цитата(petrov @ Apr 26 2018, 16:31) Нарис...   Apr 27 2018, 10:18
- - petrov   Плавайте дальше. Вам даже картинку нарисовали в кн...   Apr 27 2018, 10:55
|- - Acvarif   Цитата(petrov @ Apr 27 2018, 13:55) Плава...   Apr 27 2018, 11:48
- - mvm54   Цитата(Acvarif @ Apr 27 2018, 13:18) ФАПЧ...   May 1 2018, 06:08
- - Acvarif   Цитата(mvm54 @ May 1 2018, 09:08) Acvarif...   May 1 2018, 06:49
- - mvm54   Цитата(Acvarif @ May 1 2018, 09:49) Нет. ...   May 1 2018, 10:03
- - Acvarif   Цитата(mvm54 @ May 1 2018, 13:03) Эффекти...   May 1 2018, 10:46
|- - mvm54   Цитата(Acvarif @ May 1 2018, 13:46) Спаси...   May 1 2018, 13:22
|- - petrov   Цитата(mvm54 @ May 1 2018, 16:12) Eb/No =...   May 1 2018, 13:26
||- - mvm54   Цитата(petrov @ May 1 2018, 16:26) Это не...   May 1 2018, 16:23
||- - petrov   Цитата(mvm54 @ May 1 2018, 19:23) На счет...   May 1 2018, 16:56
||- - Acvarif   Продолжая тему ФАПЧ возникла сложность в понимании...   May 1 2018, 16:56
||- - petrov   Цитата(Acvarif @ May 1 2018, 19:56) Как в...   May 1 2018, 19:22
||- - Acvarif   Цитата(petrov @ May 1 2018, 22:22) Множес...   May 2 2018, 07:42
||- - petrov   Цитата(Acvarif @ May 2 2018, 10:42) Это м...   May 2 2018, 08:28
||- - Acvarif   Цитата(petrov @ May 2 2018, 11:28) Всё на...   May 2 2018, 13:25
||- - Acvarif   Подскажите пожалуйста как в Симулинк можно смодели...   May 11 2018, 07:51
||- - petrov   Цитата(Acvarif @ May 11 2018, 10:51) Подс...   May 11 2018, 08:13
|- - Acvarif   Цитата(mvm54 @ May 1 2018, 16:22) КодSNR ...   May 1 2018, 15:27
- - petrov   Цитата(mvm54 @ May 1 2018, 13:03) Эффекти...   May 1 2018, 11:05
- - Acvarif   Цитата(petrov @ May 1 2018, 14:05) Вот см...   May 1 2018, 12:14
- - petrov   Цитата(Acvarif @ May 1 2018, 15:14) BER э...   May 1 2018, 12:37


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

 


RSS Текстовая версия Сейчас: 7th July 2025 - 05:19
Рейтинг@Mail.ru


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