Modulation

ModulationはAM変調を制御するための構造体の総称であり, これを送信することで超音波にAM変調をかけられる.

Modulationは音圧振幅に掛け合わされる. 例えば, Sine変調を印加した場合の音圧振幅は以下のようになり, 音圧振幅の正の部分 (或いは, 負の部分) の包絡線がのsin波に従う.

なお, 現在, Modulationには以下の制約がある.

  • バッファサイズは最大で65536
    • 拡張モードを使用すると131072
  • サンプリングレートはである. ここで, は0より大きい符号なし整数である.

SDKにはデフォルトでいくつかの種類のAMを生成するためのModulationが用意されている.

  • Static - 変調なし
  • Sine - 正弦波
    • Fourier - 正弦波の重ね合わせ
  • Square - 矩形波
  • Wav - Wavファイルをもとにした変調
  • Csv - Csvファイルをもとにした変調
  • Custom - ユーザー定義の変調
  • Cache - 他のModulationの計算結果をキャッシュする
  • RadiationPressure - 放射圧に対して変調を適用する
  • Fir - Firフィルタを適用する

Modulationの共通API

Sampling設定

Modulationのサンプリング設定はsampling_configで取得できる.

use autd3::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let m = Sine {
    freq: 150 * Hz,
    option: SineOption::default(),
};
dbg!(m.sampling_config().freq()?); // -> 4kHz
    Ok(())
}
#include<iostream>
#include<autd3.hpp>
#include<autd3/link/nop.hpp>
int main() {
using namespace autd3;
const auto m = Sine(150 * Hz, SineOption{});
std::cout << m.sampling_config().freq() << std::endl;  // -> 4kHz
                                                       return 0; }
using AUTD3Sharp;
using AUTD3Sharp.Modulation;
using static AUTD3Sharp.Units;
var m = new Sine(freq: 150u * Hz, option: new SineOption());
Console.WriteLine(m.SamplingConfig().Freq()); // -> 4kHz
from pyautd3 import Hz
from pyautd3.modulation import Sine, SineOption
m = Sine(freq=150 * Hz, option=SineOption())
print(m.sampling_config().freq())  # -> 4kHz

また, 一部のModulationはオプションでサンプリング設定を変更できる.

サンプリング設定についての詳細はサンプリング設定についてを参照されたい.

LoopBehavior

Modulationはループの挙動を制御できる. デフォルトは無限ループである.

詳細はSegment/LoopBehaviorを参照.