XPEHOMETP
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Типа, убит наповал. Захотел сгладить экспериментальные данные от наводок в электросети. Там, самое гнусное, при регистрации идет не столько синусоида 50 Гц, сколько пакет высокочастотных наводок, с общей частотой в 50 Гц. При разложении по Фурье в высокочастотной области просто частокол. Правда, подозреваю, что это результат алиасинга. Типа, наводки с частотой выше чем частота Найквиста нагло вводят себя в область более низких частот. Примерно так: импульсный блок питания компа, используемого при регистрации, дает некую высокочастотную помеху, это складывается с наводкой 50 Гц, получается жопа полная... Но я убит конкретно не этим. Пробовал раскладывать наводки по Фурье, фильтровать сложно из-за дикого частокола в области высоких частот. Возникла мысль предварительно ухайдакать высокие частоты каким-нибудь разумным сглаживанием. А потом гонять по Фурье. Вот тут и подкралось оно... Захотелось вдруг использовать пакет GCVSPL, написанный лет 25 назад под G77. Я не буду жаловаться на использование неявного описания переменных: хочешь что-то поменять - сам все переменные опишешь под флагом implicit none. Я про некий финт, который там используется. От которого я просто ошизел. Типа, есть подпрограмма, в которой выделяется некий достаточно большой рабочий массив для промежуточных данных. Одномерный. Далее, этот же массив используется другими подпрограммами для вычислений. Фишка в том, что он передается в подпрограммы как бы своими частями. Мы его указываем при вызове подпрограммы в виде некоего единичного элемента массива, а потом этому единичному элементу в описании подпрограммы отвечает (прочуствуйте!) аж целый двумерный массив! Причем с разными индексами один и тот же рабочий массив аж два раза отправляется в одну и ту же подпрограмму, и в переменных подпрограммы эти единичные элементы соответствуют или двумерному массиву, или просто одномерному! Да, я не вчера на свет родился, и знаю, что при вызове подпрограмм все аргументы в фортране передаются по ссылке. Типа, если мы объявили некий рабочий массив в подпрограмме, то, передавая его элементы по ссылке в другие подпрограммы, мы вроде должны получить доступ ко всем последующим элементам массива. Вопрос, собственно, в том, почему на это дело не ругается компилятор? Ну, когда некому единичному элементу в массиве ставится в соответствие целый массив в вызываемой подпрограмме? А он таки не ругается! Проверено на Salford FTN95, который таки отличается повышенной придирчивостью к использованным трюкам. Ну, я понимаю, сишные (и плюсовые) программеры аж целую войну ведут против "ненадежных" сишных (плюсовых) указателей (а, может, это идет война именно против таких программеров? Не уверен!), которые, типа, отстой, а вот Си-Шарп - он, типа, спасет от всех напастей, хоть от ядерной войны! Но старый дряхлый Фортран, тем более в пределах Ф77... Неужто он использовал столь же ненадежные адресации просто при перенаправлении в подпрограммы? И это стандартно проходило? Я просто торчу! Кстати, при попытке переписать все это дело в варианте, от которого не встают волосы дыбом, потерпел фиаско. Пробовал для всех этих фич использовать оператор EQUIVALENCE, но он не годится для параметров, передаваемых в подпрограммы. Не поддерживается, короче. Можно переписать для параметров, передаваемых через COMMON-block, но уже совсем не охота. Зачем выеживаться, если и так все работает? |