matlabのData Acquisition Toolboxを使う① NI USB-6009

　アナログ入力を手軽に得る方法に、NIの測定ツールを使う方法があります。低速なものから高速なツールがあります。USB-6009（14ビット、差動4チャネル）は、低速ですが、複数の入出力をもち、安価なのが特徴です。USBケーブルでPCとつなぐだけで準備は終わります。

<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/92f0966b-63cc-8e07-845b-ff7ff2d7fe87.png">


　ebayだと、中古品が約1万円代で入手できます。

###NI-MAXで接続を見る
　無料で入手できるNIのツールMAXを起動します。「デバイスとインターフェース」の項目に、USB-6009を見つけてきます。
![ni101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/07695ca8-85ab-8935-bb8b-7a60021edceb.png)

　テストパネルをクリックします。開始をクリックすると、何らかのデータをロギングしていることがわかります。入力にはファンクション・ジェネレータのFGX-2005をつないでいます。
![スクリーンショット 2021-01-13 08.05.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/d50e5d7e-bded-c9ac-0874-d6c58642fdb5.png)


　終了します。
###アプリAnalog Input Recorderを起動
　Data Acquisition Toolboxをインストールすると、Analog Input Recorder、Analog Output Generatorがアプリに登録されています。Analog Input Recorderを起動します。USB-6009を探し出してきて、入力波形を表示します。
![スクリーンショット 2021-01-13 08.07.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/a33e5553-419d-4de1-8d58-dba1632b9bdb.png)

　画面上部の右端にあるGenerate Script codeをクリックします。
![スクリーンショット 2021-01-13 10.51.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/3d25d604-94e8-8037-b37b-c6389d616270.png)

　そのまま実行をクリックします。1秒間ロギングしたデータがグラフに描かれます。

<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/e869e345-cd76-4931-6641-0a21b9bcdff1.png">


　ファンクション・ジェネレータは10Hz、3Vp-pの正弦波です。100Hzにします。

<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/3b5c7e8e-230c-0357-b932-97aa976fa511.png">


　細かくてわからないので、


```matlab
data = Dev1_1(1:50, :)
```

　先頭の50個を表示しました。

<img width="400" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/b62625f3-3a10-3d34-4ed1-f51f3a5029bd.png">


　サンプリング・レートが低いですね。デフォルトは1000になっていました。5000に変更します。グラフの表示数は、50から200個に増やしました。

```matlab
d.Rate = 5000;
```

<img width="400" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/d3d90c37-2e1b-881e-a5a6-8bb20701e0a4.png">


　電圧が足りませんね。summaryも表示しまっす。振幅は取れたようですが、3Vp-pに対して、-3.5V、＋2.9なので、正常なデータの取得ではありません。A-DコンバータのS&Hが十分な性能ではないかもしれません。
![ni106.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/4135a8f9-d5b7-d157-9aa2-0b1a4003c867.png)
　全データを表示すると、息継ぎをするようなところが出てしまい、サンプリング・レート48000はあまり信用できないと思われます。

<img width="400" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/b0361e03-3508-7561-0d4d-d311749e5b9e.png">


###方形波
　ファンクション・ジェネレータの出力を、サイン波から方形波に変更しました。
　![ni108.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/1737be7e-f370-aa92-4e67-f0e1a16b9957.png)
　プログラムです。

```matlab
%Create DataAcquisition Object
%Create a DataAcquisition object for the specified vendor.
d = daq("ni");
d.Rate = 48000;

%Add Channels
%Add channels and set channel properties, if any.
addinput(d,"Dev1","ai0","Voltage");

%Read Data
%Read the data in timetable format.
Dev1_1 = read(d,seconds(0.1))
samples = length(Dev1_1.Dev1_ai0)
summary(Dev1_1)
%Dev1_1.Time(1:5)
%Dev1_1.Dev1_ai0(1:5)
data = Dev1_1(1:1000,:);
%data = Dev1_1(timerange(1,10))

%Plot Data
%Plot the read data on labeled axes.
plot(data.Time, data.Variables)
xlabel("Time")
ylabel("Amplitude (V)")
legend(Dev1_1.Properties.VariableNames)

%Clean Up
%Clear all DataAcquisition and channel objects.
clear d
```

###ローパス・フィルタをかける
　plotの最後に、


```matlab

lowpass(data.Variables, 10 ,1000)
```

を追加しました。カットオフ周波数が10Hzで、サンプリング周波数は1kHzです。この周波数には何の根拠もありません。
少しだけ、立ち上がりが緩くなっています。

![ni109.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/73b00b0b-bf3f-0d44-85c8-c5ca9c45ab9c.png)