A/D, D/A変換

アナログからデジタルに変換するのをanalog to digital conversionでA/D変換という
逆に、2値信号をアナログ信号に変換する作業をdigital to analog conversion, D/A変換という

#### D/A変換の原理
ほとんどの電子回路は電圧を情報として扱うので、アナログ電圧量に変換すると捉える
-> 2進数を10進数に変換し、この10進数に比例した電圧量を得ること
e.g. X=1011(2)の時、Y=11 11に比例した電圧が現れる仕掛けを用意すればD/A変換したと言える
ビット重みに比例した電流を流す仕掛けと、得られた電流から電圧変換する作業を行えば良い
-> 複数の抵抗網と演算増幅器を用いることが多い

– 演算増幅器
マイナス端子とプラス端子電位差を増幅する
重み付け抵抗あるいはラダー抵抗で1/8R, 1/4R, 1/2R, Rとすれば、ビットの大きさに比例した電流を得られる

### A/D変換器の原理
A/D変換の原理は積分型と比較型に分けられる

– 二重積分型A/D変換器
積分器、コンパレータ、クロックパルス発生器、ゲート、カウンタ、制御回路が含まれている
電圧の大きさ -> 時間の長さ -> パルスのカウント数 という変換作業によって電圧信号をデジタル化する
クロック周波数、積分期間が長いほど大きくなる
– 逐次比較型A/D変換
二分法と言われる探索手法
あらかじめ想定される電圧範囲を二分し、この閾値電圧と入力電圧を比較してデジタル変換する

nビットの2進変換をしたい場合は、nビット対応のD/A変換器を用意してn回繰り返し動作によって求めることができる

A/D, D/Aも2進数の変換をどう扱うかってことやな
世の中の複雑なアルゴリズムが全て2進数で処理されているってのは未だに信じられない

パルス回路(pulse)

ディジタル回路で扱う矩形波信号(非正弦波形の基本的な一種)をpulseという
信号伝送の過程でパルスが歪んだりノイズで乱れたりするので、パルス波形を加工・整形する操作が必要になる
インバータとはNOTのことで、1を0に、0を1に反転する
判定基準となるVtを閾値という
シュミットトリガー型インバータでは、Viの大きさだけでなく、それまでの変化の過程(履歴)を考慮して判定されるヒステリシス特性をもつ。これによりノイズが混入していても本来の動作を行うことができる

### マルチバイブレータ(multibibrator)
回路の二つの電圧状態を交互に行き来することによりパルスを発生させる回路
無安定型(入力不要)、単安定型、双安定型がある
-> Viが徐々に増加し、インバータの閾値で反転しV=0となりViが徐々に低下 そして再度充電すると周期的に充電放電を繰り返すのでパルス出力を得る

### 遅延回路
RC回路を使ってバッファ入力することで、波形を遅らせることができる。バッファとは信号波形を整形し、出力インピーダンスを低下させるゲート回路のこと

### パルス整形回路
信号波形が歪んだ場合に整形する操作
クリップ回路は入力波形をあるレベルで切り取る働きをするため、信号の最大値や最小値を設定するときに使われる
-> ダイオードがオン(導通)、オフ(非導通)で電流が流れたり流れなかったり制御できるので、出力電圧V0を制限できる
クリッパ回路(電圧の最大値制限)、リミッタ(最大値と最小値を制限)、スライサ、クランパ(直流再生回路)

東日本”50Hz”、西日本”60Hz”のこのプラスとマイナスが入れ替わる周波数がパルスで、このパルスを加工したり整形できるってことやね。つまり、パルスの電子の移動を制御できるってことかね?

ChromeでIEのUserAgentで操作したい時

ChromeでInternetExplorerとして操作したい時

1. DevToolを開く
2. 三点リーダのメニュー -> 「More tools」 -> 「Network conditions」
3. 「User Agent」の「Select automatically」のチェックボックを外す
4. IE11を選択

UserAgentは偽装できるが、思ったような挙動にはならないな。。。

順序回路

順序回路は現在の入力と過去の入力で出力が決まる回路
二次情報を記憶する回路をレジスタという、CPU内部の高速演算やデータ処理の一時記憶用途に使われる
一度に記憶できるビット数をレジスタ長といい、レジスタ長が大きいほど高度な作業を高速に行うことができる
64bit CPUとは、「一度に記憶できるビット数が64ビット」という意味。当然32ビットより性能が良い
e.g. D-FFとCK端子をつなぎ合わせると、次のクロックパスが入力されるまで出力が保持される

### シストレジスタ
レジスタ内のデータを1ビット右もしくは左にシフトさせるレジスタをシフトレジスタという
Binデータはクロックに同期して右側へ1段ずつシフトしていく
順次入力されたシリアルデータが一挙に並列出力(パラレル)された状態となる
プリセット端子はD-FF内部状態をリセット(Q=1)する端子、PR=L(0)で有効、H(1)で無効
クリア端子はCLR=0で内部状態がクリア、CLR=1で無効

### カウンタ
2進数を数える回路をバイナリカウンタという
4ビットの場合は16進カウンタという
JK-FF, T-FFで、J=K=1としてクロック信号CKを入力するたびにトグル動作を行い次段の入力となる
値が1ずつ増加をアップカウンタ、減少をダウンカウンタという
FFで時間遅延があるため、完全には同期しておらず、非同期カウンタという(asynchronous)
不要なパルスをハザードという、補出力で対策を講じる

記憶素子(flip-flop)

順序回路
->入力状態と回路の内部状態によって出力が決まる
->過去の状態を記憶する機能がある

### フリップフロップ
2つの安定した状態を持つ
A=0の時、NOT出力は1となり、これが入力Bになる 入力BのNOT出力は1となり、Aの入力に戻される この状態が維持される
一度決まった状態は新たに特定の入力がない限り保持される為、記憶素子と考えることができる
フリップフロップは様々な種類が存在し、レジスタやカウンタなど多くの応用回路がある

### RS-FF(reset-setFF)
リセット信号Rが1の時、出力Qが0にリセットされ、セット信号Sが1の時、Qが1にセットされる
R=1, S=0の時、Q=0、!Q=1となる
R=0, S=1の時、Q=1、!Q=0となる
R=0, S=0の時、直前の出力状態Q, !Qがそのまま保持される
R=1, S=1の時、Q, !Qがどちらも0になり不安定となり正常に動かない為、禁止されている

### 同期式RS-FF
R, Sの入力の他に、クロック信号CKを用意し、この信号変化に同期して出力を変化させる。この信号をトリガ(ポジティブエッジトリガ)という
CK=1とすると、RS-FFと同じ。CK=0とするとR=0, S=0に強制したことに等しく、出力内容は保持される

### JK-FF(Jack knife FF)
R=1, S=1の欠点を無くすための仕様
ANDと同期式RS-FFの組み合わせ
J=1 K=0の時、Q=1 !Q=0
J=0 K=1の時、Q=0 !Q=1
J=0 K=0の時、前の状態を保持
J=1 K=1の時、前の状態を反転…トグル動作
J=1 K=1でCK=1が長くなると発振状態となるため、CK=0にしないといけない。それがマスタースレーブ型JK-FF
->ネガティブエッジ動作

#### T-FF(toggling flip-flop)
周波数を1/2にする働きがある

### D-FF(delay flip-flop)
信号を遅延する
入力信号Dを出力するにはCKのネガティブエッジトリガを待たなければならず遅延される
->桁をずらすシフトレジスタなどに使われる

「記録する」って、要するに電子信号を保持するってことなのか。
なんか前髪を掴まれた気分だなー

組み合わせ論理回路

### エンコーダ
複数の入力信号のうち一つが1となった時、これに対応する2進符号を出力する論理回路を指す
e.g. パソコンのキーボード…押しボタンスイッチで文字情報を送付

10進数1桁を2進数4桁(B3,B2,B1,B0)に変換するエンコーダ
2進数4桁で表現された10進数をBCDコード(binary coded decimal code)という

BCDエンコーダの内部回路

BCDデコーダの内部回路

### マルチプレクサ
複数の信号を1つの信号に合成する装置(制御信号がAとBに加え、S=0 or S=1がある)
S=0の時Aを通過させるにはF=!S・Aとし、S=1の時Bを通過させるにはF=S*B

### デマルチプレクサ
1つの信号を複数の信号に分割する、出力選択回路と言われる
A = !S・F, B = S・B(2出力)

### 一致回路
二つのデータが等しいかどうかを判定する回路

### 比較回路
二つのデータの大小を判定する回路を比較回路という

### 加算回路
半加算回路: 1ビット処理
全加算回路: 2ビット以上の場合は下位ビットの桁上げ情報を考慮する
減算は2の補数を用いて加算操作で済ますことができる… 全ビットをNOTゲートで反転させる
ただし、補数を用いた減算で負の結果の場合は、さらに2の補数を求める操作が必要

なるほど、入力値から論理に基づいた出力値になるように、AND,OR,NOR,EXORなどを組み合わせてダイオードの電子回路を引くわけだな。
ロジックだな、電子回路の意味が大分わかってきた。

電圧とダイオードによる論理演算の仕組み

数理論理学では文字や記号で表現する
A = T -> B = T, A = F -> B = F

論理積OR
0,0 -> 0
0,1 -> 1
1,0 -> 1
1,1 -> 1

論理積AND
0,0 -> 0
0,1 -> 0
1,0 -> 0
1,1 -> 1

論理否定…インバータ
0 -> 1
1 -> 0

[ドモルガンの定理]
ある恒等式が成立していることがわかっていれば、その恒等式に含まれる0を1に、1を0に変換し、論理和を論理積に、論理積を論理和に変換して得られる式も恒等式として成り立つ

### 加法標準法
論理和を結合し、入力状態のうち、いずれか一つが起きた時に、F=1となるよう式を組む
### 乗法標準法
論理積で結合し、入力状態のうち、いずれか一つが起きた時に、F=0となるよう式を組む

### カルノー図
入力変数の値の組み合わせをもとに作成した行と列に出力の値を書き込んだ一覧
論理関数(4入力1出力、3入力2出力)などを簡素化できる

### 論理ゲート
基本回路を論理ゲート(logic gate)といい、通常一つの回路記号で表される
電圧が低い状態(Low)を0に、電圧が高い状態(High)を1に対応させる
どの半導体素子もデジタル回路ではオンとオフを伴ったスイッチの役割を担っている

### ダイオード
P形半導体(電子が不足)からの端子をアノード、N形半導体(余った電子がP原子の周りを回っている)からの端子をカソードといい、アノードからカソードの流れる電流のみを通して、その逆はほとんど通さない
P型は+の電圧、N型は-の電圧
整流作用があり、スイッチと同じ役割を持つ。順バイアスの電圧でオン、逆バイアスの電圧でオフとなり、半導体スイッチという

バイポーラトランジスタも IB>0 or IB = 0でスイッチの役割を果たす(Transistor Transistor Logicで広く使用)
論理回路出力に接続可能な最大ゲート数をファインアウトという

### MOSFET
ゲート、ドレイン、ソース
ゲート、ソース間が絶縁された小容量コンデンサ(直流通過、電荷を蓄える)と等価の構造担っている
一度充電されると、電流はほとんど流れずにオン状態を維持することができる為、電力消費が小さい

### CMOS
二つのMOSFETを直列に接続した構造(complementary MOS)
CMOSでは電源電圧Vccが出力端子から分離される為電流が流れず原理上電力損失は起こらない
CMOS回路では原理上電圧降下が生じない為、より多くのゲートを同時に接続できる

– ORゲート…論理和を実現する論理回路 いずれかがHの場合、ダイオードがオン
– ANDゲート…論理積を実現する回路 両者がHの場合はダイオードがオフ
– NOTゲート…バイポーラトランジスタで実現 AがLのとき、抵抗Rは電流が流れない為F=H 逆にA=Hにすると抵抗Rに電流が流れて電圧が低下する為F=Lとなる

NORゲート(ORとNOTゲートを組み合わせる) …AND, OR, NOTの基本ゲートを全て表現できる
NANDゲート(ANDとNOTゲートを組み合わせる) …AND, OR, NOTの基本ゲートを全て表現できる

なるほど、パソコンって、pn接合のダイオードで電圧処理してるのか
こりゃ、エンジニアは電子回路勉強した方が絶対いいな

デジタル回路と二進数

デジタル回路では0と1の記号だけを使った二進数で数を表す
これはエンジニアであれば誰も知ってることだろう
では、何故2進数を使うのか?

### 二進数を使う理由
スイッチをオフにすると高い電圧が発生、スイッチをオンにすると電圧0
この電圧値に対応するルールを決めると、回路はそのルールを表現する回路になる
デジタル回路は電圧の離散値に意味を持たせ、これを処理する

### 2進数
最上位ビットをMSB、最下位ビットをLSB
デジタル回路では0と1しか表せない為、マイナス符号をそのまま扱うことができない その為、補数(complement)を使う
※補数とは「元の数」と「補数」を足すと桁上がりが発生しない数のうち、「最大」の数
10進数で「6」の補数は「4」、「171」の補数は「829」
1195+(10000-171)=10000+1024
結果が補数かどうかはオーバフローが発生したかどうかで判断する オーバーフローが起こらなかった場合は桁数の補数で表す
このようにして減算回路は否定と加算演算で容易に実現ができる
コンピュータでは2進数を4ビットまで対応させた16進数がよく使用される(-8〜7までの数字)
8ビットの場合は256(-128〜127) 2^9=512

varchar(255)なども、電圧の離散値で8ビットの256からきていると考えると理解が深まりますな。

アナログとデジタル

アナログとデジタルの違いは
「アナログ」=連続、値と値の間に必ず値が存在する
「デジタル」=離散、値が有限個しか存在しない、値と値の間をジャンプして変化する

### アナログ信号とデジタル信号
アナログ信号は、何らかの影響でノイズが侵入した場合、波形が歪む(オーディオアンプなど)
-> 途中侵入したノイズを受信側で除去することは原理上困難であり、それ故アナログ信号はノイズに弱い
デジタル信号はノイズを除去することが可能であり、ノイズに強い
電圧値がパルス状の波形で値がVHかVLのいずれかの限定された値を入力とし、処理結果をデジタル出力する

デジタル回路とは、アナログ信号(電圧、電気信号)の有限個の値に意味を持たせて処理する回路であり、出力信号も有限個の値にのみ意味を持たせたアナログ波形
アナログ回路とデジタル回路の違いは、信号をアナログ信号と捉えるか、デジタル信号と見るかの違い
デジタル回路では、トランジスタをスイッチとして電圧に何らかの意味を持たせる トランジススイッチが多いほど複雑な処理が可能になる
Intel4004マイクロプロセッサーは、トランジスターの数がたったの2300個だったが、最新のcpuは10億個ぐらいまで増えている

Corei7 プロセシング・ダイ・トランジスター数382 million
Corei5 プロセシング・ダイ・トランジスター数382 million

電子回路、電磁気、電磁波などの知識が総合的に必要ってことはわかってきたけど、中々理解が深まらん印象だな。プログラミング始めた当初と全く一緒や。近道はないから、入門本をひたすら読み続けるしかなさそうか。

電荷と電界

物体が帯びている静電気の量であり、電磁場から受ける作用の大きさを規定する物理量
通常、物体には正と負の電荷(electric charge)が同じ量だけ存在する(中世)
外部に出て行ったり、外部から入ってくると電荷のバランスが崩れ一方の電荷を余分に持つ(帯電)…electrification
ただし、系内の電荷量の総和は常に一定に保たれている
電荷と電荷の間に働く力がクーロン力…同符号同士の場合は反発、異符号同士は引き合う
電荷eの単位はクーロン[C]が用いられる
e= 1.60217733 * 10^-19

### クーロンの法則
二つの点電荷が互いに及ぼし合う力は、両電荷の積に比例し、距離の二乗に反比例する
F[N] = k * q1[C]q2[C] / r^2[m]
比例定数kは真空中で k = 1/4πε0 (真空の誘電率)
複数の電荷が存在(q1,q2,q3..qn)する場合
Σj≠i 1/4πε0 * q1[C]q2[C] / r^2ji * rji / rji

### 電界
静電力が働く空間(電位の傾き)を電界という
電界とは、電荷pは電荷Qからベルトルrにある場合、電界Eから力を受けると考える
電界ベクトルEを連ねてできた曲線を電気力線とよぶ
– 電気力線上の任意の点における接線は電界ベクトルEの方向と一致
– 電気力線は正電荷に始まり、負電荷または無限遠に向かう
– 電気力線は互いに交わらない

導体を電界E0の中に置くと、導体中の電荷は電界によって力を受ける為移動する 導体内の電荷がなくなるまで続き、平衡状態では導体内に電荷は存在しない
与えられた電荷と電位との間には比例関係が成り立つ。この比例係数Cを導体の電気容量(capacitance)という
1組の導体を一般にコンデンサーという

### ガウスの法則
ガウスの法則は電荷と電場との間にどのような関係が成立するのかを教えてくれる法則
ある閉じた曲面を垂直に貫く電気力線の本数はその曲面の内部に存在する電荷の総量Qに比例し,Q/εに等しい

### 電位とは
力学における位置エネルギーの位置に相当する概念、電位から電場を求められる
※電界中にある単位正電荷(+1クーロン)が持っている、位置エネルギー

### 電気容量
電気容量は電荷を加える容器としての導体の電気的性能を表す量で、導体の電位を+1V上昇させるために必要な電荷と定義されている
コンデンサの電荷をたくわえる能力

### 静電エネルギー
電場が持つエネルギー

### 電流
電荷の流れが電流、電流の重要な作用の一つが磁界を作ること

うーん、何だろう、中々ハードルが高い