3-3. 信号波形の操作
3-3-1. 信号波形を操作してみましょう
DSPに入力される信号波形は、1サンプルずつディジタルデータとなり、
プログラム上では変数として表されます。その変数に対して、出力する前に
演算を行えば、入力された信号の波形を自由に操作することができます。
ここでは、DSPのサンプルプログラムを修正することにより、信号波形を様々に
変化させてみましょう。
【実習 3-3-1】<入力信号を任意倍する>
-
エディタでサンプルファイル[pass1]
を開いてください。これは、実習 3-3-1で使用したものと同じものです。
読み込んだ波形のサンプル値(data)を2倍してから出力してみましょう。
この処理は、例えばread_input()とwrite_output(data)の間に
data = 2.0*data;を加えることで実現できます。
コンパイルして実行してください。
-
DSPボードの入力端子に、SGから数kHz、±1[V]の信号を入力してください。
入力波形と出力波形を、オシロスコープで比較してみてください。
-
倍率を様々に変更して、入出力を比較してみましょう。倍率をあまり
大きくし過ぎるとどうなるでしょうか。
【実習 3-3-2】<いろいろと操作してみる>
サンプリングされたディジタル信号が一旦DSP内部に取り込まれてしまえば、
上のような簡単な定数倍だけでなく、プログラムで記述できる限り、様々な
処理を行うことができます。
※ ただし、処理に要する時間が、「あるサンプル値を取り込んでから次の
サンプルを取り込むまでの時間(1サンプル周期)以内」であることが
前提となります。そうしないと、入力データが取りこぼされてしまいます。
-
上のサンプルプログラムを元にして、以下のようなプログラムを作成し、
実行してみてください。SGから入力に適当な信号を入れて、
出力波形をオシロスコープで確認してみましょう。
- 入力波形を2乗する
- 入力波形の絶対値(大きさ)を取る(全波整流)
- 入力波形の正の部分のみを取り出す(半波整流)
【実習 3-3-3】<入力信号に遅延をかける(ディレイ)>
-
エディタでサンプルプログラム[delay]
を開いてください。
このDSPプログラムは、指定したサンプル数の分だけ、入力信号を遅らせて
取り出すことのできる関数を利用しています。
-
マクロDELAYLENで、遅延させるサンプル数を指定しています。
-
DELAYLEN+1の大きさの配列(delay)を定義します。
-
この例では、サンプル数に対する遅延時間をなるべく長くするため、
init_1847(SAMPLE8000, 0)により8 kHzサンプリングを指定しています。
-
initdelay(delay, DELAYLEN)で、遅延の初期化操作を行います。
-
関数storedelay(in, delay, DELAYLEN)で、Nサンプル前の値を取り出し、それを
出力変数(out)に入れます。
現時刻からNサンプル前までの値は、配列(delay)に保存されています。
まずはそのままコンパイルして実行してみてください。
-
マイクで音声を入力し、スピーカからどのように聴こえるかを確認してください。
また、遅延サンプル数(DELAYLEN)を変化させて、出力の変化を聴き比べてください。