Восстановление электронной плотности


Задание функции

Модель эксперимента: 5 атомов, расположенных на расстоянии ~5 Å на отрезке [0, 30]. Электронные плотности атомов описываются гауссовой кривой. Функция электронной плотности атомов на этом отрезке была задана с помощью скрипта compile-func.py:

python compile-func.py -g 30,3,3+40,3,4.3+2,3.5,6.5+20,3,7.5+25,4.1,5.6

Выходной файл скрипта compile-func.py - текстовый файл func.txt, в котором описана заданная функция (в виде пар X – Y). Скрипт также позволяет получить изображение заданной совокупности гауссовых функций (рис. 1).

Рисунок 1.  График заданной функции - совокурность гауссовых функций.

Полные наборы гармоник

Расчёт коэффициентов Фурье

Коэффициенты разложения функции в ряд Фурье были получены с помощью скрипта func2fourier.py:

python func2fourier.py -i func.txt -o func_ft.txt

Выходной файл скрипта func2fourier.py – текстовый файл func_ft.txt. В нём приведены амплитуды и фазы гармоник, а также их номера.

Отбор гармоник и восстановление функций

Из 499 гармоник были отбирались гармоники от 0 до n0 такие, которых было бы достаточно для восстановления по полному набору гармоник (0, 1, ..., n0) функции положения максимумов всех гауссовых слагаемых («отличное восстановление»):

python fourier-filter.py -r 0-20 -i func_ft.txt -o func_ft_0-20.txt
python fourier2func.py -f func.txt -i func_ft_0-20.txt -o two_func_0-20.txt
python fourier-filter.py -r 0-30 -i func_ft.txt -o func_ft_0-30.txt
python fourier2func.py -f func.txt -i func_ft_0-30.txt -o two_func_0-30.txt
python fourier-filter.py -r 0-40 -i func_ft.txt -o func_ft_0-40.txt
python fourier2func.py -f func.txt -i func_ft_0-40.txt -o two_func_0-40.txt

Значение n0 было определено равным 40. Ниже приведены графики (рис. 2-4)восстановленных функций по полным наборам гармоник для n, равных 20, 30 и n0 = 40 (результат занесен в таблицу 1).

Рисунок 2.  График восстановленной функции, n0 = 20 (сплошная линия - исходная функция, пунктир - восстановленная). Рисунок 3.  График восстановленной функции, n0 = 30 (сплошная линия - исходная функция, пунктир - восстановленная). Рисунок 4.  График восстановленной функции, n0 = 40 (сплошная линия - исходная функция, пунктир - восстановленная).

Восстановление для n = 20 можно оценить как «среднее», так как положение не всех атомов можно определить по восстановленной функции. Для n = 30 по восстановленной функции можно угадать положение всех максимумов, но некоторые максимумы плохо отличимы от шума («хорошее восстановление»). При n = 40 уже возможно определить положение всех гауссовых слагаемых функции («отличное восстановление»).

Добавление шума

Затем к амплитудам (F) и фазам (P) был добавлен шум (20% к амплитуде; 20% к фазе; по 10% и 20% к амплитуде и фазе):

Команды для добавления шума только к амплитуде:
python func2fourier.py -F 20 -i func.txt -o ft_noise20-0.txt
python fourier-filter.py -r 0-40 -i ft_noise20-0.txt -o ft_noise20-0_n0.txt
python fourier2func.py -i ft_noise20-0_n0.txt -o two_func_noise20-0_n0.txt
Команды для добавления шума только к фазе:
python func2fourier.py -P 20 -i func.txt -o ft_noise0-20.txt
python fourier-filter.py -r 0-40 -i ft_noise0-20.txt -o ft_noise0-20_n0.txt
python fourier2func.py -i ft_noise0-20_n0.txt -o two_func_noise0-20_n0.txt
Команды для добавления шума к амплитуде и фазе (10%):
python func2fourier.py -F 10 -P 10 -i func.txt -o ft_noise10-10.txt
python fourier-filter.py -r 0-40 -i ft_noise10-10.txt -o ft_noise10-10_n0.txt
python fourier2func.py -i ft_noise10-10_n0.txt -o two_func_noise10-10_n0.txt
Команды для добавления шума к амплитуде и фазе (20%):
python func2fourier.py -F 20 -P 20 -i func.txt -o ft_noise20-20.txt
python fourier-filter.py -r 0-40 -i ft_noise20-20.txt -o ft_noise20-20_n0.txt
python fourier2func.py -i ft_noise20-20_n0.txt -o two_func_noise20-20_n0.txt

Восстановление функции производилось по полному набору гармоник 0, 1, ..., n0. Качество восстановления заметно снизилось (можно охарактеризовать его как «среднее»), что видно на изображениях (рис. 5-8) и занесено в таблицу 1). Однако везде присутствуют пять пиков, соответствующие тяжелым атомам, поэтому данные восстановления нельзя назвать «плохими».

Рисунок 5.  Добавление шума F = 20 (сплошная линия - исходная функция, пунктир - восстановленная). Рисунок 6.  Добавление шума P = 20 (сплошная линия - исходная функция, пунктир - восстановленная).
Рисунок 7.  Добавление шума F = 10 и P = 10 (сплошная линия - исходная функция, пунктир - восстановленная). Рисунок 8.  Добавление шума F = 20 и P = 20 (сплошная линия - исходная функция, пунктир - восстановленная).

Неполные наборы гармоник

Удаление начальных гармоник

Для получения неполного набора гармоник были удалены одна и две начальные гармоники (гармоника с номером 0; гармоники с номерами 0 и 1). В случае удаления первой гармоники (рис. 9) восстановленная функция смещается по оси ординат, однако результат восстановления можно считать «отличным», так как значение первой гармоники равно числу F0 – первому коэффициенту ряда Фурье. В результате удаления первых двух гармоник (рис. 10) восстановленная функция сильно искажается, но значения максимумов четко видны.

Команды для удаления первой гармоники:
python fourier-filter.py -r 1-40 -i func_ft.txt -o ft_1-40.txt
python fourier2func.py -i ft_1-40.txt -o two_func_1-40.txt
Команды для удаления первых двух гармоник:
python fourier-filter.py -r 2-40 -i func_ft.txt -o ft_2-40.txt
python fourier2func.py -i ft_2-40.txt -o two_func_2-40.txt

Рисунок 9.  График восстановленной функции без первой гармоники (сплошная линия - исходная функция, пунктир - восстановленная). Рисунок 10.  График восстановленной функции без первой и второй гармоник (сплошная линия - исходная функция, пунктир - восстановленная).

Удаление гармоник из середины набора

Для получения неполного набора гармоник c помощью fourier-filter.py были удалены некоторые гармоники. Удаление как 8% (рис. 11), так и 12% (рис. 12) гармоник в середине набора привело к заметному ухудшению качества восстановления (его можно охарактеризовать как «среднее»). Следовательно, при удалении гармоник в середине набора максимумы от «атомов» становятся менее отличимы от шума.

Команды для удаления 8% гармоник в середине набора:
python fourier-filter.py -r 0-20,24-40 -i func_ft.txt -o ft_0-20_24-40.txt
python fourier2func.py -i ft_0-20_24-40.txt -o two_func_0-20_24-40.txt
Команды для удаления 12% гармоник в середине набора:
python fourier-filter.py -r 0-10,14-17,20-40 -i func_ft.txt -o ft_0-10_14-17_20-40.txt
python fourier2func.py -i ft_0-10_14-17_20-40.txt -o two_func_0-10_14-17_20-40.txt
Рисунок 11.  График восстановленной функции без серединных гармоник 21-23 (сплошная линия - исходная функция, пунктир - восстановленная). Рисунок 12.  График восстановленной функции без серединных гармоник 11-13, 18-19 (сплошная линия - исходная функция, пунктир - восстановленная).

Добавление гармоники n0+10

К набору гармоник 0, 1, ..., 40 была добавлена гармоника 50:

python fourier-filter.py -r 0-40,50 -i func_ft.txt -o ft_0-40_50.txt
python fourier2func.py -i ft_0-40_50.txt -o two_func_0-40_50.txt

Добавление гармоники с номером n0+10 к набору гармоник 0, 1, ..., n0 практически не изменило качество восстановления.

Рисунок 13.  График восстановленной функции с гармониками 0-40 и 50 (сплошная линия - исходная функция, пунктир - восстановленная).

Определение разрешения и полноты данных

Для полного набора гармоник разрешение - это период гармоники с наибольшим номером. Для набора гармоник 0-40 разрешение равно 30 Å / 40 ≈ 0,75 Å. Полнота данных определяется как процент гармоник в наборе, период которых не меньше разрешения от числа гармоник в полном наборе для этого разрешения. Для полного набора полнота данных равна 100%.

Таблица 1.  Восстановление функции по коэффициентам ряда Фурье

Набор гармоник Разрешение, Å Полнота данных, % Шум амплитуды (% от F) Шум фазы (% от phi) Качество восстановления
Полный набор гармоник
0-20 1.5 100 0 0 Среднее
0-30 1 100 0 0 Хорошее
0-40 0.75 100 0 0 Отличное
0-40 0.75 100 20 0 Среднее
0-40 0.75 100 0 20 Среднее
0-40 0.75 100 10 10 Среднее
0-40 0.75 100 20 20 Среднее
Неполный набор гармоник
1-40 0.75 97.5 0 0 Отличное
2-40 0.75 95 0 0 Отличное
0-20, 24-40 0.75 92.5 0 0 Среднее
0-10, 14-17, 20-40 0.75 87.5 0 0 Среднее
0-40, 50 0.75 100 0 0 Отличное
© Novikova Maria, 2015
Последнее обновление: 25.10.2015