ExcelでDSPをしよう(基礎編)

DSPとはデジタル信号処理の事を言います(ここではプロセッサの事を示さないので注意)。
Excelはおなじみの表計算ソフトです。
本来パソコン上でDSPを行う場合、MATLABという行列計算ソフトを使うのですが、入手しやすいExcelを使います。
扱いやすい、連続計算が得意という点を利用し、どのような過程で計算が行われているかを見てみましょう。
ADCとオシロスコープの代わりにグラフを用いれば結果が手に取るように分かります。

念のため断っておきますが、「デジタルとアナログの違い」「時間領域と周波数領域」「Excelの扱い方」について知っているという前提で書きます。
知らない人は今のうちに調べましょう。
ついでに、「数列の漸化式表現」「C言語の配列表現」について知っておくと楽です。

手始めに正弦波出力のNCO(数値制御発振器)を作ってみましょう。
NCOは名前の通り、数値によって出力周波数が制御されるものです。
いきなり凄い事をするよう見えますが、単純に正弦波の波形をつくるだけです。
ブロック図で書くと
Zoom
のようになります。

まず、パラメータを用意しましょう。
入力に必要なのは
・f:設定周波数 [Hz]
・A:振幅
・fs:サンプリング周波数 [Hz]
です。
そして、時間領域で見るので
・n:サンプル番号(0からスタート)
・t:時間 [s]
・Vo:出力 [V]
出力は本来無次元ですが、「電気信号をオシロスコープで見ている」という前提とし、単位を[V]とします。
サンプル番号は今回はあまり意味がありません。個数を分かりやすくしただけです。
それぞれのパラメータを適当な位置に配置しましょう。
t-Voの表は縦に伸ばす事にします。

余談:
もちろん、位相も入れる事が出来ます。
別の機会で追加する事にします。

余談2:
サンプリング周波数は通常、[SPS](サンプル毎秒、Sample Per Sec)という単位で書かれます。
ですが次元は[Hz]と同じです。
本講座ではサンプリング”周波数”なので単位は[Hz]で書きます。
  時間を設定します。
最初は0[s]ですので初期値、0を入力します。
次のサンプリングが発生する時間はサンプリング周波数より
t[n]=1/fs+t[n+1]
と書けます。
fsは定数なので、絶対参照にすることをお忘れなく。
サンプリングは等間隔(周期的)に行われるので、下へ連続データを生成します。
サンプル個数は適当でいいです。100個もあれば十分すぎです。
今作った「前の数値に数値を加算する」という機能を「アキュムレータ(累算器)」と言います。
  次は出力をします。
ブロック図の通り、SIN()関数を使うだけです。
ひねくれた人はCOS()関数でもいいですが・・・。
Excelでの角度の単位は[rad]で表されます。
Vo=A・sin(2πft)
ですので、上の式をExcelの書式で入力するだけです。
先ほど同様、連続データを作っておきます。
最後に結果をグラフにします。
生成したtとVoのデータを全て選択し、メニューから散布図→散布図(直線)を選びましょう。
まだ入力が何もない状態なので、f、A、fsを入力しないとDIV/0エラーが出るだけです。
試しに
f=100 A=1 fs=1000
を入れてみましょう。
余談:
本来、ADC出力は階段状になるのですが、散布図にそんなオプションは無いので直線とします。
棒グラフを使えば「階段状」というイメージがわくと思います。
ですが軸の設定上、散布図がいいでしょう。
階段状になる事によるノイズを「折り返しノイズ、エイリアシング」と言います。
ビットマップ画像を知っている人ならピンと来るはずです。
このノイズの除去方法は・・・また後にしましょう。
特に、時間分解能(横方向)由来だと「折り返しノイズ」、振幅分解能(縦方向)由来だと「量子化ノイズ」と呼ばれます。
Zoom 正弦波が出ましたか?
出ない場合は定数のパラメータを絶対参照にしていないと思います。
グラフ横軸の範囲を調整して、波形が1周期映るようにします。
この時点でけっこう歪んでいることに気づきます。
Zoom ではfの数値を少しずつ上げていきしょう(fsを下げてもいいです)。
周波数が変わりますが波形はどんどん歪み、ついに500[Hz]あたりで波形が出なくなります。
これが「ナイキストのサンプリング定理」です。
離散時間領域ではfs/2[Hz]の周波数までしか表現ができません。
ですので、fsはfに比べてとても大きい値を取る必要があります。

Excelで正弦波を作る場合はこの構成が便利です。
今後、この方法を使って正弦波を作る事にします。

戻る
inserted by FC2 system