Files
imdd_silas/Functions/convert_freq_lambda.m
2025-10-17 08:02:30 +02:00

63 lines
2.2 KiB
Matlab
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
%% ============================================================
% WavelengthFrequency Conversion Utilities
% ============================================================
% Example usage:
% f = lambda2freq(1310e-9); % 1310 nm -> Hz
% lambda = freq2lambda(224e12); % 224 THz -> m
% delta_lambda_nm = df2dlambda(224e12, 400e9); % 400 GHz @ 224 THz -> nm
% delta_freq_GHz = dlambda2df(1310e-9, 3.45); % 3.45 nm @ 1310 nm -> GHz
%% ---- Core conversion functions ----
function f = lambda2freq(lambda)
% lambda2freq Convert wavelength [m] → frequency [Hz]
c = physconst('lightspeed');
f = c ./ lambda;
end
function lambda = freq2lambda(f)
% freq2lambda Convert frequency [Hz] → wavelength [m]
c = physconst('lightspeed');
lambda = c ./ f;
end
%% ---- Differential conversions ----
function d_lambda = df2dlambda(f_center, d_f)
% df2dlambda Convert frequency spacing Δf [Hz] → wavelength spacing Δλ [m]
% around a given center frequency f_center [Hz].
% Uses first-order differential: Δλ ≈ (c / f^2) * Δf
c = physconst('lightspeed');
d_lambda = (c ./ (f_center.^2)) .* d_f;
end
function d_f = dlambda2df(lambda_center, d_lambda)
% dlambda2df Convert wavelength spacing Δλ [m] → frequency spacing Δf [Hz]
% around a given center wavelength λ_center [m].
% Uses first-order differential: Δf ≈ (c / λ^2) * Δλ
c = physconst('lightspeed');
d_f = (c ./ (lambda_center.^2)) .* d_lambda;
end
%% ============================================================
% Example section (can be commented out)
% ============================================================
if ~isdeployed
fprintf('--- Example conversions ---\n');
lambda_nm = 1310; % nm
lambda = lambda_nm * 1e-9; % m
f = lambda2freq(lambda); % Hz
fprintf('λ = %.1f nm → f = %.3f THz\n', lambda_nm, f/1e12);
d_f = 2000e9; % 400 GHz spacing
d_lambda = df2dlambda(f, d_f); % [m]
fprintf('Δf = %.0f GHz @ %.1f nm → Δλ = %.3f nm\n', d_f/1e9, lambda_nm, d_lambda*1e9);
% Verify reverse direction
d_f_back = dlambda2df(lambda, d_lambda);
fprintf('Δλ = %.3f nm @ %.1f nm → Δf = %.0f GHz\n', d_lambda*1e9, lambda_nm, d_f_back/1e9);
end