M系列信号を生成してみる

M系列信号(Maximum-length linear shift register sequence)は2値の周期的な信号であり,
1周期内では乱数として非常によい性質を持っているものらしい.
例えば,

  • 0と1の発生確率がほぼ同じ
  • 自己相関のピークが1周期に1度だけある
  • nビットのM系列の1周期中の連続するnビットはユニーク

といった性質がある.
そのM系列信号をpythonで可視化してみる。

import numpy as np
from numpy.fft import fft, ifft, fftshift, fftfreq
from scipy.signal import max_len_seq
import matplotlib.pyplot as plt
%inline matplotlib

def gen_mls(n):
    mls = max_len_seq(n)[0]
    print(mls)
    return mls

def main():
    seq = gen_mls(7) # MLS生成
    spec = fft(seq) # フーリエ変換
    acorr = np.correlate(seq, seq, 'full') # 自己相関

f:id:yusuke_ujitoko:20190716234815p:plain

線形システムの同定入力に用いる際のパラメータ選定方法

同定入力に用いるM系列信号をn個のシフトレジスタで生成するとすると、nをまず選定しなければならない。 nが大きいからと言って必ずしも同定制度が向上するわけではない。 これは、M系列は1周期のすべてのデータを利用してはじめて擬似白色信号となるためである。 したがって、同定実験の長さ[tex:T{exp}]はM系列の1周期の長さ以上である必要がある。 一般に、 [tex:T{exp}]は1~2周期に選ばれることが多い。