63 lines
2.2 KiB
Matlab
63 lines
2.2 KiB
Matlab
%% ============================================================
|
||
% 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
|