165 lines
3.5 KiB
TypeScript
165 lines
3.5 KiB
TypeScript
import type { FrequencyBand } from '@/types/index.ts';
|
|
|
|
export const COMMON_FREQUENCIES: FrequencyBand[] = [
|
|
{
|
|
value: 70,
|
|
name: 'VHF Low',
|
|
range: '30-88 MHz',
|
|
type: 'VHF',
|
|
characteristics: {
|
|
range: 'long',
|
|
penetration: 'excellent',
|
|
typical: 'Military tactical, long-range ground wave',
|
|
},
|
|
},
|
|
{
|
|
value: 225,
|
|
name: 'Military UHF',
|
|
range: '225-400 MHz',
|
|
type: 'UHF',
|
|
characteristics: {
|
|
range: 'long',
|
|
penetration: 'good',
|
|
typical: 'NATO MILCOM, SINCGARS, air-ground',
|
|
},
|
|
},
|
|
{
|
|
value: 700,
|
|
name: 'Band 28',
|
|
range: '703-803 MHz',
|
|
type: 'LTE',
|
|
characteristics: {
|
|
range: 'long',
|
|
penetration: 'excellent',
|
|
typical: 'Extended range LTE, first responder (FirstNet)',
|
|
},
|
|
},
|
|
{
|
|
value: 800,
|
|
name: 'Band 20',
|
|
range: '791-862 MHz',
|
|
type: 'LTE',
|
|
characteristics: {
|
|
range: 'long',
|
|
penetration: 'excellent',
|
|
typical: 'Rural coverage, deep building penetration',
|
|
},
|
|
},
|
|
{
|
|
value: 900,
|
|
name: 'Band 8',
|
|
range: '880-960 MHz',
|
|
type: 'LTE',
|
|
characteristics: {
|
|
range: 'long',
|
|
penetration: 'excellent',
|
|
typical: 'GSM refarming, IoT, rural coverage',
|
|
},
|
|
},
|
|
{
|
|
value: 1800,
|
|
name: 'Band 3',
|
|
range: '1710-1880 MHz',
|
|
type: 'LTE',
|
|
characteristics: {
|
|
range: 'medium',
|
|
penetration: 'good',
|
|
typical: 'Urban/suburban, most common in Ukraine',
|
|
},
|
|
},
|
|
{
|
|
value: 1900,
|
|
name: 'Band 2',
|
|
range: '1850-1990 MHz',
|
|
type: 'LTE',
|
|
characteristics: {
|
|
range: 'medium',
|
|
penetration: 'good',
|
|
typical: 'North America, some military equipment',
|
|
},
|
|
},
|
|
{
|
|
value: 2100,
|
|
name: 'Band 1',
|
|
range: '1920-2170 MHz',
|
|
type: 'LTE',
|
|
characteristics: {
|
|
range: 'medium',
|
|
penetration: 'good',
|
|
typical: 'Most deployed LTE band globally (IMT 2100)',
|
|
},
|
|
},
|
|
{
|
|
value: 2600,
|
|
name: 'Band 7',
|
|
range: '2500-2690 MHz',
|
|
type: 'LTE',
|
|
characteristics: {
|
|
range: 'short',
|
|
penetration: 'fair',
|
|
typical: 'High capacity urban, shorter range',
|
|
},
|
|
},
|
|
{
|
|
value: 150,
|
|
name: 'VHF High',
|
|
range: '136-174 MHz',
|
|
type: 'VHF',
|
|
characteristics: {
|
|
range: 'long',
|
|
penetration: 'excellent',
|
|
typical: 'Tactical radio, emergency services',
|
|
},
|
|
},
|
|
{
|
|
value: 450,
|
|
name: 'UHF',
|
|
range: '400-470 MHz',
|
|
type: 'UHF',
|
|
characteristics: {
|
|
range: 'medium',
|
|
penetration: 'good',
|
|
typical: 'Military tactical radio, PMR446',
|
|
},
|
|
},
|
|
{
|
|
value: 3500,
|
|
name: 'Band 42/43 (n78)',
|
|
range: '3400-3800 MHz',
|
|
type: '5G',
|
|
characteristics: {
|
|
range: 'short',
|
|
penetration: 'poor',
|
|
typical: '5G NR, high bandwidth',
|
|
},
|
|
},
|
|
];
|
|
|
|
export const QUICK_FREQUENCIES = [700, 800, 900, 1800, 1900, 2100, 2600];
|
|
|
|
// Tactical radio presets for UHF/VHF
|
|
export const TACTICAL_FREQUENCIES = [70, 150, 225, 450];
|
|
|
|
// All quick frequencies grouped by band type
|
|
export const FREQUENCY_GROUPS = {
|
|
VHF: [70, 150],
|
|
UHF: [225, 450],
|
|
LTE: [700, 800, 900, 1800, 1900, 2100, 2600],
|
|
'5G': [3500],
|
|
} as const;
|
|
|
|
export function getFrequencyInfo(frequency: number): FrequencyBand | null {
|
|
return (
|
|
COMMON_FREQUENCIES.find((band) => Math.abs(band.value - frequency) < 50) ||
|
|
null
|
|
);
|
|
}
|
|
|
|
export function getWavelength(frequencyMHz: number): string {
|
|
const wavelengthMeters = 300 / frequencyMHz;
|
|
if (wavelengthMeters >= 1) {
|
|
return `${wavelengthMeters.toFixed(2)} m`;
|
|
}
|
|
return `${(wavelengthMeters * 100).toFixed(1)} cm`;
|
|
}
|