Я пытаюсь реализовать программу, которая выводит кинематику (в частности, кинематические параметры: среднюю скорость вращения, скорость, дисперсию, коэффициенты Эрмита h3 и h4) из эллиптического спектра галактики. Я знаю, что это было реализовано многими способами, наиболее распространенным в последнее время является ppxf, но я хочу сделать это в образовательных целях. Я начал с работы со спектром (variablename = spec) звезды K2III (поскольку они довольно распространены в галактиках раннего типа), я удалил континуум спектра и ребинировал его до логарифмического размера длины волны. Затем я создал искусственный спектр галактики (variablename = spec_gal), расширив свой звездный спектр с помощью gaussian losvd с дисперсией 200 км/с. Поэтому я только что рассчитал свертку между звездным спектром и losvd, используя np.convolve().
spec_gal = np.convolve(losvd_gauss, spec, mode='same')
Почему значения потока становятся такими маленькими, когда я сворачиваю LOVD со спектром, это должно просто уширить линии поглощения, не так ли? Я предполагаю, что это потому, что я умножаю небольшие значения моего лосвд на спектральные значения.
В качестве небольшого теста я знаю, что хотел получить обратно свой лосвд из синтетического спектра галактики с помощью преобразования Фурье. Я подумал, что поскольку свертка является мультипликативной в пространстве Фурье, я могу просто вычислить преобразования Фурье своих спектров, используя scipy.fft().
spec_fourier = fft(spec)
spec_gal_fourier = fft(spec_gal)
И получить losvd в фурье-пространстве, разделив спектр моей галактики в фурье-пространстве на звездный спектр.
losvd_fourier = spec_gal_fourier/spec_fourier
Я построил значения np.abs() моих преобразованных Фурье спектров. Я думал, что смогу восстановить свой losvd, просто выполнив обратное преобразование Фурье с помощью scipy.ifft().
losvd = ifft(losvd_fourier)
Что не дает мне правильного результата (см. последний график ниже), и я был бы признателен за замечания, комментарии и подсказки о возможных ошибках в теории и реализации.
Прежде всего, при обработке моих спектров до преобразования Фурье было несколько ошибок. Таким образом, недостающие шаги были:
1.) Спектры должны быть усреднены до 0 путем вычитания медианы.
2.) Вы должны коснуться спектров по краям с помощью оконной функции (например, np.blackman())
3.) Обрежьте пиксели на обоих концах спектра, чтобы избежать разрывов.
Затем вы восстанавливаете правильный входной LOSVD, используя простой метод деконволюции деления в пространстве Фурье.
ооо
g = g / g.sum()
, я сделал быстрый тест на некоторых простых данных, и это, по крайней мере, похоже на то, что нужно сделать.ошибка
ооо