コンテンツにスキップ

fourier

src

fourier は複数の正弦波成分を合成した振幅変調を生成する. 各成分を sine と同じ方法で計算し, 足し合わせて 1 つの波形にする.

fourier(&components, &option, &mut dst)?;
引数 説明
components &[SineComponent<S>] 合成する正弦波成分の配列
option &FourierOption 追加オプション (下記参照)
dst &mut Vec<u8> 出力バッファ

SineComponent は周波数 freqSineOption の組である. 全成分の sampling_config は一致している必要があり, 異なるとエラーになる. 合成波形の長さは各成分の周期の最小公倍数である.

各サンプルは全成分の和にスケール (scale_factor) を掛け, オフセット (offset) を加えた値である.

フィールド 説明
freq Freq<u32> 成分の周波数
option SineOption 成分ごとの正弦波 Option
SineComponent {
freq: 100 * Hz,
option: SineOption::default(),
};
FourierOption {
scale_factor,
clamp,
offset,
}
フィールド デフォルト 説明
scale_factor Option<f32> None 合成値に掛けるスケール. None 場合, 成分数の逆数
clamp bool false 範囲外の値を [0, 255] clampするか
offset u8 0 合成後に加える直流オフセット
use autd3_rs::units::Hz;
use autd3_rs_modulation::{FourierOption, SineComponent, SineOption, fourier};
let mut dst = Vec::new();
fourier(
&[SineComponent {
freq: 100 * Hz,
option: SineOption::default(),
}],
&FourierOption {
scale_factor: None,
clamp: false,
offset: 0x00,
},
&mut dst,
)?;