Вверх ↑
Этот топик читают: Гость
Ответов: 8888
Рейтинг: 823
#31: 2012-06-09 10:52:02 ЛС | профиль | цитата
nesco, вот схемка, подключен ArrayRW, и то иногда выскакивает ошибка, а если подключить ArrayEnum, то мама не горюй! fft_test.rar
------------ Дoбавленo в 10.52:
Кстати, посмотрите, как при увеличении выборки (в схеме она случайна от 256 до 4092) вытаскивается сигнал из под шума (амплитуда сигналов в схеме в 10 раз меньше амплитуды шума), правда, согласно правилу рычага, выигрываем в чуствительности, но проигрываем в полосе модуляции, т. е. уменьшается максимальное количество передаваемой информации
карма: 19

0
файлы: 1fft_test.rar [3.4KB] [242]
Разработчик
Ответов: 26067
Рейтинг: 2121
#32: 2012-06-10 02:14:59 ЛС | профиль | цитата
Леонид, сделай пример, который бы отображал ход ошибки. Я нифига не въеду, что у тебя не работает как надо и в каком режиме.
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#33: 2012-06-10 09:39:28 ЛС | профиль | цитата
nesco, Замени два розовых компонента на ArrayEnum и сразу въедешь.
zaml.png
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1zaml.png [23.8KB] [562]
Ответов: 8888
Рейтинг: 823
#34: 2012-06-10 10:11:13 ЛС | профиль | цитата
nesco, вот, в схеме считается интервал 2^14=16384, выходная длина массива сумм должна быть 8192, что и присутсвует на нижней точке. При переборе массива ДО тчк 8191 с помощью "For" "ArrayRW" всё работает, а копонент "ArratEnum" считает, что длина массива 16384 и начинает перебирать то, "чего на белом свете вообще не может быть" code_28122.txt добирается до не Real-ных значений и выскакивает с ошибкой
карма: 19

0
файлы: 1code_28122.txt [2.4KB] [422]
Разработчик
Ответов: 26067
Рейтинг: 2121
#35: 2012-06-10 13:29:37 ЛС | профиль | цитата
О! Будем посмотреть.
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#36: 2012-06-10 22:10:10 ЛС | профиль | цитата
Леонид, [flood]сколько раз в одной процедуре нужно применить
if _prop_CourseF=0 then
Намного проще (и понятней)
Case _prop_CourseF of
0:............

1:............
end;
[/flood]
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 8888
Рейтинг: 823
#37: 2012-06-10 22:27:53 ЛС | профиль | цитата
Tad, желательно, чтобы в результате эта конструкция выполнялась минимальное количество раз (хотя она и не самая медленная), т. е. не надо засовывать её внутрь цикла если есть возможность, кроме того чтобы не переписывать часть кода при необходимости вставки забытого или из за лени, ну и ещё для красоты всё таки: "Если НЕТ, то ДА, иначе СОВСЕМ НЕТ!"
Но критику всегда принимаю с благодарностью, помогает избежать ошибок
карма: 19

0
Разработчик
Ответов: 26067
Рейтинг: 2121
#38: 2012-06-11 00:36:01 ЛС | профиль | цитата
Леонид, объясни мне -- как ты хочешь получить ограничение 8192, когда у тебя


function THIArrayFFT._aGetAmpl;
var
Index: integer;
begin
Result := false;
Index := ToIntIndex(Item);
if (Index < 0) or (Index > tnn - 1) then exit;
dtReal(Val, ArrayOutAmpl[Index]);
Result := true;
end;

tnn равно 16384

У тебя размер массива ArrayOutAmpl -- 8192, а значения индекса можно пихать до 16383
Естественно ArrayEnum будет пытаться читать, пока доступны индексы.



while Arr._Get(eIndex,Item) do begin
_hi_OnEvent_(_event_onItem,Item);
if FStop then break;
inc(Ind,k);
dtInteger(eIndex,Ind);
end;

Этого не произойдет в ArrayRW, тк индексы задаются извне
карма: 22

0
Ответов: 8888
Рейтинг: 823
#39: 2012-06-11 10:36:41 ЛС | профиль | цитата
nesco, спасибо! Я всё равно бы не нашёл, "смотрю в книгу, а вижу фигу", сколько раз пальчиком водил по строчкам, бестолку
------------ Дoбавленo в 10.36:
Заменил 311 строку
hiArrayFFT.pas писал(а):
if (Index < 0) or (Index > tnn/2 - 1) then exit;
на
if (Index < 0) or (Index > trunc(tnn/2) - 1) then exit;
полёт нормальный!
карма: 19

0
Разработчик
Ответов: 26067
Рейтинг: 2121
#40: 2012-06-11 13:50:16 ЛС | профиль | цитата
Леонид,
Во-первых:

   if (Index < 0) or (Index > tnn - 1) then exit;
у меня в 310 строке;
Во-вторых: tnn/2 там отродясь не водилось:
В третьих: зачем trunc(tnn/2), когда можно просто -- tnn div 2, tnn же тип integer
карма: 22

0
Ответов: 8888
Рейтинг: 823
#41: 2012-06-11 15:08:09 ЛС | профиль | цитата
nesco писал(а):
Во-первых:
Во-вторых:
Конечно
nesco писал(а):
tnn div 2
Замечательно! А то всё
nesco писал(а):
этим раньше не занимался вплотную

карма: 19

0
Разработчик
Ответов: 26067
Рейтинг: 2121
#42: 2012-06-11 15:16:49 ЛС | профиль | цитата
Леонид писал(а):
А то всё

Я же имел в виду разложения функций в ряды Фурье, а не программирование
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#43: 2012-06-12 11:22:25 ЛС | профиль | цитата
А я имел ввиду программирование
Леонид писал(а):
для красоты
для красоты (и для экономии тактов процессора)не пишут 2*Pi, а обычно объявляют готовое
#pas
const TwoPi = 6.283185307179586;

------------ Дoбавленo в 11.22:
Это так, к слову.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 8888
Рейтинг: 823
#44: 2012-06-15 16:45:37 ЛС | профиль | цитата
Выложил три компонента по Фурье в первом посте
карма: 19

0
Разработчик
Ответов: 26067
Рейтинг: 2121
#45: 2012-06-15 16:51:45 ЛС | профиль | цитата
Леонид писал(а):
Выложил три компонента по Фурье в первом посте

С примерами
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)