ExcelでDSPをしよう(基礎編)
DSPとはデジタル信号処理の事を言います(ここではプロセッサの事を示さないので注意)。
Excelはおなじみの表計算ソフトです。
本来パソコン上でDSPを行う場合、MATLABという行列計算ソフトを使うのですが、入手しやすいExcelを使います。
扱いやすい、連続計算が得意という点を利用し、どのような過程で計算が行われているかを見てみましょう。
ADCとオシロスコープの代わりにグラフを用いれば結果が手に取るように分かります。
まず、パラメータを用意しましょう。 入力に必要なのは ・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に比べてとても大きい値を取る必要があります。 |