Разложение функции в ряд Фурье

1. Создание функции электронной плотности

Все скрипты были запущены из-под Python 3.5.2, для этого пришлось в одном месте поставить скобочки в команде print.
Функция была смоделирована следующей командой:
python3 compile-func.py -g 10,2,5+10,2,7+30.0,2,12+30.0,2,16+30.0,2,22+30,2,24 
Параметры взяты из примера variant7.txt.

Рис 1. Изображение смоделированной функции.


Эта функция соответствует молекуле из двух атомов, двум отдельным атомам и еще одной молекуле из двух атомов.

2. Расчет амплитуд и фаз сигналов, моделирующих экспериментальные данные.

Функция была разложена в ряд Фурье следующей командой:
python3 func2fourier.py -i func.txt -o range.txt 
Был получен файл с гармониками.

3. Восстановление функции ЭП по амплитудам и фазам части сигналов

Восстановление функции по всем возможным гармоникам:
python3 fourier2func.py -f func.txt -i range.txt

Рис 2. Функция, восстановленная по всем гармоникам.



Функция восстановлена идеально. Далее попробуем восстановить функцию по 1, 6, 11 и т.д. до 41 гармоник.
python3 fourier-filter.py -r 0-X -i range.txt -o range_X.txt (где X - число гармоник)
python3 fourier2func.py -f func.txt -i range_X.txt -o range_filX.txt

Рис 3а. Функция, восстановленная по первой гармонике (пунктиром).



Рис 3б. Функция, восстановленная по первым 6 гармоникам (пунктиром).



Рис 3в. Функция, восстановленная по первым 11 гармоникам (пунктиром).



Рис 3г. Функция, восстановленная по первым 16 гармоникам (пунктиром).



Рис 3д. Функция, восстановленная по первой 21 гармонике (пунктиром).



Рис 3е. Функция, восстановленная по первым 26 гармоникам (пунктиром).



Рис 3ё. Функция, восстановленная по первой 31 гармонике (пунктиром).



Рис 3ж. Функция, восстановленная по первым 36 гармоникам (пунктиром).



Рис 3з. Функция, восстановленная по первой 41 гармонике (пунктиром).


По 41 гармонике функция восстанавливается практически идеально. Далее будем использовать это число гармоник.

Посмотрим, как влияет на восстановление функции добавление шума к амплитуде, фазе, им обоим.
python3 func2fourier.py -F X -P Y -i func.txt -o *outputfilename1*.txt (X и Y это уровни шума для амплитуды и фазы)
python3 fourier-filter.py -r 0-40 -i *outputfilename1*.txt -o *outputfilename2*.txt 
python3 fourier2func.py -f func.txt -i *outputfilename2*.txt -o *outputfilename3*.txt


Рис 4а. Функция, восстановленная по данным с зашумлённой на 10% амплитудой.



Рис 4б. Функция, восстановленная по данным с зашумлённой на 10% фазой.



Рис 4в. Функция, восстановленная по данным с зашумлёнными на 10% амплитудой и фазой.



Видно, что решение достаточно устойчиво к шуму и в амплитуде, и в фазе.

Теперь посмотрим, как функция восстанавливается без первых X гармоник, где Х = 1, 2, 3, 4, 5, 10:
python3 fourier-filter.py -r X-40 -i range.txt -o ranX_40.txt 
python3 fourier2func.py -f func.txt -i ranX_40.txt -o X_40.txt

Рис 5а. Функция, восстановленная по гармоникам, кроме первой.



Рис 5б. Функция, восстановленная по гармоникам, кроме первых двух.



Рис 5в. Функция, восстановленная по гармоникам, кроме первых трёх.



Рис 5г. Функция, восстановленная по гармоникам, кроме первых четырёх.



Рис 5д. Функция, восстановленная по гармоникам, кроме первых пяти.



Рис 5а. Функция, восстановленная по гармоникам, кроме первых десяти.


Когда удаляем первую гармонику, то из функции вычитается константа.
При удалении дальнейших гармоник из функций вычитаются суммы синусоид. Удаление даже небольшого числа первых гармоник достаточно сильно влияет на качество восстановление функции, тем не менее, позиции атомов легко угадываются. Удаление 10 первых гармоник очень сильно портит решение, пики атомов похожи на пики шума.

Удалим часть гармоник из середины используемого набора (2х4, 14, 24).

Рис 6а. Функция, восстановленная по гармоникам 0-25,30-40.



Рис 6б. Функция, восстановленная по гармоникам 0-30,35-40.



Рис 6в. Функция, восстановленная по гармоникам 0-15,30-40.



Рис 6г. Функция, восстановленная по гармоникам 0-10,35-40.


Видно, что удаление одного и того же числа гармоник из разных частей набора неэквивалентно: удаление гармоник, расположенных ближе к началу ряда, приводит к более значимому падению качества восстановления функции. Удаление более половины набора гармоник приводит к решению, по которому уже не очень точно восстанавливается размер молекул, хотя положение некоторых отдельных атомов угадывается.
Добавим n+10ую гармонику.

Рис 7. Функция, восстановленная по гармоникам 0-40, 50.


Решение как было почти идеально, так и осталось почти идеально.

3. Таблица итогов

Таблица 1. Восстановление функции электронной плотности по разложению в ряд Фурье
Набор гармоник Разрешение, Å Полнота данных, % Шум амплитуды, % от F Шум фазы, % от φ Качество восстановления
Полный набор гармоник без шумов
0-498 0.06 100 0 0 отличное
0 - (т.к. const) 100 0 0 плохое
0-5 5 100 0 0 плохое
0-10 2.7 100 0 0 среднее
0-15 1.875 100 0 0 хорошее
0-20 1.4 100 0 0 отличное
0-25 1.15 100 0 0 отличное
0-30 0.96 100 0 0 отличное
0-35 0.83 100 0 0 отличное
0-40 0.73 100 0 0 отличное
Полный набор гармоник с шумами
0-40 0.73 100 10 0 отличное
0-40 0.73 100 0 10 отличное
0-40 0.73 100 10 10 хорошее
Неполный набор гармоник
1-40 0.73 97.5 0 0 отличное
2-40 0.73 92.8 0 0 отличное
3-40 0.73 92.6 0 0 отличное
4-40 0.73 90 0 0 отличное
5-40 0.73 87.8 0 0 отличное
10-40 0.73 75.6 0 0 среднее
0-25, 30-40 0.73 90.2 0 0 отличное
0-30, 35-40 0.73 90.2 0 0 отличное
0-15, 30-40 0.73 65.8 0 0 хорошее
0-10, 35-40 0.73 41.5 0 0 среднее
0-40, 50 0.73 82.3 0 0 отличное


Назад к странице седьмого семестра.


© Aleksei Efremov, 2017