デジタル信号処理を実践するうえで、サンプリング周波数の計算方法を正確に理解することは不可欠です。
「サンプリング周波数の計算式って何?」「フーリエ変換結果からどうやって周波数を求めるの?」「標本化定理を使った設計計算がわからない」という疑問をお持ちの方も多いのではないでしょうか。
この記事では、サンプリング周波数に関連するすべての計算方法を、公式・具体例・フーリエ変換との関係まで網羅して解説いたします。
物理・工学系の学生の方から、Pythonなどで信号処理プログラムを書くエンジニアの方まで、幅広くご活用いただける実践的な内容です。
計算例を豊富に交えて解説しますので、数式が苦手な方でも理解しやすい構成となっています。
目次
サンプリング周波数の計算の結論:基本公式はfs=1/Ts
それではまず、サンプリング周波数の計算に関する結論を解説していきます。
サンプリング周波数に関する最も基本的な計算式は、サンプリング周波数fsとサンプリング周期Tsの逆数関係です。
サンプリング周波数の基本公式
fs = 1 / Ts
Ts = 1 / fs
fs:サンプリング周波数(Hz)
Ts:サンプリング周期(s:秒)
例:fs=44,100Hz → Ts=1/44,100≈22.68μs(マイクロ秒)
この基本式から出発して、ナイキスト定理に基づく最低サンプリング周波数の計算・FFT結果からの周波数算出・データ収録時間の計算など、様々な派生計算が行われます。
サンプリング周波数の計算では単位(Hz・kHz・MHz)の換算ミスが起きやすいため、常に単位を明示して計算を進めることが大切です。
標本化定理に基づくサンプリング周波数の計算
続いては、標本化定理に基づくサンプリング周波数の計算方法を確認していきます。
設計上の最低サンプリング周波数を求めるには、処理する信号の最高周波数を特定することから始めます。
最低サンプリング周波数の計算
ナイキスト-シャノンの標本化定理より、信号の最高周波数fmaxに対して必要な最低サンプリング周波数fsminは以下の式で求まります。
最低サンプリング周波数の計算
fsmin = 2 × fmax
計算例1:音楽(可聴域上限20kHz)
fsmin = 2 × 20,000 = 40,000Hz = 40kHz
計算例2:心電図(最高成分150Hz)
fsmin = 2 × 150 = 300Hz
計算例3:振動センサー(測定上限5kHz)
fsmin = 2 × 5,000 = 10,000Hz = 10kHz
余裕を持ったサンプリング周波数の計算
実際の設計ではナイキスト条件ギリギリではなく、安全率を考慮した余裕を持たせた計算を行います。
設計サンプリング周波数 fs=k × fmax(k=2.5〜5の安全係数)
音声系(高品質)の場合:k≈2.2〜2.5(例:44.1kHz/20kHz≈2.2)
計測系(高精度)の場合:k≈5〜10
制御系(リアルタイム)の場合:k≈10〜20以上
安全係数kを大きくするほど信号品質は向上しますが、データ量と処理負荷も増加します。
帯域通過信号のサンプリング周波数計算
搬送波に変調された帯域通過信号(バンドパス信号)では、信号の帯域幅Bに基づく計算ができます。
帯域通過サンプリング定理:fs≧2B(Bは信号の帯域幅)
例:中心周波数100MHz・帯域幅2MHzの信号は、fs≧4MHzでサンプリング可能(理論上)
ただし実際には帯域中心周波数fcとの関係による条件も満たす必要があり、2fc/fsが整数になるような周波数選択が最適です。
FFT(高速フーリエ変換)と周波数計算
続いては、FFTと周波数計算の関係について確認していきます。
サンプリング周波数とFFTのパラメータは、周波数分解能と解析可能な周波数範囲を決定します。
FFTの周波数分解能の計算
N点のFFTを行う場合、周波数分解能Δfは以下の式で求まります。
FFT周波数分解能の計算
Δf = fs / N
Δf:周波数分解能(Hz)
fs:サンプリング周波数(Hz)
N:FFTの点数(サンプル数)
計算例:fs=44,100Hz、N=1,024点
Δf = 44,100 / 1,024 ≈ 43.07Hz
周波数分解能を高めるには、N(FFT点数)を増やすか、fsを低くするかのどちらかが必要です。
N=1,024→2,048にすればΔfは半分になりますが、計算に必要な時間長(N/fs秒)も2倍になります。
FFTの周波数軸の計算
N点のFFT結果の周波数軸は以下の式で計算します。
FFT周波数軸の計算
k番目のFFT出力が対応する周波数:fk = k × (fs/N)
k=0, 1, 2, …, N/2(正の周波数成分)
計算例:fs=48,000Hz、N=2,048点
Δf=48,000/2,048≈23.44Hz
k=10の場合:f₁₀=10×23.44≈234.4Hz
最高周波数(ナイキスト):fs/2=24,000Hz(k=1,024)
Pythonでは np.fft.fftfreq(N, d=1/fs)を用いて周波数軸を自動計算できます。
FFT時間分解能と周波数分解能のトレードオフ
FFT分析では時間分解能と周波数分解能はトレードオフの関係にあります(不確定性原理と類似)。
時間分解能ΔT=N/fs(FFT窓の時間長)
周波数分解能Δf=fs/N
ΔT×Δf=1(一定)
高い周波数分解能(小さいΔf)を得るには長い時間窓(大きいN)が必要であり、高い時間分解能(短い時間窓)を求めると周波数分解能が低下します。
時間-周波数解析にはSTFT(短時間フーリエ変換)やウェーブレット変換が使われ、時間分解能と周波数分解能のバランスを調整します。
サンプリング周波数に関連する各種計算
続いては、サンプリング周波数に関連する各種計算を確認していきます。
実務で頻繁に登場する計算パターンを網羅的に解説します。
データ収録時間・サンプル数の計算
サンプル数とデータ収録時間の計算
サンプル数N = fs × T
収録時間T = N / fs
例1:fs=44,100Hz で5秒間収録するサンプル数
N = 44,100 × 5 = 220,500サンプル
例2:fs=48,000Hz で65,536サンプルの収録時間
T = 65,536 / 48,000 ≈ 1.365秒
データ容量の計算
デジタル音声データ容量の計算
データレート(bps)= fs × ビット深度 × チャンネル数
データ容量(bytes)= データレート × 収録時間 / 8
計算例:CD品質(fs=44,100Hz・16bit・2ch)で3分間
データレート=44,100×16×2=1,411,200bps≈1.41Mbps
データ容量=1,411,200×180/8=31,752,000bytes≈30.3MB
ナイキスト周波数とエイリアシング周波数の計算
ナイキスト周波数とエイリアシング周波数の計算
ナイキスト周波数fN = fs / 2
エイリアシング周波数(f>fNの場合):falias = |f − n×fs|(最小値を選択)
計算例:fs=10,000Hz(fN=5,000Hz)で7,000Hzの信号をサンプリング
falias = |7,000 − 10,000| = 3,000Hz
→7,000Hzの信号が3,000Hzとして現れる(エイリアシング)
正規化周波数への変換計算
デジタルフィルタ設計では、実際の周波数をサンプリング周波数で正規化した正規化周波数(normalized frequency)を使います。
正規化角周波数 ω=2πf/fs(ラジアン/サンプル)
または正規化周波数 fn=f/(fs/2)(0〜1の範囲、ナイキスト周波数が1に対応)
| 実際の周波数 | fs=44,100Hz のとき | 正規化周波数fn |
|---|---|---|
| 0Hz(直流) | 0Hz | 0 |
| 5,512.5Hz | fs/8 | 0.25 |
| 11,025Hz | fs/4 | 0.5 |
| 22,050Hz | fs/2(ナイキスト) | 1.0 |
Pythonによるサンプリング周波数計算の実装例
続いては、Pythonによるサンプリング周波数計算の実装例を確認していきます。
実際にプログラムでサンプリング周波数に関する計算を行う方法を紹介します。
基本的なサンプリング周波数計算
Pythonによるサンプリング周波数の基本計算
fs = 44100 # サンプリング周波数(Hz)
Ts = 1 / fs # サンプリング周期(秒)
f_nyquist = fs / 2 # ナイキスト周波数(Hz)
T_record = 5.0 # 収録時間(秒)
N_samples = int(fs * T_record) # サンプル数
print(f”サンプリング周期: {Ts*1e6:.2f}μs”)
print(f”ナイキスト周波数: {f_nyquist}Hz”)
print(f”5秒間のサンプル数: {N_samples}”)
FFT周波数軸の計算
PythonによるFFT周波数軸の計算
import numpy as np
fs = 44100 # サンプリング周波数
N = 1024 # FFT点数
freqs = np.fft.fftfreq(N, d=1/fs) # 周波数軸
freq_resolution = fs / N # 周波数分解能
print(f”周波数分解能: {freq_resolution:.2f}Hz”)
print(f”最大周波数: {fs/2}Hz”)
positive_freqs = freqs[:N//2] # 正の周波数成分のみ
最低サンプリング周波数の計算プログラム
最低サンプリング周波数の計算
def calc_min_fs(f_max, safety_factor=2.5):
“””最低サンプリング周波数を計算する”””
fs_min = 2 * f_max # ナイキスト条件
fs_design = safety_factor * f_max # 安全係数付き
return fs_min, fs_design
f_max = 20000 # 最高周波数20kHz
fs_min, fs_design = calc_min_fs(f_max, safety_factor=2.5)
print(f”理論最低fs: {fs_min}Hz”)
print(f”推奨設計fs: {fs_design}Hz”)
まとめ
この記事では、サンプリング周波数の計算方法について、基本公式fs=1/Ts・標本化定理に基づく最低fsの計算・FFT周波数分解能の計算・データ容量計算・エイリアシング周波数計算・正規化周波数・Pythonによる実装まで詳しく解説いたしました。
サンプリング周波数の計算の根幹はfs≧2×fmax(ナイキスト条件)であり、そこから派生するFFT分析・フィルタ設計・データ量見積もりのすべての計算がこの基本式と結びついています。
周波数分解能Δf=fs/N・時間分解能ΔT=N/fsというトレードオフ関係を把握することで、FFT設計の本質的な理解が深まります。
Pythonなどのプログラミング言語で実際に計算を実装する際は、単位換算とナイキスト周波数に常に注意しながら設計することが品質向上への近道となるでしょう。