% 電源電圧ありの2部探索アルゴリズムのAD変換器
function [Vout, D] = binary_search_adc_with_vdd(Vin, VDD, bit_generation_clock)
% 入力:
% Vin - 入力電圧
% VDD - 電源電圧
% bit_generation_clock - ビット生成用のクロック (0 または 1)
% 出力:
% Vout - 残差電圧
% D - ビット出力 (0 または 1)
% 基準電圧 VREF = VDD / 2
VREF = VDD / 2;
% クロックが0のとき出力はすべて0
if bit_generation_clock == 0
Vout = 0;
D = 0;
return; % クロックが0の場合、出力は更新されず終了
end
% クロックが1のとき、入力電圧に応じて計算
if Vin > VREF
Vout = 2 * (Vin - VREF); % VinがVREFより大きい場合
D = 1; % ビット出力は1
else
Vout = 2 * Vin; % VinがVREFより小さい場合
D = 0; % ビット出力は0
end
end
% クロックが0から1になると値を更新する関数
function y = fcn(u, VDD, bit_generation_clock)
% fcn - クロックが0から1になるときに出力を更新する
% 入力:
% u - 入力電圧
% VDD - 電源電圧
% bit_generation_clock - ビット生成用クロック信号 (0 または 1)
% 出力:
% y - 出力電圧 (Voutとビット出力)
% 初期出力は全て0に設定
persistent Vout D
if isempty(Vout)
Vout = 0;
D = 0;
end
% クロックが0から1に変わったときのみ値を更新
if bit_generation_clock == 1
[Vout, D] = binary_search_adc_with_vdd(u, VDD, bit_generation_clock);
end
% 結果を出力
y = [Vout, D];
end