В качестве модели для компьютерного эксперимента была выбрана следующая модель: 2 молекулы, одна содержащая два атома, другая - четыре(2+4). |
Атомы в каждой молекуле связаны ковалентно и находятся на расстоянии 1-1.5 анстрем друг от друга. |
Далее была задана функция, моделирующаяся в 1D график электронной плотности молекулы, на интервале [0, 30] (интервал измеряется в ангстрем) при помощи compile-func.py |
Гауссова функция определяется числами lambda,beta,gamma по формуле: gauss = lambda*exp(-(beta^2)*(X-gamma)^2). |
python compile-func.py -g 20,2,5+30,2,8+30.0,2,12+20.0,2,17+20.0,2,23+30,2,27. Max (gamma) расположены в точках 5,8,12,17,23,27, высота (lambda) 20, 30, 30, 20, 20, 30 соответственно; ширина "колокола" (beta) является порядка 1. |
Ширина колокола (beta) примерно соответстветствует диаметру атома - чуть больше порядка 1 ангстрема (электронная плотность резко падает дальше), а высота (lambda) зависит от числа электронов в атоме. |
 |
Рис 1, график электронной плотности |
Далее был произведен расчет амплитуд и фаз сигналов, моделирующих экспериментальные данные. |
Амплитуды и фазы были расчитаны по функции электронной плотности. При моделировании экспериментальных данных учитывается, что в эксперименте, во-первых, определяются амплитуды не для всех сигналов; во-вторых, интенсивности сигналов (следовательно, и амплитуды) |
определяются с некой погрешностью; в-третьих, фазы определятся для всех измененных сигналов, но опять же с погрешностью. |
Коэффициенты Фурье рассчитываются с помощью скрипта func2fourier.py |
Входной файл – функция, полученная как выходной файл скрипта compile-func.py |
python func2fourier.py -i func.txt |
где Выходной файл имеет следующие данные: номер гармоники, амплитуда, фаза. |
Далее был произведен отбор гармоник. |
Набор гармоник ряда Фурье называется полным, если известны все гармоники с номерами 0, 1, 2, ...,n. Разрешением полного набора гармоник называется период гармоники с номером n, т.е. с наибольшим номером. |
Период гармоники равен расстоянию между соседними максимумами синусоиды; его также называют длиной волны этой гармоники, хотя никакой физической волны нет. |
Отбор гармоник проводили с помощью скрипта fourier-filter.py, который отбирает нужные строки. |
Критерии оценки восстановления следующие: |
Отличное восстановление – легко определить положение максимума всех атомов по графику восстановленной функции.
|
Хорошее восстановление – можно предположить положения максимумов, зная число атомов, по восстановленной функции максимумы трудно отличить от шума. |
Нормальное восстановление – есть атомы, положение которых определить по восстановленной функции нельзя, а есть те, у которых можно. |
Плохое восстановление – положение атомов нельзя определить, можно только предсказать примерный размер "молекулы". |
Далее была предпринята попытка восстановить функцию неполному набору гармоник с помощью fourier2func.py: |
python fourier-filter.py -i func_ft.txt -r 0-5 -o func_ft0_5.txt. |
python fourier2func.py -f func.txt -i func_ft0_5.txt -o 0_5.txt. |
 |
Рис 2, восстановление функции по неполному набору гармоник (0-5). |
Как видно из приведенного изображения, данное восстановление получилось плохим. |
Далее были использованы друние параметры: |
python fourier-filter.py -i func_ft.txt -r 0-10 -o func_ft0_10.txt. |
python fourier2func.py -f func.txt -i func_ft0_10.txt -o 0_10.txt. |
 |
Рис 3, восстановление функции по неполному набору гармоник (0-10). |
Данное восстановление уже можно считать нормальным. |
python fourier-filter.py -i func_ft.txt -r 0-25 -o func_ft0_25.txt. |
python fourier2func.py -f func.txt -i func_ft0_25.txt -o 0_25.txt. |
 |
Рис 6, восстановление функции по неполному набору гармоник (0-25). |
Данное восстановление уже будет являться отличным. |
Таким образом, уже восстановлении функции по гармоникам 0-25 качество отличное, поэтому минимальное число гармоник, при котором у функции отличное восстановление: 25 - n0 |
Добавление шума к амплитуде (F) или/и к фазе (P) |
При восстановлении функции по первым 25 гармоникам было добавлено 10%, 15% и 25% шума к амплитудам и фазам отдельно. |
Добавление 10% шума к амплитуде: |
python func2fourier.py -F 10 -P 0 -i func.txt -o n_f10p0.txt |
python fourier-filter.py -r 0-25 -i n_f10p0.txt -o n_f10p0_25.txt |
python fourier2func.py -i n_f10p0_25.txt -o func_n_f10p0_25.txt |
 |
Рис 8, восстановление функции по неполному набору гармоник (0-25)при добавлении 10% шума к амплитуде. |
Добавление 15% шума к амплитуде: |
python func2fourier.py -F 15 -P 0 -i func.txt -o n_f15p0.txt |
python fourier-filter.py -r 0-25 -i n_f15p0.txt -o n_f15p0_25.txt |
python fourier2func.py -i n_f15p0_25.txt -o func_n_f15p0_25.txt |
 |
Рис 9, восстановление функции по неполному набору гармоник (0-25)при добавлении 15% шума к амплитуде. |
Добавление 25% шума к амплитуде: |
python func2fourier.py -F 25 -P 0 -i func.txt -o n_f25p0.txt |
python fourier-filter.py -r 0-25 -i n_f25p0.txt -o n_f25p0_25.txt |
python fourier2func.py -i n_f25p0_25.txt -o func_n_f25p0_25.txt |
 |
Рис 10, восстановление функции по неполному набору гармоник (0-25)при добавлении 25% шума к амплитуде. |
Добавление 10% шума к фазам: |
python func2fourier.py -F 0 -P 10 -i func.txt -o no_f0p10.txt |
python fourier-filter.py -r 0-25 -i no_f0p10.txt -o no_f0p10_25.txt |
python fourier2func.py -i no_f0p10_25.txt -o func_no_f0p10_25.txt |
 |
Рис 11, восстановление функции по неполному набору гармоник (0-25)при добавлении 10% шума к фазам. |
Добавление 15% шума к фазам: |
python func2fourier.py -F 0 -P 15 -i func.txt -o no_f0p15.txt |
python fourier-filter.py -r 0-25 -i no_f0p15.txt -o no_f0p15_25.txt |
python fourier2func.py -i no_f0p15_25.txt -o func_no_f0p15_25.txt |
 |
Рис 12, восстановление функции по неполному набору гармоник (0-25)при добавлении 15% шума к фазам. |
Добавление 25% шума к фазам: |
python func2fourier.py -F 0 -P 25 -i func.txt -o no_f0p25.txt |
python fourier-filter.py -r 0-25 -i no_f0p25.txt -o no_f0p25_25.txt |
python fourier2func.py -i no_f0p25_25.txt -o func_no_f0p25_25.txt |
 |
Рис 13, восстановление функции по неполному набору гармоник (0-25)при добавлении 25% шума к фазам. |
Можно сделать вывод, что шум в фазах вносит намного больший вклад в изменения, чем шум в амплитудах. |
Добавление 10% и 25% шума к амплитудам и фазам одновременно: |
Добавление 10% шума к амплитудам и фазам одновременно: |
python func2fourier.py -F 10 -P 10 -i func.txt -o noise_f10p10.txt |
python fourier-filter.py -r 0-25 -i noise_f10p10.txt -o noise_f10p10_25.txt |
python fourier2func.py -i noise_f10p10_25.txt -o func_noise_f10p10_25.txt |
 |
Рис 14, восстановление функции по неполному набору гармоник (0-25)при добавлении 10% шума к амплитудам и фазам одновременно |
Добавление 25% шума к амплитудам и фазам одновременно: |
python func2fourier.py -F 25 -P 25 -i func.txt -o noise_f25p25.txt |
python fourier-filter.py -r 0-25 -i noise_f25p25.txt -o noise_f25p25_25.txt |
python fourier2func.py -i noise_f25p25_25.txt -o func_noise_f25p25_25.txt |
 |
Рис 15, восстановление функции по неполному набору гармоник (0-25)при добавлении 25% шума к амплитудам и фазам одновременно. |
При добавлении 10% шума к амплитудам и фазам одновременно, качество восстановления становится хорошим, а при добавлении 25% шума - качество становится плохим. |
<Далее были расмотрены неполных гармоники. |
Для начала удалим 0 гармонику: |
python fourier-filter.py -i func_ft.txt -r 1-25 -o func_ft1_25.txt. |
python fourier2func.py -f func.txt -i func_ft1_25.txt -o 1_25.txt. |
 |
Рис 16, восстановление функции по неполному набору гармоник (1-25). |
Как можно хаметить, удаление 0 гармоники приводит к смещению функции вниз. |
Теперь удалим 1-3 гармоники: |
python fourier-filter.py -i func_ft.txt -r 4-25 -o func_ft4_25.txt. |
python fourier2func.py -f func.txt -i func_ft4_25.txt -o 4_25.txt. |
 |
Рис 17, восстановление функции по неполному набору гармоник (4-25). |
Как можно заметить, удаление 1-3 гармоник приводит к наибольшему искривлению амплитуды, смещенной вниз. |