ElrondTelvanni 0 21 октября, 2015 Опубликовано 21 октября, 2015 · Жалоба Ради интереса сделал генератор с применением ряда Тейлора 2 порядка. Результаты по сравнению с 1 порядком: 1) Выигрыш по SFDR 20 дБ (132 против 112). 2) По занимаемым LUT - в 2.5 раза больше. 3) По занимаемой памяти - в 2 раза больше. 4) По умножителям - в 3.3 раза больше. По-моему, для большинства случаев оно того не стоит. И если занимаемую память можно сократить в 2 раза (уменьшив таблицу), то с остальным ничего не поделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Шаманъ 0 21 октября, 2015 Опубликовано 21 октября, 2015 · Жалоба Ради интереса сделал генератор с применением ряда Тейлора 2 порядка. Результаты по сравнению с 1 порядком: 1) Выигрыш по SFDR 20 дБ (132 против 112). 2) По занимаемым LUT - в 2.5 раза больше. 3) По занимаемой памяти - в 2 раза больше. 4) По умножителям - в 3.3 раза больше. По-моему, для большинства случаев оно того не стоит. И если занимаемую память можно сократить в 2 раза (уменьшив таблицу), то с остальным ничего не поделать. А таблица какого размера была? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ElrondTelvanni 0 21 октября, 2015 Опубликовано 21 октября, 2015 · Жалоба Для 1 порядка - 512х18бит. Для 2 порядка - 512х32бит. В таблице четверть круга. Уменьшил таблицу в 2 раза - потерял 18 дБ (на 2 порядке). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Шаманъ 0 21 октября, 2015 Опубликовано 21 октября, 2015 · Жалоба Уменьшил таблицу в 2 раза - потерял 18 дБ (на 2 порядке). 18дБ ожидаемо (там будет кубическая зависимость от размера таблицы), мне не понятно почему SFDR такой маленький у Вас выходит. Ведь имея таблицу в 1024элемента на 180градусов, максимальная ошибка вычислений не должна превысить: (pi/1024)^3/3! = 4.81e-9 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 22 октября, 2015 Опубликовано 22 октября, 2015 (изменено) · Жалоба По совету присутствующего тут коллеги поигрался с разрядностями: Оригинальная структура: Сигнал 16 бит множится на 17 бит выход NCO, затем младшие 32 бита идут на CIC - выход которого (32 бит) на FIR. Была попытка усечь на 10 бит вход CIC (ещё отбросить младшие 10 бит после умножения), с соответствующим изменением параметров данного блока в megawizard) - появилась постоянная составляющая на выходе CIC (где-то на -60 дБ от full scale, значение приблизительное). Изменено 22 октября, 2015 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 22 октября, 2015 Опубликовано 22 октября, 2015 · Жалоба По совету присутствующего тут коллеги поигрался с разрядностями: Оригинальная структура: Сигнал 16 бит множится на 17 бит выход NCO, затем младшие 32 бита идут на CIC - выход которого (32 бит) на FIR. Была попытка усечь на 10 бит вход CIC (ещё отбросить младшие 10 бит после умножения), с соответствующим изменением параметров данного блока в megawizard) - появилась постоянная составляющая на выходе CIC (где-то на -60 дБ от full scale, значение приблизительное). Из-за отсечения действительно должно создаваться смещение, хотя -60dB мне кажется многовато. Чтобы смещения не было, и обеспечить максимальную разрядность, можно использовать отсечение или округление с переносом всей ошибки в следующий такт и сложением с ошибкой из предыдущего такта. Типа дельта-сигма модуляции первого порядка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vovanse 0 22 октября, 2015 Опубликовано 22 октября, 2015 · Жалоба Где можно недорого приобрести .... Нахожусь в г. Кемерово. На счет недорого не знаю, но в Кемерово мало мест, где можно хоть что-то купить. Вот одно из них. http://eltompro.ru/ Могут привести под заказ. Сами берем все через Томск или Новосибирск, там масса фирмочек которые привезут все что угодно. Ну и интернет магазины. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ElrondTelvanni 0 22 октября, 2015 Опубликовано 22 октября, 2015 · Жалоба появилась постоянная составляющая на выходе CIC (где-то на -60 дБ от full scale, значение приблизительное).Нельзя просто так взять и отсечь младшие разряды. Нужно к результату усечения прибавить значение старшего (знакового) разряда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 22 октября, 2015 Опубликовано 22 октября, 2015 · Жалоба Значение старшего из отюрасываемых? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr Vihorev 0 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба А какую разрядность лучше выбрать для фазы? Можно ведь выбрать большую разрядность и для итераций CORDIC понадобиться много ресурсов. Аможно для четверти круга выбрать небольшую разрядность, но выполнить модуль по подсчету количества колебаний - и ошибка в опеределении текущей фазы будет сводиться к минимуму по мере отработки большого количества циклов. Как выбрать оптимальную разрядность? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rolin 0 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба Кто-нибудь может поделиться кодом АРУ на verilog , ну или в крайнем случае VHDL ? Умаялся я уже с этим AGC..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rolin 0 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба Вот, га что меня хватило.... Работает только на увеличение усиления, стабилизации нет, на уменьшение не работает. Что-то я не понимаю, видимо // AGC reg [23:0] agc_control = 24'd0; // 83888608 wire [23:0] max_gain = 23'd8000000 - step_up; wire [23:0] min_gain = 23'd1 + step_dwn; wire [23:0] step_up = 23'd56000; // 1 sec wire [23:0] step_dwn = 16'd560; // 10 msec wire [23:0] gate = 24'd8000000; wire signed [47:0] mult_out; mult_24Sx24S_w agc_mult(det_out, agc_control, mult_out); wire signed [23:0] agc_mult_out = mult_out[35:12]; reg [5:0] state = 0; wire [23:0] mod = agc_mult_out[23] ? ~agc_mult_out : agc_mult_out; always @(posedge clock) begin case (state) 0: if(det_out_strobe) state <= state + 1'd1; 1,2,3 : state <= state + 1'd1; 4: begin if(mod > gate) if(agc_control > min_gain) agc_control <= agc_control - step_dwn; if(mod < gate) if(agc_control < max_gain) agc_control <= agc_control + step_up; state <= state + 1'd1; end 5,6,7: state <= state + 1'd1; 8: begin agc_out <= agc_mult_out; agc_out_strobe <= 1; state <= state + 1'd1; end 9: begin agc_out_strobe <= 0; state <= 1'd0; end default: state <= 1'd0; endcase end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться