Jump to content

    

Nik_Su

Участник
  • Content Count

    12
  • Joined

  • Last visited

Community Reputation

0 Обычный

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Я об этом не подумал кстати. Просто нужно иметь образ сигнала s(t) = I(t) + Q(t); И на основе него сравнивать. Большое спасибо за помощь. я делал qam модуляцию м последовательности. Создавал большой массив из нулей добавлял в рандомное место кусок данного сигнала, добавлял шум и производил корреляцию.
  2. Большое спасибо за объяснение. Сегодня попробую сделать. Вопрос наверно глупый, но не знаю как на него тогда ответить, если мы принимает сигнал, умножаем его на cos и sin фильтруем получаем I и Q компоненты, из них мы можем получить огибающую и фазу сигнала через diff(арктангенс(Q/I)), а вот например для корреляции и поиска сигнала данный метод менее эффективен получается потому что необходимо восстанавливать сигнал опять?
  3. Спасибо, не увидел. Я пытаюсь по I и Q компонентам восстановить реальный сигнал. Просто в примерах которые я видел данное действие возможно, а у меня не получается реализовать. Также я бы хотел восстановить сигнал и сделать корреляцию чтобы показать, что я принял именно этот сигнал, это уже я написал для М последовательности. Даже применить корреляцию к лчм сигналу, чтобы быть уверенным что это именно он, хотя и сдвинутый по времени.
  4. Здравствуйте, стоит задача в приеме ЛЧМ сигнала с помощью квадратурного демодулятора. Я почитал статьи, Цифровую обработку сигналов от Лайонса и на сайте dsplib про кавадратурный прием и методы обработки. И попытался реализовать, задал такие характеристики как начальная частота 900 Гц конечная 3600. Частота гетеродина cos и sin (900 + 3600)/2 = 2250 как я понял частота должна быть такая. Ведь полосовой сигнал будет смещаться на нулевую частоту как сказано во всех книгах. Все сделал, даже получилось выделить огибающую, а вот с восстановлением сигнала ни как не получается, пытался применить формулы atan2(Q,I), diff(atan(Q./I)), diff(atan2(Q, I)) ничего не получается. Восстановление сигнала мне необходимо для того, чтобы сделать свертку и доказать, что сигнал принят правильно и это именно он. Прикладываю виды сигналов получившиеся при моделировании. Заранее больше спасибо за критику и ответы!!!! К теме прикладываю код который реализовал в матлаб. function Recive_CHIRP Fd = 10e6;%Частота дискретизации td = 1/Fd;%шаг дискретизации time_imp = 0.1;%Время импульса t = 0:td:time_imp-td;%Время моделирования сигнала Fsig_start = 900;%Частота сигнала начальная Fsig_stop = 3600;%Частота сигнала конечная %Радиолокационный сигнал CHIRP_signl = chirp(t,Fsig_start,time_imp,Fsig_stop); %%========================================================================= %%========================================================================= %%========================================================================= need_points = 0:td:(time_imp+(time_imp*4)); sequence_imp = zeros(1,length(need_points)); for j = 1:1:length(CHIRP_signl) sequence_imp(1,j+(length(t)*2)) = CHIRP_signl(j); end %Отрисовываем импульс во временной области subplot(3,1,1); plot(sequence_imp); legend('ЛЧМ сигнал в частотной области'); %%========================================================================= %%========================================================================= %%========================================================================= %%========================================================================= %%========================================================================= %%========================================================================= %Сигналы гетеродинов SIG_GET_COS = cos(2*pi*((900+3600)/2).*need_points + (2*pi/6)); SIG_GET_SIN = sin(2*pi*((900+3600)/2).*need_points + (2*pi/6)); % Отрисовка сигналов гетеродина % figure(); % plot(SIG_GET_COS); % hold on % plot(SIG_GET_SIN); % hold off %%========================================================================= %%========================================================================= %%========================================================================= %%========================================================================= %%========================================================================= %%========================================================================= %Перемножение входного сигнала с сигналами гетеродина плюс фильтрация %получившегося сигнала Hd = FilterForChirp; I_signal = filter(Hd,sequence_imp.*SIG_GET_COS); Q_signal = filter(Hd,sequence_imp.*SIG_GET_SIN); %Отрисовка I и Q сигнала %figure(); subplot(3,1,2); plot(I_signal) hold on plot(Q_signal) hold off legend('Синфазная компонента','Квадратурная компонента'); %%========================================================================= %%========================================================================= %%========================================================================= %%========================================================================= %%========================================================================= %%========================================================================= %Получение огибающей сигнала Sout = sqrt((I_signal.*I_signal) + (Q_signal.*Q_signal)); %Построение на одном графике реального сигнала и его огибающей %figure(); subplot(3,1,3); plot(sequence_imp); hold on plot(Sout./abs(max(Sout))); legend('ЛЧМ импульс','Огибающая импульса'); figure(); %plot(diff(atan2(degrees2dms(I_signal),degrees2dms(Q_signal)))/2*pi); %plot(Q_signal+I_signal); env = I_signal + 1j*Q_signal; mod = real(env.*exp(2j*pi*200*need_points)); plot(abs((hilbert(mod).*exp(-2j*pi*200.*need_points)/sqrt(2)))); %plot((atan(Q_signal./I_signal))); % hold on % plot(I_signal) % hold on % plot(Q_signal) % hold off end код фильтра function Hd = FilterForChirp %FILTERFORCHIRP Returns a discrete-time filter object. % MATLAB Code % Generated by MATLAB(R) 9.7 and DSP System Toolbox 9.9. % Generated on: 06-Jun-2021 16:48:03 % Butterworth Lowpass filter designed using FDESIGN.LOWPASS. % All frequency values are in Hz. Fs = 10000000; % Sampling Frequency Fpass = 2600; % Passband Frequency Fstop = 3000; % Stopband Frequency Apass = 1; % Passband Ripple (dB) Astop = 60; % Stopband Attenuation (dB) match = 'stopband'; % Band to match exactly % Construct an FDESIGN object and call its BUTTER method. h = fdesign.lowpass(Fpass, Fstop, Apass, Astop, Fs); Hd = design(h, 'butter', 'MatchExactly', match); % [EOF]
  5. разработать приемник для анализа беспроводных каналов связи в диапазоне 2.4-2.5 ГГц. Приемник должен быть модульный. Поэтому и переходного модуля от ГГц к МГц нет, он будет разрабатываться в последнюю очередь. Основная задача состоит в том, чтобы разработать плату АЦП + FPGA + Ethernet.
  6. Это я подобрал обвязку для АЦП. Входные разъемы можно изменить на более дешевые, в альтиуме были я и для начала поставил. Так вопрос не о том почему он дешевый, а как работает)) Как я описал у них внутри примерно 100МГц ацп стоят лили нет? Если моя математика не верная, тогда вы можете объяснить как должно работать? Количество точек для FFT на период как минимум надо 8, либо я что то не понимаю.
  7. Здравствуйте. Я пишу диплом в данный момент и тема конечно размытая и до конца не сформированная, хотя уже работаем над ней год. Попробую описать в двух словах, направление "инфокоммуникационные технологии и системы связи" специальность "Многоканальные телекоммуникационные системы", в теории должен быть приемник для приема и обработки данных в диапазоне 2.4 до 2.5 ГГц. Так вот, начал разработку, сформировал сигнал в matlab используя wlan пакет, выделил его из шумов используя мат аппарат квадратурного демодулятора, получил данные, хорошо. Пришло время заниматься схемотехникой, разобрался с топологией, подобрал АЦП (как раз задавал вопрос на форуме по тактированию АЦП на 250МГц ADS4249). Подобрал всю обвязку, тактовый генератор, питание + рассеиваемую мощность чтобы не сгорели микросхемы LDO, входной буфер. По расчетам схема рабочая. В данном проекте еще должна учувствовать FPGA которая будет принимать данные с АЦП (с FPGA еще не разбирался какую выбрать). После чего мне задали вопрос "а как работает обычный роутер который стоит 50$?", моя разработка будет стоить гораздо дороже чем 50$. Соответственно и на защите диплома мне зададут такой же вопрос. Так как же работают обычные wi-fi роутеры либо те же esp32 которые могут работать с wi-fi. В теории стоит фильтр, усилитель,..., квадратурный демодулятор, фильтр, АЦП. на каких частотах должен работать АЦП в esp32 чтобы принимать сигнал полосой в 20МГц? При квадратурной демодуляции I/Q будет по 10 МГц полоса, соответственно АЦП необходимо работать на частотах ~100МГц, а там их два. И если там стоят такие АЦП почему же они стоят так дешево? А второй вопрос, куда может пригодиться такой диплом, хотя бы обоснование данной разработки сумма обвязки + АЦП получается 270$ + 350-500$ FPGA + интерфейс для передачи данных на компьютер, я использую много гигабитных PHY контроллеров где то 200$, общая стоимость получается 920$ не считая заказа платы, которая на резоните выйдет в районе 12-15к рублей (может гораздо дороже). Есть ли смысл заниматься дальше? Либо лучше взять трансивер от AD либо TI на нем делать данную разработку?
  8. Да, меня данная строчка очень удивила, почему в данных преобразователях указывается от 12кГц до 20кГц, хотя они рассчитаны например на 250МГц?
  9. При написании диплома была поставлена задача по разработке системы для возможности приема и обработке информации в диапазоне 2.5 ГГц, точнее чтобы она была многофункциональная. Начал с того, что разобрался с квадратурной демодуляцией, построил модель в матлаб, сформировал в wirless пакете сигнал и выделил его (все в теории с использованием матлаба). Окей, пришла пора заниматься схемотехникой и тут начались проблемы. Я на основе статей и гостов задал конкретные характеристики системы, начал подбор АЦП, но так как я еще совсем совсем совсем тупой в этих делах (прочитал пару статей от TI и AD еще пару статей на resirch gate) и не смог в полной мере (как мне кажется) охватить весь спектр характеристики которые мне необходимы для подбора ацп. В общем я задал: На основе datasheet'а jitter т.к. везде пишут о том, что это сильно влияет на отношение сигнал шум SFDR кол-о бит есть в рекомендациях IEEE можно 12 но лучше 14 частота дискретизации была выбрана 250МГЦ, для возможности оцифровки широкополосных сигналов при условии использования I/Q демодулятора также к данной системе предъявлено требование применения субдеискретизации (Если это нужно, модуль с квадратурным демодулятором, фильтрами т.д. снимается, устанавливается другой входной модуль перед АЦП и погнали). Также вчера я нашел примерно с такими же характеристиками АЦП двухканальный от TI ADS4249, а тактирование его предполагается используя Silicon Labs 545BBA250M000BBG, т.к. система должна принимать широкую полосу частот, было принято решение не ставить трансформатор для развязки ацп по входу, а использовать операционный усилитель ADA4930-2. Наверно нужно было начать с такого описания. Почему же нужно использовать lvpecl?
  10. Здравствуйте, в данный момент разрабатываю систему по оцифровки аналоговых данных и сравнив несколько АЦП, было принято решение использовать AD9642. Подобрал входной буфер удовлетворяющий характеристикам системы, питание, а с системой тактирования возникли проблемы. На плате должны стоять два АЦП, которые отцифровывают сигнал с квадратурного демодулятора. Два ядра АЦП в одном корпусе не удовлетворили характеристикам, пришлось ставить два АЦП. Так вот в чем вопрос, есть два данных АЦП, тактирующий сигнал должен иметь jitter как минимум 0.05 ps. Я не нашел многоканальных микросхем с такими характеристиками jitter, есть только одноканальные. Будут ли какие то проблемы, если тактирование двух АЦП будет производиться от двух разных микросхем ?
  11. Здравствуйте. Стоит задача в разработке приемника с квадратурным демодулятором. В разработке входных цепей приемников особенно для частот 2.4 ГГц ничего не понимаю, но есть еще время чтобы разобраться. Хотелось бы получить наставления о том с чего начать и какую литературу изучить, чтобы можно было спроектировать входную цепь до АЦП, сколько преобразований частоты делается, либо можно реализовать на одном квадратурном демодуляторе.Также есть вопрос по квадратурной демодуляции. Изучив теорию на сайте dsplib.org, прочитав главу из книги "Цифровая обработка сигналов" Ричарда Лайонса, а также статьи в интернете и научные статьи, я разобрался в сути квадратурной демодуляции, но остался не решенный вопрос. Везде говорится, что спектр переносится на нулевую частоту и каждая компонента I и jQ содержат половину спектра реального сигнала. Так вот, если нам необходимо принять Chirp сигнал, предположим частота которого находится в пределах от 100 до 200 Гц, то для того, чтобы сместить данный спектр на нулевую частоту необходимо использовать частоту гетеродина 150 Гц, но если применить данное соотношение, мы получим наложение 100 - 150 = -50 на 200-150 = 50 и полный ужас, и возник вопрос каким методом подбирается частота гетеродина для квадратурного демодулятора в диапазоне 2.5 ГГц, литература и гугл ответов мне не дали. Также по второму вопросу хотелось бы получить литературу и наставления.Заранее большое спасибо!!!
  12. Здравствуйте. Есть задание построить QPSK сигнала и построить его глазковую диаграмму на выходе модулятора, данные действия необходимо произвести в matlab. Функциями matlab для формирования данного сигнала пользоваться нельзя. Используя формулы, я сформировал отсчеты сигнала (см.ниже.) %-------------Сформированнные отсчеты сигналов с разной фазой-------------- %+45 mod_funct(1,:)=[0.707106781186548 0.634393284163646 0.555570233019602 0.471396736825998 0.382683432365090 0.290284677254462 0.195090322016128 0.0980171403295608 6.12323399573677e-17 -0.0980171403295607 -0.195090322016128 -0.290284677254462 -0.382683432365090 -0.471396736825998 -0.555570233019602 -0.634393284163645 -0.707106781186548 -0.773010453362737 -0.831469612302545 -0.881921264348355 -0.923879532511287 -0.956940335732209 -0.980785280403230 -0.995184726672197 -1 -0.995184726672197 -0.980785280403230 -0.956940335732209 -0.923879532511287 -0.881921264348355 -0.831469612302546 -0.773010453362737 -0.707106781186548 -0.634393284163645 -0.555570233019602 -0.471396736825998 -0.382683432365090 -0.290284677254462 -0.195090322016129 -0.0980171403295605 -1.83697019872103e-16 0.0980171403295601 0.195090322016128 0.290284677254462 0.382683432365089 0.471396736825998 0.555570233019602 0.634393284163646 0.707106781186547 0.773010453362737 0.831469612302545 0.881921264348355 0.923879532511287 0.956940335732209 0.980785280403230 0.995184726672197 1 0.995184726672197 0.980785280403230 0.956940335732209 0.923879532511287 0.881921264348355 0.831469612302546 0.773010453362737 0.707106781186548]; %-45 mod_funct(2,:)=[0.707106781186548 0.773010453362737 0.831469612302545 0.881921264348355 0.923879532511287 0.956940335732209 0.980785280403230 0.995184726672197 1 0.995184726672197 0.980785280403230 0.956940335732209 0.923879532511287 0.881921264348355 0.831469612302545 0.773010453362737 0.707106781186548 0.634393284163646 0.555570233019602 0.471396736825998 0.382683432365090 0.290284677254462 0.195090322016129 0.0980171403295608 1.22464679914735e-16 -0.0980171403295606 -0.195090322016128 -0.290284677254462 -0.382683432365090 -0.471396736825998 -0.555570233019602 -0.634393284163645 -0.707106781186548 -0.773010453362737 -0.831469612302545 -0.881921264348355 -0.923879532511287 -0.956940335732209 -0.980785280403230 -0.995184726672197 -1 -0.995184726672197 -0.980785280403230 -0.956940335732209 -0.923879532511287 -0.881921264348355 -0.831469612302546 -0.773010453362737 -0.707106781186548 -0.634393284163646 -0.555570233019602 -0.471396736825998 -0.382683432365090 -0.290284677254463 -0.195090322016129 -0.0980171403295605 -2.44929359829471e-16 0.0980171403295600 0.195090322016128 0.290284677254462 0.382683432365089 0.471396736825998 0.555570233019602 0.634393284163646 0.707106781186547]; %+135 mod_funct(3,:)=[-0.707106781186548 -0.773010453362737 -0.831469612302545 -0.881921264348355 -0.923879532511287 -0.956940335732209 -0.980785280403230 -0.995184726672197 -1 -0.995184726672197 -0.980785280403230 -0.956940335732209 -0.923879532511287 -0.881921264348355 -0.831469612302545 -0.773010453362737 -0.707106781186548 -0.634393284163646 -0.555570233019602 -0.471396736825998 -0.382683432365090 -0.290284677254462 -0.195090322016129 -0.0980171403295608 -1.22464679914735e-16 0.0980171403295606 0.195090322016128 0.290284677254462 0.382683432365090 0.471396736825998 0.555570233019602 0.634393284163645 0.707106781186548 0.773010453362737 0.831469612302545 0.881921264348355 0.923879532511287 0.956940335732209 0.980785280403230 0.995184726672197 1 0.995184726672197 0.980785280403230 0.956940335732209 0.923879532511287 0.881921264348355 0.831469612302546 0.773010453362737 0.707106781186548 0.634393284163646 0.555570233019602 0.471396736825998 0.382683432365090 0.290284677254463 0.195090322016129 0.0980171403295605 2.44929359829471e-16 -0.0980171403295600 -0.195090322016128 -0.290284677254462 -0.382683432365089 -0.471396736825998 -0.555570233019602 -0.634393284163646 -0.707106781186547]; %-135 mod_funct(4,:)=[-0.707106781186548 -0.634393284163646 -0.555570233019602 -0.471396736825998 -0.382683432365090 -0.290284677254462 -0.195090322016128 -0.0980171403295608 -6.12323399573677e-17 0.0980171403295607 0.195090322016128 0.290284677254462 0.382683432365090 0.471396736825998 0.555570233019602 0.634393284163645 0.707106781186548 0.773010453362737 0.831469612302545 0.881921264348355 0.923879532511287 0.956940335732209 0.980785280403230 0.995184726672197 1 0.995184726672197 0.980785280403230 0.956940335732209 0.923879532511287 0.881921264348355 0.831469612302546 0.773010453362737 0.707106781186548 0.634393284163645 0.555570233019602 0.471396736825998 0.382683432365090 0.290284677254462 0.195090322016129 0.0980171403295605 1.83697019872103e-16 -0.0980171403295601 -0.195090322016128 -0.290284677254462 -0.382683432365089 -0.471396736825998 -0.555570233019602 -0.634393284163646 -0.707106781186547 -0.773010453362737 -0.831469612302545 -0.881921264348355 -0.923879532511287 -0.956940335732209 -0.980785280403230 -0.995184726672197 -1 -0.995184726672197 -0.980785280403230 -0.956940335732209 -0.923879532511287 -0.881921264348355 -0.831469612302546 -0.773010453362737 -0.707106781186548]; %-------------------------------------------------------------------------- На один период я взял 64 отсчета. После этого я получаю данные в двоичном коде из файла и перевожу их в дибиты. После чего формирую выходной сигнал используя дибиты и сформированные отсчеты, выходной сигнал я приложил в файле под названием untitled.jpg. Пользуясь примером с сайта https://www.mathworks.com/help/comm/ref/eyediagram.html я понял, что для построения eyediagram(x,n) вместо х нужно подавать комплексные отсчеты сигнала на несущей частоте, а вместо n (честно не разобрался до конца что за n, на сайте написано что это "Количество выборок на трассу, указанное как целое число больше 1") я подаю двойку (2) .данной функции необходимо подавать. Я произвел fft над каждым периодом (у меня 24 дибита), получается 24 комплексно сопряженные числа показывающие начальную. Данные комплексные числа я приложил в txt файле. После чего я подаю данные на вход функции eyediagram(x,n) и получаю не то что я вижу в примере. То что получается я приложил в файле под названием eye.jpg. И получается, что диаграмма не полная, я предполагаю, что диаграмма не полная из-за того, что не хватает символов в сообщении, так это или нет? Или я вообще делаю не то что нужно? fft_signal.txt