%% ============================================================ % Wavelength–Frequency 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