acvarif 0 26 марта, 2018 Опубликовано 26 марта, 2018 (изменено) · Жалоба Далее вся обработка осуществляется на нулевой частоте, в комплексном виде, с малым количеством отсчётов на символьный интервал. Да. Где-то я это понимаю. В частности про малое количество отсчетов. Но тем не менее для моделирования должна сложиться четкая картинка компонентов и их соединения. Схема Костаса эту картинку дает. всё равно никакого Костаса у вас не будет в итоге, потому что ФАПЧ медленно настраивается. Как-же тогда быть? Никакой другой схемы кроме Костаса пока не встречал... Изменено 27 марта, 2018 пользователем Acvarif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 6 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба Как-же тогда быть? Никакой другой схемы кроме Костаса пока не встречал... Можно почитать для начала RF Architectures and Digital Signal Processing Aspects of Digital Wireless Transceivers - Nezami. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба Если посчитать за какое время сработает петля Костаса, например, при доплере 150 Гц (в воде это движение ~2 м/сек) (несущая 100 кГц) то получится, что для полной синхронизации потребуется время равное 150 символам (битам). Это если шаг изменения частоты NCO будет 1 Гц. 150 бит это ~18 байт преамбулы. Если длительность одного символа 4 периода несущей то это 40 мкс. Всего 150*40 = 6000 мкс. Тоесть полная подстройка произойдет за 6 мс. Это вполне нормально. Но в реальности наверняка шаг подстройки будет меньше чем 1 Гц, например 0.5 Гц. Ну тогда полная синхронизация наступит через 12 мс. Тоже вроде неплохо. Далее пойдет синхросимвол и данные. Для случая с несущей в 100 кГц вроде неплохо. Можно почитать для начала RF Architectures and Digital Signal Processing Aspects of Digital Wireless Transceivers - Nezami. Уже читаю. Глава 5. Думаю для начала всеравно нужно построить петлю Костаса. Приступать сразу к FeedForward наверное неправильно. Ведь так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ataradov 0 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба VCO получает сигал ошибки в качестве контрольного, зачем перестраивать фиксированным шагом? Вам и предлагают ПИ звено поставить чтобы шаг сам нашелся какой нужно для оптимальной настройки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 27 марта, 2018 Опубликовано 27 марта, 2018 (изменено) · Жалоба VCO получает сигал ошибки в качестве контрольного, зачем перестраивать фиксированным шагом? Вам и предлагают ПИ звено поставить чтобы шаг сам нашелся какой нужно для оптимальной настройки. Об этом постоянно думаю. В смысле о самонастраиваемом шаге. Что такое ПИ звено? Изменено 27 марта, 2018 пользователем Acvarif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ataradov 0 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба Что такое ПИ звено? https://ru.wikipedia.org/wiki/%D0%9F%D0%98%...%82%D0%BE%D1%80 ПИ это тоже самое,только без "Д". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 6 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба Уже читаю. Глава 5. Думаю для начала всеравно нужно построить петлю Костаса. Это ещё месяц назад надо было сделать, в симулинке изучить все возможные воздействия и сочетания параметров, непонятно чего тянете, стройте уже. Такими темпами и 5 лет не хватит, на то, что на самом деле надо сделать для вашей задачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба Это ещё месяц назад надо было сделать, в симулинке изучить все возможные воздействия и сочетания параметров, непонятно чего тянете, стройте уже. Такими темпами и 5 лет не хватит, на то, что на самом деле надо сделать для вашей задачи. Ok. Попробую. В простейшем виде. Сформировал BPSK сигнал Я так понимаю сигнал необходимо оцифровать для того, чтобы потом умножать на сигнал формируемый Discrete-Time VCO. Сделал примерно так Ход верный или ерунда? На FPGA я делал-бы именно так... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 6 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба Ok. Попробую. В простейшем виде. Сформировал BPSK сигнал Я так понимаю сигнал необходимо оцифровать для того, чтобы потом умножать на сигнал формируемый Discrete-Time VCO. Сделал примерно так Ход верный или ерунда? На FPGA я делал-бы именно так... Не нужно моделировать сигнал на несущей, этим вы только замедляете модель, увеличивая количество отсчётов, необходимое для представления сигнала на несущей. Ни о какой оцифровке на данном этапе думать не нужно, и про FPGA тоже. Работайте с комплексными сигналами. В общем примеры я выкладывал, смотрите как там сделано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 28 марта, 2018 Опубликовано 28 марта, 2018 · Жалоба Не нужно моделировать сигнал на несущей, этим вы только замедляете модель, увеличивая количество отсчётов, необходимое для представления сигнала на несущей. Ни о какой оцифровке на данном этапе думать не нужно, и про FPGA тоже. Работайте с комплексными сигналами. В общем примеры я выкладывал, смотрите как там сделано. Рад-бы. Но мой уровень симулинк не позволяет сходу это сделать. Ваш пример для меня сложен. А примеры имеющиеся в сети на мой взгляд бестолковые. Их даже в качестве рыбы нельзя использовать. Оторванные от реального железа. Поскольку в симулинк я вообще не умею работать то он вызывает некоторое отторжение. Петлю ФАПЧ попробую сделать в классическом матлабе. %% BPSK модель % Количество бит данных N = 4; % Данные data = [1 0 1 0]; %data = randi(1,N); pData = data*2 - 1; % Несущая частота (100 кГц) fn= 100000; % частота выборок fns = fn*10; % Период выборки Tns = 1/fns; % Период несущей Tn = 1/fn; % Количество периодов несущей на бит-символ M = 4; % Длина пакета данных n = M*length(data); % Текущее время tn = 0:Tns:n*Tn; % Несущая в пакете car = sin(2*pi*fn*tn); %% Преобразование данных в прямоугольные импульсы tpn = 0:Tns:Tn*M; exdata = []; for (i = 1:length(data)) for(j = 1:length(tpn) - 1) exdata = [exdata pData(i)]; end end exdata = [exdata 0]; %% Модуляция % Перенос exdata на несущую mSig = exdata.*car; Теория говорит, что mSig по сути комплексный сигнал. Но в демодуляторе нужно использовать только реальную его часть, которую затем в петле ФАПЧ нужно умножать на комплексную экспоненту. Какой выглядит в коде реальная часть mSig? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ataradov 0 28 марта, 2018 Опубликовано 28 марта, 2018 (изменено) · Жалоба Нужно взять исходный бинарный сигнал, умножить его на синус и косинус частоты Допплера без всяких несущих. Все, получили I и Q. Это сигнал идущий на схему вращающую созвездие. Костас или не Костас - это как захочется. Чтобы визуально увидеть созвездие нужно построить график I(Q). Для нулевого Допплера и в отсутствии шума и прочих искажений это будут 2 точки. При добавлении Допплера это будет окружность. Задача ФАПЧ вернуть эти точки на исходное место и следить, чтобы они там и остались. Изменено 28 марта, 2018 пользователем ataradov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 28 марта, 2018 Опубликовано 28 марта, 2018 · Жалоба Нужно взять исходный бинарный сигнал, умножить его на синус и косинус частоты Допплера без всяких несущих. Все, получили I и Q. Это сигнал идущий на схему вращающую созвездие. Костас или не Костас - это как захочется. Чтобы визуально увидеть созвездие нужно построить график I(Q). Для нулевого Допплера и в отсутствии шума и прочих искажений это будут 2 точки. При добавлении Допплера это будет окружность. Задача ФАПЧ вернуть эти точки на исходное место и следить, чтобы они там и остались. Понял. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 30 марта, 2018 Опубликовано 30 марта, 2018 · Жалоба Не получается. Пытаюсь сформировать синфазную и квадратурную составляющую модулирующего сигнала. %% BPSK модель % Количество бит данных N = 4; % Данные data = [1 0 1 0]; %data = randi(1,N); pData = data*2 - 1; % Несущая частота (100 кГц) fn = 100000; % Доплер fd = 100; % частота выборок fns = fn*8; % Период выборки Tns = 1/fns; % Период несущей Tn = 1/fn; % Количество периодов несущей на бит-символ M = 4; % Длина пакета данных n = M*length(data); % Текущее время tn = 0:Tns:n*Tn; % Несущая в пакете car_sin = sin(2*pi*fn*tn); car_cos = cos(2*pi*fn*tn); %% Преобразование данных в прямоугольные импульсы tpn_i = 0:Tns:Tn*M; exdata_i = []; for (i = 1:length(data)) for(j = 1:length(tpn_i) - 1) exdata_i = [exdata_i pData(i)]; end end exdata_i = [exdata_i 0]; tpn_q = 0:Tns:Tn*M; exdata_q = []; for (i = 1:length(data)) for(j = 1:length(tpn_q) - 1) % exdata_q = [exdata_q pData(i)]; if (length(tpn_q) == 17) exdata_q = [exdata_q 1]; else exdata_q = [exdata_q -1]; end end end exdata_q = [exdata_q 0]; %% Модуляция % Перенос exdata на несущую mSig_i = exdata_i.*car_cos; mSig_q = exdata_q.*car_sin; %% figure; plot(exdata_i, 'r-', 'LineWidth', 4); hold on; grid on; plot(exdata_q, 'b-', 'LineWidth', 4); hold on; plot(car_sin, 'g-'); hold on hold off; Получается ерунда. У Вас похоже это работает clear all; Br = 117.1875*10^3; Fd = Br*8; Fif = 20*10^6; Fdif = 60*10^6; Fdopl = 100; %% === TRANSMITTER === M = pngen(5); %M = 0.5; D = rand(1, 200*8) > 0.5; %D = [1 0 1 0]; CRC = zeros(1, 16); for i=1:length(D), CRC(16) = xor(CRC(16), D(i)); CRC = [CRC(2:16) CRC(1)]; end; FILL = ones(1, 200)*0.5; DATA = [dec2bin(length(D)/8, 11)=='1' D CRC]; packet = [FILL M M diff_enc([0 DATA]) FILL]*2-1; % redescr Ndkr = Fd/Br; pkt = packet(ceil(0.01:1/Ndkr:length(packet))); hch = firls(31, [0 .24 .3 .5]*2, [1 1 0 0]); pktf = filter(hch, [1], pkt); % upsample t1 = upsample4(pktf, 31); t2 = upsample4(t1, 31); pktfu = upsample4(t2, 31)'; % -> IF l = length(pktfu); s = sin(2*pi*(Fif+Fdopl)*(0:1/Fdif:l/Fdif)); c = cos(2*pi*(Fif+Fdopl)*(0:1/Fdif:l/Fdif)); pkts = pktfu.*s(1:l); pktc = pktfu.*c(1:l); %% === TRANSMIT LINE === Ir = awgn(awgn(pkts, 0.05), 0.01); Qr = awgn(awgn(pktc, 0.05), 0.01); %% === GRAPHICS === figure; plot(pkts, 'g-'); grid on; hold on plot(pktc, 'r-'); hold on figure; plot(Ir, 'g-'); grid on; hold on plot(Qr, 'r-'); hold on plot(pktfu, 'r-'); hold on figure; plot(pkt, 'g-'); grid on; hold on clc; % Переданные данные %pkt Но там слишком большое количество данных. Сложно рассмотреть подробности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ataradov 0 30 марта, 2018 Опубликовано 30 марта, 2018 (изменено) · Жалоба Для отладки синхронизации не нужна несущая, ее можно добавить в самом конце. Вот как будут выглядеть I и Q компоненты идеального сигнала после всех переносов частоты. clear all; Br = 400e3; Fd = Br*8; Fdopl = 100; D = (rand(1, 10000) > 0.5) * 2 - 1; % redescr Ndkr = Fd/Br; pkt = D(ceil(0.01:1/Ndkr:length(D))); l = length(pkt); s = sin(2*pi*Fdopl*(0:1/Fd:l/Fd)); c = cos(2*pi*Fdopl*(0:1/Fd:l/Fd)); I = s(1:l) .* pkt; Q = c(1:l) .* pkt; figure; hold on; plot(I); plot(Q, 'r'); figure; hold on; plot(I, Q, '*'); Начинайте с этого кода и добавляйте схемы, которые восстановят этот сигнал. Если запустить с Fdopl = 0, то на второй картинке будет 2 звездочки. Это идеальный конечный результат. Если запустить Fdopl = 100, то будет окружность, образованная вращением этих звездочек. Задача ФАПЧ вернуть звездочки на место и поддерживать их там. Как только заработает с идеальным сигналом, то нужно будет обрезать ему полосу и добавить шум. И отлаживать это. И только после этого можно смотреть на несущие, если сильно хочется. Изменено 30 марта, 2018 пользователем ataradov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 30 марта, 2018 Опубликовано 30 марта, 2018 · Жалоба Для отладки синхронизации не нужна несущая, ее можно добавить в самом конце. Вот как будут выглядеть I и Q компоненты идеального сигнала после всех переносов частоты. Спасибо. Попробую разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться