<
В качестве модели для компьютерного эксперимента была выбрана следующая модель: 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 гармоник приводит к наибольшему искривлению амплитуды, смещенной вниз.

Седьмой семестр

Главная страница


© Полина Николаева 2014.