2025년 10월 1일 업데이트됨
모쿠 위상 계측기 이 장비는 1kHz에서 2GHz 사이의 주파수로 진동하는 입력 신호에 대해 최대 6µradian의 정밀도로 위상을 측정합니다. 디지털 방식으로 구현된 위상 고정 루프(PLL) 아키텍처를 사용하여 기존 록인 증폭기 및 주파수 카운터의 성능을 훨씬 뛰어넘는 탁월한 동적 범위와 정밀도를 제공합니다. 위상계는 클록 및 기타 발진기의 안정성을 정량화하는 데 일반적으로 사용되는 무차원 안정성 측정값인 알란 편차를 계산하고 그래프로 표시합니다. 이 가이드에서는 알란 편차 계산 방법과 중첩 변수 \(tau\) 추정기를 사용한 예시 계산을 다룹니다. 알란 편차 및 위상 측정에 대한 자세한 내용은 다음을 참조하십시오. 현대 시계와 발진기를 정량화하는 방법에 대한 웨비나를 시청해 보세요.
이 애플리케이션 노트를 다운로드하려면 클릭하세요. 여기에서 확인하세요.
데모 모드에서 Moku를 사용해 보세요
Moku 앱을 다운로드하세요 →
FAQ에 대한 답변을 받으세요
지식 기반을 방문하세요 →
Moku 사용자와 연결
사용자 포럼에 참여하세요 →
중첩된 변수 τ 추정기를 사용한 앨런 편차
알란 편차는 안정성을 측정하는 척도로, 일반적으로 시계 및 기타 발진기의 안정성을 정량화하는 데 사용됩니다. 주파수 \(y\)의 알란 편차 \(sigma_y\)는 관측 시간 \(tau\)의 함수로 다음 방정식에 따라 계산됩니다.\(시그마^2_y(tau) = frac{1}{2}왼쪽 각도(bar{y}_{n+1} – bar{y}_n 오른쪽) 각도\)
또는 위상 측정값 \(x\)를 사용하여 알란 편차를 측정할 수 있습니다. 위상과 주파수는 위상이 주파수의 적분 \(x = int{y dt}\)이므로 서로 관련되어 있으며, 그 식은 다음과 같습니다.\(시그마^2_y(tau) = frac{1}{2tau^2}왼쪽 각도( x_{n+2} – 2x_{n+1} + x_nright) 각도 \)
여기서 \(x\)는 시간에 따라 측정된 위상입니다. 실제로 무한한 시간에 대한 기대값을 계산하는 것은 불가능합니다. 유한한 샘플링 속도와 시간을 가진 하드웨어를 사용할 때는 이 방정식을 이산화해야 합니다. Moku 위상계는 중첩 변수 \(tau\) 방법을 사용하여 알란 편차를 계산하며, 이는 다음과 같이 정의됩니다.\(sigma^2_y(ntau_0, N) = frac{1}{2n^2 t_0^2 (N-2n)} sum^{N-2n-1}_{i=0}{ left( x_{i+2n}-2x_{i+n}+x_i right)^2} \)
여기서 \(tau_0\)는 위상계의 샘플링 주기이고 \(N\)은 입력 시계열에 대해 획득한 데이터 포인트 수입니다. \(n\)은 원하는 \(tau simeq n tau_0\)를 가장 잘 추정하는 샘플링 주기의 정수 배율입니다. \(x_i\)는 다음을 나타냅니다. i시계열의 요소.Moku 위상 계측기를 사용한 앨런 편차
이 예에서 우리는 1MHz 신호의 Allan 편차를 측정했습니다. Moku:Pro 위상계. 신호 주파수는 150Hz에서 10분 동안 측정되었습니다. 앨런 편차를 표시하려면 Moku 디스플레이 상단의 "주파수" 탭을 선택하고 플롯 영역에서 "앨런 편차"를 선택하세요. Moku Phasemeter는 위에 표시된 위상 정보를 사용하여 주파수의 앨런 편차만 계산합니다. "위상" 또는 "진폭" 탭을 선택하더라도 앨런 편차 플롯은 변경되지 않습니다.
그림 1: 위상계 켜짐 Moku:Pro 1MHz 신호의 앨런 편차를 표시합니다.
파이썬 구현
우리는 파이썬에서 동일한 계산을 수행하여 위상계의 정확도를 검증할 것입니다. 함수 cal_oadev 이 함수는 위상 정보의 시계열, 샘플링 속도 및 관측 시간 \(tau\) 배열을 입력으로 받습니다. 위의 방정식을 사용하여 중첩된 Allan 편차를 계산하고 \(ntau_0\)와 \(sigma_y (n tau_0)\)를 배열로 반환합니다. 이 함수를 사용하려면 NumPy 및 math 라이브러리가 필요합니다.#Import libraries import numpy as np import math def cal_oadev(data,rate,tauArray): tau0 = 1 / rate # 샘플링 기간을 계산합니다. dataLength = data.size # N을 계산한다 dev = np.array([]) # 출력을 저장할 빈 배열을 만듭니다. actualTau = np.array([]) 을 통한 i in tauArray: n = math.floor(i / tau0) # 타우 값이 주어지면 n을 계산합니다. if n == 0: n = 1 # tau가 샘플링 기간보다 작으면 최소 n을 사용합니다. currentSum = 0 # 합계를 초기화합니다. 을 통한 j in range(0, dataLength - 2*n): # 합계를 제곱하여 누적합니다. currentSum += (data[j+2*n] - 2*data[j+n] + data[j])**2 # 정규화 계수로 나누기 devAtThisTau = currentSum / (2*n**2 * tau0**2 * (dataLength - 2*n)) dev = np.append(dev, np.sqrt(devAtThisTau)) actualTau = np.append(actualTau, n*tau0) return actualTau, dev #실제 타우와 중첩된 앨런 편차를 반환합니다.
계산 예
이 예시에서는 이전에 Moku에서 수집한 시계열을 가져와 Python 스크립트를 사용하여 Allan Deviation을 계산했습니다. 모든 원시 데이터와 스크립트는 여기에서 확인하실 수 있습니다. 여기에서 확인하세요시계열 데이터는 "data.csv" 파일에서 확인할 수 있습니다. 이 데이터는 내장된 기능을 사용하여 얻은 것입니다. 데이터 로거 Phasemeter에서 첫 번째 열은 측정된 시간(초)이고, 네 번째 열은 측정된 위상(사이클)입니다. "CalculateAllanDeviation.py" 스크립트는 Excel 파일을 읽고 cal_oadev "AllanFunc.py" 파일에 있는 함수를 사용합니다. 알란 편차는 로그 스케일로 τ의 함수로 표시됩니다. 알란 편차 그래프는 Moku:Pro와 Python 스크립트 간에 잘 일치했습니다. 이 분석을 실행하려면 matplotlib 및 pandas 라이브러리가 필요합니다.
그림 2: 기록된 위상 정보를 바탕으로 파이썬을 사용하여 계산한 앨런 편차.



