Цитата
Что за бред опять? И для чего этот огрызок кода? Вам же говорят - нужно получить динамический диапазон 120 дБ. При 16-разрядных к-тах это в общем случае невозможно.
Станислав, это даже не смешно. Человек предоставил вам коэффициенты из готового изделия, которое он собрался повторить. Там 16р знаковые коэффициенты. И 24р данные. Знаковые или нет, не знаю.
Цитата
Там задача примерно следующая: проFIRить сигнал с частотой 1 kSPS и разрядностью 24 bit фильтром вроде того, что в прикреплении (выдран из промышленной сейсмостанции, построеной на 80386).
Но раз в оригинальном изделии 16р хватало, значит подавление 120дБ не нужно, расслабьтесь. Итого, именно для его случая: 141 тап, 16р знаковые к, 24р знаковые(?) д, я и приводил цифру 50% простоя АВР@20МГц. 16s*24u я привёл. Она занимает 32 такта. 16s*24s займёт столько-же. Писать это мне лень, бо моё любопыцтво это уже не удовлетворит, а результат я просто знаю.
Код
UHF_level_data_filtering:
sub r8,r8
sub r9,r9
movw r10,r8
movw r12,r8
movw r14,r8
lds xl,circular_buffer_for_LPF_ptr
lds xh,circular_buffer_for_LPF_ptr+1
ldi main_counter,16
ldi zl,low(_16_tap_LPF_coeff*2)
ldi zh,high(_16_tap_LPF_coeff*2)
UHF_level_data_filtering_loop:
ldi temporary1,high(circular_buffer_for_LPF_bot);1
cpi xl,low(circular_buffer_for_LPF_bot) ;1
cpc xh,temporary1 ;1
brcs UHF_level_data_filtering_ptr ;2
ldi xl,low(circular_buffer_for_UHF_LPF)
ldi xh,high(circular_buffer_for_UHF_LPF)
UHF_level_data_filtering_ptr:
ld r3,x+ ;2 К и Д грузятся в соотв. регистры проццедуры помножения, ессно.
ld r4,x+ ;2
lpm r5,z+ ;3
lpm r6,z+ ;3
lpm r7,z+ ;3
;проццедура умножения 16s*24u, которую любопытные могут переделать в 16s*24s, занимает 32такта
add r8,mul_res0;1
adc r9,mul_res1;1
adc r10,mul_res2;1
adc r11,mul_res3;1
adc r12,mul_res4;1
adc r13,zero_reg;1
adc r14,zero_reg;1
adc r15,zero_reg;1 за этот отсчёт не уверен, надо анализировать коэффициенты, но ладно, пусть будет.
dec main_counter;1
brne UHF_level_data_filtering_loop;2
Итого 61 такт на цикл. Циклов 141, итого 8601. Накладные расходы на инициализацию - 13 тактов
Совсем итого 8614 тактов. На 50нС цикле - 430мкС. Fs=1000Гц, или 1000мкс. Более 50% времени процессор курит. Где я неправ, поясните. И не надо говорить, что вы где-то чего-то не поняли - в ТОЙ САМОЙ цитате цифры были прописаны однозначно для каждого случая. Сообщение #23. Тем более, что вы его уже цитировали.
Цитата
Цикл 24х24 s*s я сделал - получилось гораздо больше пресловутых "75 тактов". Если я не прав - докажите, иначе Ваши слова буду расценивать, как совершенно бесцеремонный наезд со всеми вытекающими... Мне все же кажется, что Вам не "лень", а именно "слабо".
Вот весело, чего-ж вы сразу не предъявили публике плоды труда своего? Если правильно, я сголашусь а если нет, то укажу на ошибки. Что стесняетесь-то? Кстати, почти 3 страниццы бесцеремонных наездов было имана от вас, бо хоть какие-то аргументы в виде графиков(хоть и не в тему), появились только на 3 странице. А до того самым конструктивным был аргУмент в виде Спитака и АПРК Курск, да ответы Gorbatchov-style.
Кстати-2, про 24*24 и разговора не было про знаковое. Не, брешу-брешу!!! Было:
Цитата
Для 24Х24 поимеем, соотвецтвенно, 23. Остаёцца МАС. 45 на умножение, 7 на суммирование. 75 тактов... Итого на м48@20MHZ имеем меньше 4мкС на тап(со знаковыми величинами будет на копеечку больше). #15
А про меня не беспокойтесь, мне именно лень.
Про 24р знаковое и 100-200тапов напишу позже, щас занят.