Пишу скрипт обработки сигнала для курсача. Задача - по превышению сигналом уровня 0.5 произвести вычисления. Сигнал задан дискретно в массиве fim_discrete_noise.
Привожу логически понятный скрипт для любого, кто хоть немного программированием занимается (если какие-то функции непонятны - напишу что это):
Код:
array(num,7)$
array(fim_output,7)$
period:0$
l:0$
for i:0 thru 7 do
(
k:period,
mark:0,
if (l=0) then l:1 else l:0,
while mark=0 do
(
for j:k thru k+62 do
(
if (fim_discrete_noise[j]>0.5) then
(
sig:(j-period)/6.25,
mark:1,
num[i]:j
)
),
mark:1
),
fim_output[i]:round(sig),
period:period+62+l
)$
fim_output_list_1:create_list("Result:")$
fim_output_list_2:create_list(fim_output[j], j,0,7)$
fim_output_list: append (fim_output_list_1,fim_output_list_2)$
fim_output_list;
listarray(num);Результат (вторая строка - j при которых срабатывает цикл):
Код: Выделить всё
[Result:,1,9,0,4,1,9,8,8]
[11,125,130,217,261,374,430,492]А теперь привожу просто прогонку массива fim_discrete_noise на превышение уровня 0.5:
Код: Выделить всё
for i:0 thru 499 do (if (fim_discrete_noise[i]>0.5) then display(i));Код: Выделить всё
i=6
i=118
i=130
i=212
i=256
i=368
i=425
i=487Как видим в цикле идет явное запаздывание на 5 тактов. Я вот сижу и не могу вкурить, откуда такое могло взяться.. Нет догадок, где тут вкралась ошибка?
Я в принципе нашел выход - вычитать 5 из j. Но это как-то не гламурно.