パラメータ設定
リセット
信号は決定論的な擬似乱数(固定seed)で生成されるため、同じパラメータなら毎回同じ波形になります。
信号と自己相関
上段=信号 x[n](青)/下段=正規化自己相関 ρ[k](赤)、縦線=最大ピーク位置 k
理論・主要公式
バイアス自己相関は、信号 x[n] と自分自身を時間ラグ k だけずらした内積の総和を、常に N で割って定義されます:
$$R_{xx}[k] = \frac{1}{N}\sum_{n=0}^{N-k-1} x[n]\,x[n+k]$$
正規化自己相関 ρ[k](−1〜+1 の範囲、ρ[0]=1):
$$\rho[k] = \frac{R_{xx}[k]}{R_{xx}[0]}$$
信号 x[n] は周期 T = 1/f_0 の正弦波にガウスノイズを加えたものです:
$$x[n] = A\sin(2\pi f_0 n) + \sigma\,\eta[n]$$
周期信号は k=T で大きな自己相関値を残すため、k>0 範囲の最大ピーク位置が推定周期 T_est となります。SN比は (A/σ)² で定義されます。
自己相関関数シミュレーターとは
🙋
センサーから取れた波形がノイズだらけで、目で見ても周期があるのかすらわかりません。これってどうやって周期を見つけるんですか?
🎓
そういうときに使うのが自己相関関数だよ。ざっくり言うと、信号を時間方向に少しずつずらして、元の信号と「どれくらい似ているか」を測る関数なんだ。式で書くと $R_{xx}[k]=\frac{1}{N}\sum x[n]\,x[n+k]$。上のシミュレーターでデフォルトの状態を見てごらん。下段の赤いカーブが k=20 で大きく持ち上がっているはずだよ。それが周期 T=20 sample のサインだ。
🙋
え、ノイズも一緒に混ざってるのに、なんで周期だけきれいに見えるんですか?
🎓
ノイズは時間的に無相関だから、k>0 ではプラスとマイナスが平均化されてほぼゼロに潰れるんだ。一方、周期信号は同じ位相が T ごとに必ず戻ってくるから、k=T, 2T, 3T... できれいなピークが残る。シミュレーターで「ノイズ標準偏差 σ」を 0 にしてみて。完全な正弦波の自己相関は減衰しない振動カーブになる。逆に σ を上げると k=0 の値だけがどんどん大きくなって、ノイズが k=0 に集中するのがわかるよ。
🙋
「サンプル数 N」を増やすと何が変わるんですか?
🎓
N が大きいほどノイズの平均化が効くから、SN比が低くてもピークが安定して見える。N=128 と N=1024 で σ=2 くらいに設定して比べてみると、長い方が周期ピークがくっきり残るのがわかるはずだ。実務では「測定時間を長くとれば、より弱い周期も検出できる」という、この経験則そのものだよ。
🙋
「SN比」のカードが dB 表示になってますけど、これってどういう意味ですか?
🎓
SN比は信号パワーとノイズパワーの比で、ここでは $\text{SNR}=(A/\sigma)^2$ と定義してる。dB にすると $10\log_{10}(\text{SNR})$ で、デフォルト A=1, σ=0.5 なら 6.02 dB だ。SN比が下がるほど周期ピークの高さ ρ(T) も下がるから、両者を見比べると「どこまでなら周期を検出できるか」の感覚がつかめるよ。実務の経験則では ρ(T) が 0.1 を切るあたりが識別限界の目安だ。
よくある質問
なぜラグ k=0 でいつも R[0] が最大になるのですか?
k=0 では信号と「ぴったり同じ自分自身」の内積をとるため、必ず R[0] = (1/N)·Σ x[n]² ≥ R[k] となります。これは信号の平均パワー(分散に近い量)に相当し、正規化したときに ρ[0]=1 になる基準値です。一方ノイズ成分も k=0 では完全に相関するため、ノイズが大きいほど R[0] は大きくなります。
k>0 で ρ[k] が負になることはありますか?
あります。正弦波の半周期分(k=T/2)ずらすと符号が反転するため、ρ[T/2] ≈ −ρ[0] になります。デフォルト設定では k=10(T=20 の半周期)付近で大きな負のディップが見えるはずです。これは周期信号特有の性質で、矩形波や三角波でも同様にプラスとマイナスのピークが交互に並びます。
バイアス推定だとなぜ k が大きい側で値が小さくなるのですか?
分母を常に N としているため、実際に内積に寄与する項の数(N−k 個)に対して過小評価になります。k=N/2 では実質半分のサンプルしか使われていないのに N で割るため、値が半分程度に圧縮されます。不偏推定(分母を N−k にする)はこの問題を解消しますが、k が N に近づくと分散が爆発するため、周期検出には安定したバイアス推定が好まれます。
FFT を使った高速計算とは何が違いますか?
本ツールは定義式どおりの O(N²) 直接計算ですが、実務では Wiener-Khinchin の定理を使い、パワースペクトル密度を逆 FFT する O(N log N) の高速計算が標準です。結果は同じですが、ゼロパディングや窓関数の扱いに注意が必要です。教育目的では直接計算の方が定義の理解に向いているため、ここでは直接法を採用しています。
実世界での応用
ピッチ検出と音声解析: 人間の声や楽器音の基本周波数(ピッチ)を自動推定する最も基本的な手法が自己相関です。録音した音声の自己相関関数で最大ピーク位置を求め、そのラグの逆数からピッチ周波数を計算します。電話の音質補正、カラオケの採点、音声合成のフォルマント抽出など、信号処理の現場で広く使われています。
振動解析と機械診断: 回転機械の振動センサ信号には、軸の回転周期や歯車の噛み合い周期が含まれます。自己相関で周期成分を抽出すると、特定の故障モード(ベアリングの内輪傷、外輪傷、軌道輪欠陥など)に対応する周期が見えてきます。スペクトル解析と組み合わせて、状態監視(CBM)や予知保全の重要なツールとなっています。
レーダーとソナーの相関検出: 送信したパルスと受信信号の相互相関(自己相関と同じ計算)で、ターゲットまでの距離を測ります。ノイズに埋もれた弱い反射波でも、相関処理によって処理利得(おおむね √N 倍)が得られ、検出感度が劇的に向上します。GPS の C/A コード相関、UWB レーダー、医用超音波エコーなど、現代の測距技術の根幹をなす考え方です。
金融時系列と気象データ: 株価リターンや気温データに含まれる周期性(日内パターン、季節性、ビジネスサイクル)を検出するときに使います。AR モデルの次数推定や ARIMA の同定にも、自己相関関数(ACF)と偏自己相関関数(PACF)が必須の道具となっています。
よくある誤解と注意点
最も多い誤解は、「自己相関のピークが見えれば必ず周期信号が存在する」 と考えてしまうことです。実際には、サンプル数 N が小さいと、純粋なノイズだけでも偶然それらしいピークが出てしまいます。シミュレーターで A=0、σ=1、N=128 にしてみてください。明確な周期がないのに、k>0 のどこかにピークが残るはずです。実務では複数の試行で同じラグにピークが繰り返し現れるか、または統計的検定(信頼区間 ±2/√N など)で有意性を確認する必要があります。
次に多いのが、「振幅 A を大きくすれば周期が見つけやすくなる」 という思い込みです。確かに SN比 (A/σ)² は上がりますが、自己相関を ρ[k] として「正規化」してしまうと振幅は分母分子で打ち消され、ピークの相対的な高さは変わりません。重要なのは A 単独ではなく、A と σ の比です。シミュレーターで A=2, σ=1 と A=4, σ=2 で比較してみてください。SN比は同じ 6 dB なので、ピークの形もほぼ同じになるはずです。
最後に、「最大ピーク位置 = 真の周期」とは限らない 点に注意してください。SN比が極端に低い場合、最大ピークがノイズ起因の偽ピークに乗ってしまうことがあります。また周期信号の高調波成分が強いと、T だけでなく T/2 や T/3 の位置に偽ピークが出ることもあります。実務では「ピーク高さの絶対値」と「次に高いピークとの差」、そして「期待される周期範囲」を組み合わせて判定するのが定石です。