Рентгеноструктурный анализИсследование качества восстановления функции ЭП от одной переменной в зависимости от того, какие и сколько гармоник ряда Фурье используются для ее восстановленияТекст задания: практикум 3. Все требующиеся для выполнения задания скрипты были переписаны с python2 на python3. СокращенияЭП - электронная плотность Создание функции ЭПДля компьютерного эксперимента была взята модель со следующими характеристиками:
Электронные плотности (ЭП) атомов описываются гауссовой кривой. Максимум ЭП в центре атома приблизительно пропорционален числу электронов в атоме. Гауссова функция определяется числами λ, β, γ по формуле: gauss = λ*exp(-(β^2)*(X-γ)^2). Я использовала эти значения из variant3.txt. Таким образом задается распределение электронной плотности для каждого атома - высота пика, ширина пика, координата максимума пика соответсвенно. Рассчитывается функция ЭП с помощью скрипта compile-func_py3.py. python compile-func_py3.py -g 41,3.2,24.5+21,3.7,27.5+31.0,3.2,30+10,2,10 Указанный скрипт выдал текстовый файл func.txt и изображение функции электронной плотности (см рис 1). В данном случае система состоит из 1 + 2 атомов. Рисунок 1. Изображение функции электронной плотности, полученное в результате компьютерного эксперимента. Расчет коэффициентов ФурьеДля функции ЭП, полученной на предыдущем этапе, были рассчитаны амплитуды и фазы сигналов (скрипт func2fourier_py3.py). Скрипт выдал файл func_ft.txt, содержащий 499 гармоник. python func2fourier_py3.py -i func.txt Отбор необходимого числа гармоник и восстановление исходной функции ЭП по полному набору гармоникИз полученных 499 гармоник было отобрано необходимое для восстановления функции количество гармоник. Скрипт, выполняющий эту операцию - fourier-filter_py3.py. Параметр -r позволяет "вырезать" гармоники с указанными номерами. python fourier-filter_py3.py func_ft.txt -r 0-15 Для того, чтобы увидеть результат "фильтрации" используется скрипт fourier2func_py3.py, входным файлом для которого является func_ft_filtered.txt, который выдает "фильтрующий скрипт (этотот файл делается новый в каждом эксперименте, соответственно, ссылка на версию последней итерации). python fourier2func_py3.py func_ft_filtered.txt Так как нам известно разрешение всех гармоник в наборе, этот набор гармоник полный. Если включать в этот набор разное количество гармоник от 0-й до n-й, картинка восстановления ЭП будет немного разной. Качество восстановления характеризуется так:
На рисунках 2-10 представлены графики функций ЭП, восстановленные по полным наборам гармоник разных размеров. Сплошной линией обозначен график исходной функции ЭП, пунктирной линией - восстановленной. Сигналы на самых границах интервала я не учитывала при анализе. Пики на концах интерсвала аппроксимируются крайне плохо, добиться хорошей их аппроксимации мне не удалось, поэтому я решила забить. Вероятно, надо было взять другую функцию. Судя по этим графикам, для отличного восстановления функции ЭП хватает полного набора гормоник от 0-й до 15-й. Набор из гармоник от 0-й до 40-й полностью повторяет функцию ЭП, в том числе точную высоту пиков. Включение в набор гармоник с более высоким разрешением уже не вносит никакой вклад в качество восстановления.
Восстановление исходной функции ЭП при добавлении гауссового шума к амплитудам и фазамЧтобы сделать модель более приближенной к реальности, к амплитудам и фазам на стадии определения набора гармоник был добавлен гауссовский шум. Делается это с помощью параметров -F для амплитуд и -P для фаз. Для восстановления исходной функции использовался полный набор гармоник от 0-й до 15-й (как показано на предыдущем шаге, этого должно быть достаточно для отличного восстановления). Чтобы более беспристрастно оценивать качество восстановления функции при зашумлении, я дополнительно использовала параметр -s при определении функции из набора гармоник, так как в этом случае выдается график восстановленной функции ЭП без графика исходной функции. python func2fourier_py3.py func.txt -F 20 -P 20 python fourier-filter_py3.py func_ft.txt -r 0-15 python fourier2func_py3.py func_ft_filtered.txt / python fourier2func_py3.py -s func_ft_filtered.txt Варьирование этих парамеров показало (см рис 11-19, слева обычное восстановление функции, справа - без визуализации исходной функции), что для точности восстановления исходной функции более принципиально отсутствие шумов в фазах, а не в амплитудах. При F=0 P=20 сигнал не отличим от шума, тогда как при F=35 P=0 вполне отличим. При F=0 P=50 и F=50 P=0 ситуация одинаково плохая - сигнал абсолютно теряется. При этом интересно, что F=20 P=20 и F=35 P=35 выдают картинку в которой пики функции ЭП выделяются, но я думаю, это просто вопрос везения, и на самом деле выводов на основе этих графиков (рис 18-19) делать нельзя.
Восстановление исходной функции ЭП по неполному набору гармоникТак как в реальном эксперименте не всегда можно найти полный набор гармоник, рассмотрим, насколько хорошо восстанавливается исходная функция ЭП по неполному набору. Процедура выполнения вычислений стандартная, только на этапе "фильтрации" я попробовала удалить гармоники с самым маленьким, средним и самым большим разрешением (а именно с 0-й по 5-ю, с 5-й по 10-ю и с 10-й по 15-ю). Как и в прошлый раз для более беспристрастной оценки качества восстановления функции использую параметр -s при определении функции из неполного набора гармоник. python func2fourier_py3.py func.txt -F 20 -P 20 python fourier-filter_py3.py func_ft.txt -r 0-5,10-15 python fourier2func_py3.py func_ft_filtered.txt / python fourier2func_py3.py -s func_ft_filtered.txt Результат представлен на рисунках 20-23, слева обычное восстановление функции, справа - без визуализации исходной функции. Вопреки ожиданиям, получилось, что для восстановления исходной функции ЭП наиболее важны гармоники со средним разрешением, так как при удалении гармоник с 5-й по 10-ю график становится настолько шумным, что нельзя даже определить положение максимумов. Восстановление функции по набору гармоник от 0-й до 10-й выглядит лучше, чем по набору от 5-й до 15-й, причем, мне кажется, во втором случае то, что мы вообще можем распознать максимумы - дело везения. То есть, видимо, когда в наборе всего 15 гармоник, более важно знать параметры гармоник с низким разрешением.
Итоговая таблицаРазрешение - длина отрезка/номер гармоники. Полнота - количество гарминик в неполном наборе/количество гармоник в полном наборе.
© Дарья Потанина, 2019 |