📎 این مقاله‌ی تکمیلی به §۱.۴ (ثانیه — استاندارد زمان) گره خورده. اگه هنوز اون بخش رو نخوندی، توصیه می‌کنم اول اون رو بخونی چون تعریف رسمی ثانیه و چرایی انتخاب Cs-133 اونجاست.

ساعت اتمی فواره‌ای NIST-F1 در NIST بولدر، کلرادو
ساعت اتمی فواره‌ای NIST-F1 در NIST بولدر — استاندارد اولیه‌ی زمان و فرکانس ایالات متحده. سمت راست: نمودار شماتیک مسیر ۶ لیزر خنک‌کننده، حفره‌ی مایکروویو، و آشکارساز.

چرا سزیوم؟

هر اتم Cs-133 یک الکترون ظرفیت در لایه‌ی بیرونی داره. برهم‌کنش این الکترون با اسپین هسته باعث می‌شه حالت پایه‌ی اتم به دو زیرسطح انرژی به اصطلاح hyperfine (فراریز) تقسیم بشه. فاصله‌ی انرژی بین این دو زیرسطح دقیقاً معادل فرکانسی برابر با 9,192,631,770 Hz ـه.

6²S₁/₂ (before splitting) F = 4 F = 3 Δν = 9,192,631,770 Hz (≈ 9.19 GHz microwave) Hyperfine splitting of the Cs-133 ground state

از سال 1967، همین عدد به‌عنوان تعریف رسمی «ثانیه» در نظام SI پذیرفته شده. یعنی ثانیه یعنی دقیقاً همین تعداد نوسان تابش گذار بین دو زیرسطح.

نکته‌ی کلیدی: ساعت اتمی زمان را «می‌سازد» — نه اینکه فقط اندازه‌گیری‌اش کنه. در واقع یک نوسان‌ساز کوارتزی معمولی رو طوری تنظیم می‌کنه که دقیقاً با این گذار اتمی هم‌فاز بمونه. اگه کوارتز کمی deviation داشته باشه، سامانه بازخورد اون رو اصلاح می‌کنه. حاصلش پالس‌های ثانیه‌شماری‌اند که با گذار اتمی قفل‌اند.

نگاه کلی — قبل از ورود به جزئیات

نمودار کامل ساعت اتمی NIST-7 با تمام اجزا: منبع سزیوم، لیزر A و B، حفره‌ی مایکروویو، آشکارساز، سرووِمکانیزم و frequency divider
نمودار جامع ساعت اتمی NIST-7 (نسل پیش از NIST-F1). زیر تصویر: بزرگ‌نمایی اتم Cs-133 و برهم‌کنش الکترون با مایکروویو. این نسل هنوز از laser cooling استفاده نمی‌کرد — اتم‌ها به شکل beam حرارتی حرکت می‌کردن. NIST-F1 و F2 روش fountain رو جایگزین کردن که در ادامه توضیح می‌دیم.

مسیر اتم از چپ به راست: منبع سزیوم → Laser A (اتم‌ها رو به پایین‌ترین سطح انرژی می‌بره) → حفره‌ی مایکروویو (اگه فرکانس دقیقاً درست باشه، اتم‌ها به سطح بالاتر می‌رن) → Laser B (اتم‌های برانگیخته رو وادار به تابش می‌کنه) → آشکارساز (نور تابیده‌شده رو می‌خونه) → Servomechanism (فرکانس مایکروویو رو اصلاح می‌کنه) → Frequency Divider (9.2 GHz رو به پالس‌های ثانیه‌شمار تبدیل می‌کنه).

حالا هر مرحله رو با جزئیات ببینیم.

مرحله‌ی اول: سرد کردن با لیزر

نمودار شماتیک ساعت اتمی فواره‌ای سزیوم
نمودار شماتیک اجزای اصلی ساعت اتمی فواره‌ای: شش لیزر خنک‌کننده (پایین)، حفره‌ی مایکروویو (میانه)، آشکارساز فلورسانس (بالا)، و لیزر پروب. کنارش عکس واقعی برج NIST-F1.

در نسل مدرن ساعت‌های سزیومی مثل NIST-F2، ابتدا گازی از اتم‌های سزیوم وارد یه محفظه‌ی خلأ می‌شه. شش پرتو لیزر مادون‌قرمز از شش جهت عمود بر هم به مرکز محفظه تابانده می‌شن.

این لیزرها با تنظیم دقیق فرکانس (کمی پایین‌تر از فرکانس گذار اتمی، پدیده‌ای به اسم Doppler cooling)، در هر برخورد فوتون مقداری تکانه در خلاف جهت حرکت اتم منتقل می‌کنن. حاصل این کار، کند شدن حرکت گرمایی اتم‌ها تا دمایی نزدیک به صفر مطلق (چند میکروکلوین، حدود \( 0.5\ \mu\text{K} \)) ـه.

این تکنیک که «سرد کردن لیزری» یا optical molasses (ملاس نوری) نام داره، ابری کوچک از میلیون‌ها اتم تقریباً ساکن در مرکز محفظه ایجاد می‌کنه.

مرحله‌ی دوم: پرتاب فواره‌ای

با خاموش کردن موقت و نامتقارن دو لیزر عمودی، ابر اتمی به آرامی به سمت بالا «پرتاب» می‌شه — دقیقاً مثل آب یه فواره. سرعت پرتاب در حدود چند متر بر ثانیه‌ست.

سپس همه‌ی لیزرها خاموش می‌شن و اتم‌ها فقط تحت تأثیر جاذبه حرکت می‌کنن: بالا می‌رن، برای لحظه‌ای معلق می‌مونن، و دوباره سقوط می‌کنن. طول این مسیر رفت و برگشت حدود 1 m و کل زمان پروازش حدود 1 s ـه.

همین حرکت فواره‌ای اسم "cesium fountain" رو به این نسل از ساعت‌ها داده.

مرحله‌ی سوم: انتخاب حالت کوانتومی

پیش از ورود به ناحیه‌ی اندازه‌گیری، باید مطمئن شد همه‌ی اتم‌ها در یک زیرحالت مغناطیسی مشخص (معمولاً \( |F=3, m_F=0\rangle \)) قرار دارن، وگرنه سیگنال نهایی آلوده به گذارهای نامربوط می‌شه.

این کار در یک حفره‌ی مغناطیسی-عایق‌شده انجام می‌شه: یک تپ کوتاه مایکروویو یا میدان مغناطیسی ناهمگن، اتم‌های حالت نامطلوب رو به بیرون از مسیر می‌رونه یا به حالت هدف منتقل می‌کنه.

مرحله‌ی چهارم: برانگیختگی در حفره‌ی رمزی (Ramsey Cavity)

اینجا قلب ماجراست.

اتم‌ها هنگام بالا رفتن یک‌بار و هنگام پایین آمدن یک‌بار دیگه، از یک حفره‌ی تشدید مایکروویو عبور می‌کنن — یعنی رویهم دو بار با میدان مایکروویو برهم‌کنش دارن. این روش رو Ramsey interferometry یا separated oscillatory fields می‌گن.

تأخیر زمانی بین این دو برهم‌کنش (حدود 1 s، به‌خاطر مسیر بالا-پایین فواره) باعث می‌شه پهنای باند تشدید بسیار باریک بشه. هرچه این interrogation time طولانی‌تر باشه، دقت نهایی فرکانس بالاتر می‌ره — این یکی از اختراعات هوشمندانه‌ی Norman Ramsey ـه که براش نوبل 1989 گرفت.

اگه فرکانس مایکروویوی تزریق‌شده دقیقاً برابر با 9,192,631,770 Hz باشه، بیشترین درصد ممکن از اتم‌ها از حالت \( |F=3\rangle \) به حالت \( |F=4\rangle \) گذار می‌کنن. اگه فرکانس کمی جابه‌جا باشه، تنها بخشی از اتم‌ها گذار می‌کنن. این اختلاف، سیگنال اصلاحیه.

مرحله‌ی پنجم: تشخیص با فلورسانس

بعد از خروج از حفره‌ی رمزی، اتم‌ها وارد ناحیه‌ی آشکارسازی می‌شن و از میان یک پرتو لیزر پروب عبور می‌کنن که دقیقاً با یکی از گذارهای نوری اتم‌های حالت \( |F=4\rangle \) هم‌فرکانسه.

اتم‌هایی که در حفره‌ی رمزی به این حالت گذار کرده بودن، این نور رو جذب و دوباره به‌صورت فلورسانس (نور پراکنده) بازتاب می‌دن. یک آشکارساز نوری — معمولاً یک فوتودیود یا photomultiplier tube — شدت این فلورسانس رو ثبت می‌کنه.

هرچه فلورسانس بیشتر باشه، یعنی درصد بیشتری از اتم‌ها گذار کرده‌ن، یعنی فرکانس مایکروویو به مقدار واقعی گذار اتمی نزدیک‌تر بوده.

مرحله‌ی ششم: حلقه‌ی بازخورد و قفل فرکانس

سیگنال فوتودیود وارد یک feedback control loop می‌شه. سامانه فرکانس مایکروویو رو کمی به یک سمت و بار بعد به سمت دیگرِ قله‌ی تشدید (اصطلاحاً Ramsey fringe) می‌لغزونه و افت و خیز سیگنال فلورسانس رو مقایسه می‌کنه.

از روی این مقایسه، یک error signal تولید می‌شه که برای اصلاح دائمی فرکانس یک نوسان‌ساز کوارتزی (یا یک synthesizer دیجیتال) به کار می‌ره. نتیجه: نوسان‌سازی کوارتزی که پیوسته با گذار اتمی «قفل» می‌مونه و ازش پالس‌های ثانیه‌شمار استخراج می‌شه.

چرا این‌قدر دقیق است؟

مهندسان NIST مشغول کار روی NIST-F2 با عینک ایمنی لیزر
مهندسان NIST مشغول تنظیم NIST-F2 — عینک‌های ایمنی برای محافظت در برابر لیزرهای مادون‌قرمز و خط لیزر پروب.

عدم قطعیت گزارش‌شده‌ی NIST-F2 حدود \( 5 \times 10^{-16} \) ـه — یعنی این ساعت در بیش از ۳۰۰ میلیون سال یک ثانیه جلو یا عقب می‌افته.

بخش زیادی از این دقت به دو عامل برمی‌گرده:

  1. طولانی شدن interrogation time به‌خاطر حرکت فواره‌ای (که پهنای Ramsey fringe رو باریک‌تر می‌کنه). در نسل قبل (thermal beam clocks) این زمان چند میلی‌ثانیه بود؛ در fountain design تقریباً 1 s.
  2. سرمایش کریوژنیک حفره‌ی مایکروویو با نیتروژن مایع تا حدود \( -193\ °\text{C} \)، که خطای ناشی از blackbody radiation shift (اتم‌ها به‌خاطر تابش گرمایی محیط، انرژی گذارشون کمی جابه‌جا می‌شه) رو به حداقل می‌رسونه.
NIST-F2 در حال کار، نور بنفش ناحیه‌ی سرد کردن لیزری
NIST-F2 در حالت عملیاتی. نور بنفش از تابش لیزرهای خنک‌کننده در ناحیه‌ی MOT (magneto-optical trap) میاد.

از ساعت اتمی تا ساعت کامپیوتر شما — NTP

ممکنه فکر کنی این همه دقت به درد یه فیزیک‌دان می‌خوره. ولی کامپیوتر خودت الان از همین ساعت‌های اتمی استفاده می‌کنه.

پروتکل NTP (Network Time Protocol) یه سلسله‌مراتب هرمیه:

نتیجه: ساعت لپ‌تاپ تو، در نهایت به دقت ساعت اتمی سزیوم گره خورده — با یه واسطه‌ی چند مرحله‌ای.

یه ساعت پایتونی که خودش رو با NTP دقیق نگه می‌داره

"""ساعت خودمگام با NTP — هر 60 ثانیه به time.nist.gov وصل می‌شه.

نصب:
    pip install ntplib
"""
import ntplib
import time
from datetime import datetime, timedelta, timezone

NTP_SERVERS = [
    'time.nist.gov',      # NIST — Stratum 1، پشتوانه‌ی NIST-F2
    'ptbtime1.ptb.de',    # PTB (آلمان) — Stratum 1
    'tick.usno.navy.mil', # نیروی دریایی آمریکا — Stratum 1
]

def get_ntp_offset(server):
    """آفست ثانیه‌ای بین ساعت محلی و NTP server رو برگردون."""
    client = ntplib.NTPClient()
    resp = client.request(server, version=3, timeout=5)
    return resp.offset, resp.stratum, resp.delay

class AtomicSyncedClock:
    def __init__(self, resync_interval=60):
        self.offset = 0.0
        self.stratum = None
        self.last_sync = None
        self.resync_interval = resync_interval

    def sync(self):
        for server in NTP_SERVERS:
            try:
                offset, stratum, delay = get_ntp_offset(server)
                self.offset = offset
                self.stratum = stratum
                self.last_sync = time.time()
                print(f"[sync] {server}: offset={offset*1000:+.2f} ms, "
                      f"stratum={stratum}, rtt={delay*1000:.1f} ms")
                return True
            except Exception as e:
                print(f"[sync] {server} failed: {e}")
        return False

    def now(self):
        """UTC datetime با آفست NTP اعمال‌شده."""
        return datetime.now(timezone.utc) + timedelta(seconds=self.offset)

    def run(self):
        self.sync()
        while True:
            if time.time() - (self.last_sync or 0) > self.resync_interval:
                self.sync()
            print(f"UTC: {self.now().isoformat(timespec='milliseconds')} "
                  f"(stratum {self.stratum})", end='\r', flush=True)
            time.sleep(0.05)  # صد میلی‌ثانیه fps ندارد ولی نمایش نرمه

if __name__ == '__main__':
    AtomicSyncedClock(resync_interval=60).run()

خروجی نمونه:

[sync] time.nist.gov: offset=+3.42 ms, stratum=1, rtt=68.2 ms
UTC: 2026-07-03T10:34:52.148 (stratum 1)

offset می‌گه ساعت لپ‌تاپت چقدر با ساعت اتمی اختلاف داره. stratum=1 یعنی مستقیم از منبع اتمی خوندیم. rtt (round-trip-time) هرچقدر کمتر، دقت بیشتره.

همین‌الان زنده ببین — ساعت هم‌گام‌شده با NTP

UTC — همگام با timeapi.io (NTP)
00:00:00.000
اختلاف محلی: آخرین sync:

این ویجت هر 60 ثانیه با timeapi.io (که خودش از سرورهای NTP می‌خونه) sync می‌کنه، و بین دو sync با تایمر مرورگر خودت پیش می‌ره. اگه Local drift رو ببینی، اون اختلاف بین ساعت مرورگر تو و ساعت هم‌گام‌شده با NTP ـه — معمولاً چند میلی‌ثانیه‌ست، ولی اگه ساعت لپ‌تاپت خیلی وقته sync نشده، ممکنه ثانیه‌ها یا حتی بیشتر باشه.

چه چیزی رو باید یاد بگیری

بعد از این مقاله باید بتونی:

منابع

سوالی دارید؟ 🤔

اگه مفهومی نامشخص بود یا سوالی داشتید، اینجا بپرسید. جوابتون در اینجا منتشر می‌شه.