Получите LOSVD из спектра галактики, используя метод Фурье.

Я пытаюсь реализовать программу, которая выводит кинематику (в частности, кинематические параметры: среднюю скорость вращения, скорость, дисперсию, коэффициенты Эрмита 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)

Что не дает мне правильного результата (см. последний график ниже), и я был бы признателен за замечания, комментарии и подсказки о возможных ошибках в теории и реализации.введите описание изображения здесь

Я уверен, что вы получите ответ здесь, но, к вашему сведению, есть также сайт Scientific Computing SE , который отлично подходит для числовых вопросов. Кстати, что произойдет, если вы сначала нормализуете ядро ​​свертки Гаусса к единице площади? например g = g / g.sum(), я сделал быстрый тест на некоторых простых данных, и это, по крайней мере, похоже на то, что нужно сделать.
Мне действительно интересно, почему мое гауссовское ядро ​​не нормализовано в первую очередь, поскольку я определил свой гауссов лосвд со стандартной нормализацией Гаусса N = 1 / sqrt (2pi * sigma ^ 2). Ваше предложение решает вопрос с крошечными значениями для моего синтетического спектра галактик, но последняя проблема остается.
Возможно, вы случайно оставили о 2 вне квадратного корня. В любом случае, я уверен, что кто-то сможет ответить на ваш главный вопрос.

Ответы (1)

Прежде всего, при обработке моих спектров до преобразования Фурье было несколько ошибок. Таким образом, недостающие шаги были:

1.) Спектры должны быть усреднены до 0 путем вычитания медианы.

2.) Вы должны коснуться спектров по краям с помощью оконной функции (например, np.blackman())

3.) Обрежьте пиксели на обоих концах спектра, чтобы избежать разрывов.

Затем вы восстанавливаете правильный входной LOSVD, используя простой метод деконволюции деления в пространстве Фурье.

Поздравляем! Всегда можно ответить на свой собственный вопрос, и если, скажем, проходит неделя, а больше ответов не появляется (что вполне вероятно в данном случае), просто продолжайте и примите свой собственный ответ.