Jump to content
    

Влияние частоты АЦП на уровень сигнала

6 minutes ago, rloc said:

"Левые" - это про расширение? На последней картинке спектр приведен в широкой полосе, может быть не видно расширения из-за масштаба.

Слово расширение - не понял.

Во всех приведённых спектрах срез КИХ фильтра настроен на 0.75 от MSPS/2.

Просто в последнем - более лучшие коэффициенты и шум АЦП лучше вырезан по краям. 

Левые, это вот эти:

Spoiler

64_RXG26_G36dBm_v2_LeftF.thumb.png.7b897172043c3450c0de7433bb1734a2.png

 

Share this post


Link to post
Share on other sites

Вот зависимость появления "левых частот" от отстройки от несущей (тут коэв передачи КИХ-фильтра изменён с -6дБ на 0дБ, поэтому и сигнал и шумы - побольше):

Spoiler

64_AF01_G30dBm.thumb.png.f64db2648e3d00d363dfdb02728ffdd2.png

64_AF04_G30dBm.thumb.png.357860fd35ae85506261689493e72124.png

64_AF07_G30dBm.thumb.png.c7e6a2f76f01cc7467f3cc1ec4a60e7e.png

64_AF10_G30dBm.thumb.png.afdf5c81a0f35375146ceabe1a879bbb.png

 

Share this post


Link to post
Share on other sites

Спуры дробного синтезатора первого аналогового смесителя

Edited by тау

Share this post


Link to post
Share on other sites

5 minutes ago, тау said:

Спуры дробного синтезатора первого аналогового смесителя

Частота несущей на приёмнике во всех экспериментах - неизменна, меняется только ширина фильтра ПЧ и режимы децимации.

Ну и перед каждым экспериментом - перезапуск всех синтезаторов (переинициализация).

Share this post


Link to post
Share on other sites

56 минут назад, _4afc_ сказал:

Вот зависимость появления "левых частот" от отстройки от несущей

Точнее, от центральной частоты приемника. Периодически забываю, что в данном случае имеем дело с сигма-дельта преобразованием с переносом центральной частоты. Тогда комбинационные составляющие будут с примесью спур дробности гетеродина (как подметил тау) и

+-n*Fin+-m*Fadc+-k*Flo

Если входной сигнал отодвигаем дальше от центральной частоты гетеродина (LO), то по формуле в рабочую полосу попадает меньше комбинационных составляющих, обычное дело.

1 час назад, _4afc_ сказал:

Слово расширение - не понял.

Про эти аномалии:

64_RXG26_G36dBm_2.thumb.png.6a2ecd679f2635935ee01ffc38057cd9.png

Если бы не видимое расширение пика входной частоты, мог бы подумать про огрехи КИХ/БИХ-фильтрации.

51 минуту назад, тау сказал:

Спуры дробного синтезатора первого аналогового смесителя

Они бы двигались синхронно с входным сигналом, при постоянном LO.

1 час назад, _4afc_ сказал:

Плохая компенсация I/Q баланса может такое давать?

Компенсация во все времена давала подавление зеркала и гетеродина, но не спур. В высокочастотных сигма-дельта естественным образом соседствует аналоговая часть с производительной цифровой частью, вопросов к ЭМС и развязке по питанию несколько больше, чем в отдельных конвейерных АЦП.

Share this post


Link to post
Share on other sites

20 hours ago, rloc said:

+-n*Fin+-m*Fadc+-k*Flo

Но

  1. эти три частоты неизменны во всех экспериментах, следовательно и их комбинации;
  2. Frf=2.4GHz, соответственно и Flo того же порядка, т.е. их гармоники далеко за пределами ПЧ фильтра;
  3. как-то влияет Fdata и полоса ПЧ, но опятьже чем +-z*Fdata*2 хуже +-z*Fdata?

 

Проверил спектр с окном FlatTop - результат тот же:

Spoiler

D64_F01600_G39dBm.png.a540cbdd33686fb57741c7f8ad3673df.png

 

На всякий случай прикладываю исходные сигналы 64MSPS в csv:

  • 11 записей с разной частотой;
  • 15 записей с разным уровнем.

И скрипт для просмотра в Matlab.

 

D64_v76.ZIP

Share this post


Link to post
Share on other sites

7 часов назад, _4afc_ сказал:

эти три частоты неизменны во всех экспериментах, следовательно и их комбинации;

В сообщении выше входная частота Fin смещается вправо от центральной Flo, при этом состав и мощность спур меняется.

7 часов назад, _4afc_ сказал:

Frf=2.4GHz, соответственно и Flo того же порядка, т.е. их гармоники далеко за пределами ПЧ фильтра;

Гармоники далеко, а всем знакомые комбинационные 3-го порядка 2*Frf-Flo и 2*Flo-Frf попадают в полосу. Можно далее продлить до 5-го порядка: 3*Frf-2*Flo и 3*Flo-2*Frf, и т.д.

7 часов назад, _4afc_ сказал:

Проверил спектр с окном FlatTop - результат тот же

Максимальную погрешность в оценке мощности может дать прямоугольное окно - 3дБ. С любым другим окном погрешность меньше. С плосковершинным окном погрешность можно считать 0. Борьба за корректность оценки при попадании пика входной частоты между соседними бинами.

Share this post


Link to post
Share on other sites

В 03.03.2026 в 13:04, _4afc_ сказал:

АЦП и генератор засинхронизированы от GPS;

Ох, как же я туго догадываюсь. Вы мучаете клон USRP? Какой? Может быть мы даже сравним, хорошо если разные. Но, сигнал лучше не закольцовывать с соседнего TX, который сам может быть не очень чистым, сложно отделить собственные помехи RX и отдельно TX. Лучше подать с внешнего генератора.

Share this post


Link to post
Share on other sites

21 hours ago, rloc said:

Ох, как же я туго догадываюсь. Вы мучаете клон USRP? Какой? Может быть мы даже сравним, хорошо если разные. Но, сигнал лучше не закольцовывать с соседнего TX, который сам может быть не очень чистым, сложно отделить собственные помехи RX и отдельно TX. Лучше подать с внешнего генератора.

Передатчик: TinySA ULTRA в режиме генерации синуса на частоте 2.4ГГц

Приёмник: Самопал на AD9361 подключенный к SODIMM SiPEED 20K (ПЛИС GW2A-LV18). Перед RF входами только трансформатор.

 

Данные считываются из памяти ПЛИС в режиме отладки (Gowin Oscilloscope), сохраняются в CSV и далее смотрятся в матлаб.

 

Проверяем режим 1хRX CMOS TDD:

  • 5/10/20 MSPS - работает
  • 40/60 MSPS - не работает (спуры).

 

PS: Я для круглых цифр в теории заменил масштаб реальных 40MSPS на  теоретические 64MSPS, и соответственно реальные 20MSPS на  теоретические 32MSPS. 

Share this post


Link to post
Share on other sites

19 часов назад, _4afc_ сказал:

Приёмник: Самопал на AD9361 подключенный к SODIMM SiPEED 20K (ПЛИС GW2A-LV18). Перед RF входами только трансформатор.

Любопытно, но не понятно зачем искали драйвера USRP под Matlab?

У меня такой клон USRP: BlackSDR B210 mini

blacksdr-b210mini2.thumb.jpg.70280f6c618ff63a3331dc376588ca59.jpg

19 часов назад, _4afc_ сказал:

Проверяем режим 1хRX CMOS TDD:

  • 5/10/20 MSPS - работает
  • 40/60 MSPS - не работает (спуры).

У меня включительно до 40МГц нормально, от 40 до примерно 58 МГц плохо, как по спурам, так и подъему шумов SDM. Задающий генератор - VTCXO 40МГц на основной гармонике. Есть ли взаимосвязь между частотой ФД и выходной АЦП проследить не могу, драйвера UHD не дают посмотреть на уровне регистров.

Есть у меня подозрение, те AD9361, что сейчас встречаются на рынке, - это либо перемаркированные AD9363, либо не очень удачная копия. Напомню, AD9363 - отбраковка AD9361 по причине ухудшения характеристик в диапазоне входных частот и выходной частоты АЦП. У родной picozed с AD9361, купленной на Avnet лет 10 назад, никаких проблем нет, при всех частотах АЦП до 61.44МГц. Подъем шумов SDM к краям полосы есть, но это норма.

19 часов назад, _4afc_ сказал:

Передатчик: TinySA ULTRA в режиме генерации синуса на частоте 2.4ГГц

Прямой выход с синтезатора MAX2871, для частоты 2.4ГГц с делителя, с высоким уровнем гармоник.

Share this post


Link to post
Share on other sites

On 3/8/2026 at 11:22 AM, rloc said:

Любопытно, но не понятно зачем искали драйвера USRP под Matlab?

Если искал бинарники - хотел подключиться к USRP (который раньше был доступен, но сейчас куда-то забрали)  и по-принимать / по-передавать...

Если исходники (уже скачал) - для сравнения инициализаций ADI vs USRP. 

 

On 3/8/2026 at 11:22 AM, rloc said:

У меня такой клон USRP: BlackSDR B210 mini

А в нём данные по CMOS или LVDS бегают?

 

У меня вот так выхлядит (питание и debug по USB):

Spoiler

MXT9361_DevKit.thumb.jpg.7628ddd60d6d43e3b79dfaa7e36b8069.jpg

 

On 3/8/2026 at 11:22 AM, rloc said:

У меня включительно до 40МГц нормально, от 40 до примерно 58 МГц плохо, как по спурам, так и подъему шумов SDM. Есть ли взаимосвязь между частотой ФД и выходной АЦП проследить не могу, драйвера UHD не дают посмотреть на уровне регистров.

Взаимосвязь в исходниках USRP выглядит так:

     if                (rate<0.33e6)  { RXr003= B8(11101111); TXr002= B8(11101111); RXosr= 48; } // RX=3:2:2:4 TX=3:2:2:4 FIRx4
else if                (rate<0.66e6)  { RXr003= B8(11011111); TXr002= B8(11011111); RXosr= 32; } // RX=2:2:2:4 TX=2:2:2:4 FIRx4
else if                (rate<=20e6)   { RXr003= B8(01101100); TXr002= B8(01101100); RXosr= 12; } // RX=3:2:2:1 TX=3:2:2:1
else if ((rate> 20e6)&&(rate< 23e6))  { RXr003= B8(11101110); TXr002= B8(11100110); RXosr= 24; } // RX=3:2:2:2 TX=3:1:2:2 FIRx2

else if ((rate>=23e6)&&(rate< 41e6))  { RXr003= B8(11011110); TXr002= B8(11001110); RXosr= 16; } // RX=2:2:2:2 TX=1:2:2:2 FIRx2
else if ((rate>=41e6)&&(rate<=58e6))  { RXr003= B8(11100110); TXr002= B8(11100010); RXosr= 12; } // RX=3:1:2:2 TX=3:1:1:2 FIRx2

else if ((rate>58e6)&&(rate<=61.44e6)){ RXr003= B8(11001110); TXr002= B8(11010010); RXosr=  8; } // RX=1:2:2:2 TX=2:1:1:2 FIRx2
else                                  { "[_setup_rates] INVALID_CODE_PATH");                 }

 

On 3/8/2026 at 11:22 AM, rloc said:

Задающий генератор - VTCXO 40МГц на основной гармонике. 

У меня референсный (ADI) резонатор откалиброванный встроенными ёмкостями для 20 градусов. 

 

On 3/8/2026 at 11:22 AM, rloc said:

Есть у меня подозрение, те AD9361, что сейчас встречаются на рынке, - это либо перемаркированные AD9363, либо не очень удачная копия. Напомню, AD9363 - отбраковка AD9361 по причине ухудшения характеристик в диапазоне входных частот и выходной частоты АЦП.

У меня на одной из плат вместо AD9361 стоит MXT9361 от BMTI - тот же результат по гармоникам, только уровень основного тона на 3дБ ниже.

 

On 3/8/2026 at 11:22 AM, rloc said:

У родной picozed с AD9361, купленной на Avnet лет 10 назад, никаких проблем нет, при всех частотах АЦП до 61.44МГц. 

Дело ещё в том, что 10 лет назад AD9361 по другому конфигурили.

У ADI была утилитка, она порождала текстовую простыню с инициализацией регистров, этот текст уже шёл в железо.

Утилитку ADI спрятал с концами - нигде её не видно.

Сейчас вместо неё CPP драйвера. 

 

On 3/8/2026 at 11:22 AM, rloc said:

Подъем шумов SDM к краям полосы есть, но это норма.

Да, к этому вопросов - нет. Чем ниже OSR - тем заметнее подъём шумов по краям. Но это шумы, а не палки гармоник.

 

On 3/8/2026 at 11:22 AM, rloc said:

Прямой выход с синтезатора MAX2871, для частоты 2.4ГГц с делителя, с высоким уровнем гармоник.

Я попробую вскоре сделать записи на частоте 2350МГц тона 2350,001МГц пропустив через аналоговый фильтр 2350 с полосой 100МГц.

Для 25-60 MSPS  с шагом 5 MSPS и уровнем -20dBFS.

Share this post


Link to post
Share on other sites

5 часов назад, _4afc_ сказал:

Взаимосвязь в исходниках USRP

В каких именно? Много чего лежит на гитхабе, но не успел детально разобраться.

5 часов назад, _4afc_ сказал:

Утилитку ADI спрятал с концами - нигде её не видно.

Это именно утилита была?

Полное название моего старого кита: ADSAES-Z7PZ-SDR2-DEV-G. Изначально он был продуктом Avnet, по истечении нескольких лет перешел на баланс AD. Как будто некоторая команда сначала работала на Avnet, а потом полностью перешла под крыло AD, вместе со своими наработками. В комплекте с китом не было ПО, а то что скачивал, накрылось вместе с SSD. Пробовал недавно отыскать концы и прихожу к выводу, что AD сейчас выпускает один единый образ Linux под все Zynq-подобные платы с AD93xx/ADRV90xx трансиверами.

  

5 часов назад, _4afc_ сказал:

А в нём данные по CMOS или LVDS бегают?

По CMOS18, но я не одобряю. Забыл сказать, после частоты АЦП 58МГц в USRP сигнал начинает рассыпаться.

 

Share this post


Link to post
Share on other sites

16 hours ago, rloc said:

По CMOS18, но я не одобряю. Забыл сказать, после частоты АЦП 58МГц в USRP сигнал начинает рассыпаться.

У меня тоже CMOS18, его хватает для TDD на один канал. Надо будет LVDS проверить....

 

16 hours ago, rloc said:

В каких именно? Много чего лежит на гитхабе, но не успел детально разобраться.

Я рефакторил настройку AD9361 в USRP от Ettus Research в 2023 году.

 

16 hours ago, rloc said:

Это именно утилита была?

Утилита или набор утилит, от которой сейчас в интернете остались только красивые картинки AD936x_Evaluation_Software_v2.1.4 :

Spoiler

ad9361-cfg-1.thumb.png.53d872869f36981dfcc224dd13d1000c.png ad9361-cfg-2.thumb.png.603631c3473d5ad10ed38fb25c393f23.png

ad9361-cfg-3.thumb.png.952df23b2f5a46965dd238e23290b741.png ad9361-cfg-4.thumb.png.7163fe51662cfa8422df3eaefc5fa19e.png

ad9361-cfg-5.thumb.png.9acd5ad3ce33a214716cf9d151706edc.png ad9361-cfg-6.thumb.png.f5a6180d825cb047aca550b69cb127f5.png

ad9361-cfg-7.thumb.png.a02a14198b4460db1628b810ac6ec38f.png ad9361-cfg-8.thumb.png.74f1aaa12fa4013aab74dc7f60303dd3.png

ad9361-cfg-9.thumb.png.50457c60127bf9ad1e34c324b50aba17.png ad9361-cfg-10.thumb.png.7b57b84eb6e30d3dbee858dd564eb8d4.png 

После чего получался скрипт, который конвертился в Verilog утилитой:

Spoiler

convert-script-to-verilog.png.ea37691fcbe8ed018b5ba5b2f63897a4.png

результат выглядел примерно так:

// ==================================================
//  ____   ___  _____  _      ___  _   _ __     __
// / ___| |_ _||_   _|| |    |_ _|| \ | |\ \   / /
// \___ \  | |   | |  | |     | | |  \| | \ \ / / 
//  ___) | | |   | |  | |___  | | | |\  |  \ V /  
// |____/ |___|  |_|  |_____||___||_| \_|   \_/   
//                                                
// ==================================================
//  ____   ____   ___     _     _   _  ____   _   _  _   _  _____ 
// | __ ) |  _ \ |_ _|   / \   | \ | |/ ___| | | | || \ | || ____|
// |  _ \ | |_) | | |   / _ \  |  \| |\___ \ | | | ||  \| ||  _|  
// | |_) ||  _ <  | |  / ___ \ | |\  | ___) || |_| || |\  || |___ 
// |____/ |_| \_\|___|/_/   \_\|_| \_||____/  \___/ |_| \_||_____|
//                                                                
// ==================================================
// File Name: ad9361_lut.v
// ==================================================
// Programed By: BrianSune
// Contact: briansune@gmail.com
// 

function [18 : 0] ad9361_cmd_data;
input [12 : 0] index;

begin
    case(index)
        13'd0   :	ad9361_cmd_data	= {1'b1, 10'h000, 8'h00};
		13'd1   :	ad9361_cmd_data	= {1'b1, 10'h3DF, 8'h01};
		13'd2   :	ad9361_cmd_data	= {1'b0, 10'h037, 8'h00};	// ReadPartNumber
		13'd3   :	ad9361_cmd_data	= {1'b1, 10'h295, 8'h14};	// Power up XO path (Default)
		13'd4   :	ad9361_cmd_data	= {1'b1, 10'h2A6, 8'h0E};	// Enable Master Bias
		13'd5   :	ad9361_cmd_data	= {1'b1, 10'h2A8, 8'h0E};	// Set Bandgap Trim
		13'd6   :	ad9361_cmd_data	= {1'b1, 10'h292, 8'h08};	// Set DCXO Coarse Tune[5:0]
		13'd7   :	ad9361_cmd_data	= {1'b1, 10'h293, 8'h80};	// Set DCXO Fine Tune [12:5]
		13'd8   :	ad9361_cmd_data	= {1'b1, 10'h294, 8'h00};	// Set DCXO Fine Tune [4:0]
		13'd9   :	ad9361_cmd_data	= {1'b1, 10'h2AB, 8'h07};	// Set RF PLL reflclk scale to REFCLK * 2
		13'd10  :	ad9361_cmd_data	= {1'b1, 10'h2AC, 8'hFF};	// Set RF PLL reflclk scale to REFCLK * 2
		13'd11  :	ad9361_cmd_data	= {1'b1, 10'h009, 8'h07};	// Enable Clocks
		13'd12  :	ad9361_cmd_data	= {1'b1, 10'h045, 8'h00};	// Set BBPLL reflclk scale to REFCLK /1
		13'd13  :	ad9361_cmd_data	= {1'b1, 10'h046, 8'h04};	// Set BBPLL Loop Filter Charge Pump current
		13'd14  :	ad9361_cmd_data	= {1'b1, 10'h048, 8'hE8};	// Set BBPLL Loop Filter C1, R1
		13'd15  :	ad9361_cmd_data	= {1'b1, 10'h049, 8'h5B};	// Set BBPLL Loop Filter R2, C2, C1
		13'd16  :	ad9361_cmd_data	= {1'b1, 10'h04A, 8'h35};	// Set BBPLL Loop Filter C3,R2
		13'd17  :	ad9361_cmd_data	= {1'b1, 10'h04B, 8'hE0};	// Allow calibration to occur and set cal count to 1024 for max accuracy
		13'd18  :	ad9361_cmd_data	= {1'b1, 10'h04E, 8'h10};	// Set calibration clock to REFCLK/4 for more accuracy
		13'd19  :	ad9361_cmd_data	= {1'b1, 10'h043, 8'h31};	// BBPLL Freq Word (Fractional[7:0])
		13'd20  :	ad9361_cmd_data	= {1'b1, 10'h042, 8'hA8};	// BBPLL Freq Word (Fractional[15:8])
		13'd21  :	ad9361_cmd_data	= {1'b1, 10'h041, 8'h0F};	// BBPLL Freq Word (Fractional[23:16])
		13'd22  :	ad9361_cmd_data	= {1'b1, 10'h044, 8'h1D};	// BBPLL Freq Word (Integer[7:0])
		13'd23  :	ad9361_cmd_data	= {1'b1, 10'h03F, 8'h05};	// Start BBPLL Calibration
		13'd24  :	ad9361_cmd_data	= {1'b1, 10'h03F, 8'h01};	// Clear BBPLL start calibration bit
		13'd25  :	ad9361_cmd_data	= {1'b1, 10'h04C, 8'h86};	// Increase BBPLL KV and phase margin
		13'd26  :	ad9361_cmd_data	= {1'b1, 10'h04D, 8'h01};	// Increase BBPLL KV and phase margin
		13'd27  :	ad9361_cmd_data	= {1'b1, 10'h04D, 8'h05};	// Increase BBPLL KV and phase margin
		13'd28  :	ad9361_cmd_data	= {1'b0, 10'h05E, 8'h00};	// Wait for BBPLL to lock, Timeout 2sec, Max BBPLL VCO Cal Time: 345.600 us (Done when 0x05E[7]==1)
		13'd29  :	ad9361_cmd_data	= {1'b0, 10'h05E, 8'h00};	// Check BBPLL locked status  (0x05E[7]==1 is locked)
		13'd30  :	ad9361_cmd_data	= {1'b1, 10'h002, 8'hDE};	// Setup Tx Digital Filters/ Channels
		13'd31  :	ad9361_cmd_data	= {1'b1, 10'h003, 8'hDE};	// Setup Rx Digital Filters/ Channels
		13'd32  :	ad9361_cmd_data	= {1'b1, 10'h004, 8'h03};	// Select Rx input pin(A,B,C)/ Tx out pin (A,B)
		13'd33  :	ad9361_cmd_data	= {1'b1, 10'h00A, 8'h05};	// Set BBPLL post divide rate
		13'd34  :	ad9361_cmd_data	= {1'b1, 10'h065, 8'hFA};	// Enable clock to Tx FIR Filter and set Filter gain Setting 
		13'd35  :	ad9361_cmd_data	= {1'b1, 10'h060, 8'h00};	// Write FIR coefficient address
		13'd36  :	ad9361_cmd_data	= {1'b1, 10'h061, 8'h01};	// Write FIR coefficient data[7:0]
		13'd37  :	ad9361_cmd_data	= {1'b1, 10'h062, 8'h00};	// Write FIR coefficient data[15:8]
		13'd38  :	ad9361_cmd_data	= {1'b1, 10'h065, 8'hFE};	// Set Write EN to push data into FIR filter register map
		13'd39  :	ad9361_cmd_data	= {1'b1, 10'h064, 8'h00};	// Write to Read only register to delay ~1us
		13'd40  :	ad9361_cmd_data	= {1'b1, 10'h064, 8'h00};	// Write to Read only register to delay ~1us
 ...

 

 

Результаты работы: ad9361_lut.zip

 

PS: Если у кого остались подобные утилиты - поделитесь пожалуйста.

 

Share this post


Link to post
Share on other sites

On 3/11/2026 at 3:20 PM, _4afc_ said:

У меня тоже CMOS18, его хватает для TDD на один канал. Надо будет LVDS проверить....

Вполне вероятно, что в этом и проблема.

Несколько разрядов CMOS18 меняются одновременно и синхронно со входным сигналом.

Это создает бросок тока по питанию, который видит аналоговая часть АЦП.

Share this post


Link to post
Share on other sites

1 час назад, _4afc_ сказал:

Утилита или набор утилит

Похоже на скомпилированный проект NI Labview. AD подтверждает существование подобной утилиты до перехода на Matlab.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...