Я хочу рассчитать длину когерентности из произвольного спектра, измеренного с помощью масс-спектрометра (спектральная плотность мощности как функция длины волны).На этот вопрос уже был дан ответ по адресу физика.stackexchange: https://physics.stackexchange.com/a/105961 Но у меня возникли некоторые проблемы с реализацией данной формулы, поэтому я надеюсь, что я нахожусь в нужном месте ...
Формула и предположения
Чтобы проверить мои расчеты, я решил смоделировать простой гауссовский спектр:
fmin = physconst('LightSpeed')/900e-9;
fmax = physconst('LightSpeed')/700e-9;
deltaf = 1/0.5e-9;
f = fmin:deltaf:fmax;
fcentral = physconst('LightSpeed')/800e-9;
ffwhm = 50e-9*physconst('LightSpeed')/(800e-9)^2;
I = exp(-(f-fcentral).^2./(2*(0.5*ffwhm)^2));
plot(f,I)
xlabel('frequency (Hz)'); ylabel('Intensity (a.u.)');
Формула (из комментариев в эта ссылка):
Gamma
- это степень когерентности, из которой я могу легко рассчитать длину когерентности.
Подход к решению
Если я прав, мой пример спектра I
связан с формулой следующим образом:
I = c/f^2*F(c/f)
Так что мне просто нужно сделать обратный Фурьепреобразование (?), чтобы получить Gamma
.Простое использование ifft
делает что-то странное ... Лучший результат, который я получил таким образом:
gamma = 2.*real(ifftshift(ifft(ifftshift(I))))*deltaf;
plot(1./f, gamma)
xlabel('time (s)'); ylabel('Degree of coherence (a.u.)');
После этого image Я бы ожидал, что Gamma
будет иметь FSHM 20 фс, хотя,Что я делаю не так?
Замечание
Я знаю, что этот вопрос касается не только программирования, но и физики.Я не знаю, являются ли мои проблемы слишком глупыми, чтобы понять физическое происхождение, или из-за невозможности использовать Matlab (особенно DFT) правильным способом.Может быть, это оба.Я с нетерпением жду каждого ответа, который приведет меня немного дальше.