カテゴリー
学術

74HC175AP

74HC175AP
74HC175AP

ChatGPTに聞いてみた。

User
74HC175APは何ですか。

ChatGPT
74HC175APは、デジタル回路に使用される、クアッドDフリップフロップ(Quad D Flip-Flop)IC(集積回路)の1つです。このICは、高速な動作、低消費電力、静的消費電力の低減、入力と出力の保護などの特徴を持っています。また、74HC175APは、単一の電源電圧で動作し、広い動作電圧範囲を持っています。ICのパッケージングには、16ピンのデュアルインラインパッケージ(DIP)が使用されています。

74HC175APは、4つの独立したDフリップフロップを持っており、各フリップフロップには、D入力、クロック入力、セット入力、リセット入力、Q出力、およびQバー出力があります。このICは、高速で信頼性の高いデータ保持や信号同期などの様々なアプリケーションに適しています。

カテゴリー
学術

LM386N-3

LM386N-3
LM386N-3

ChatGPTに聞いてみた。

User
LM386N-3は何ですか。

ChatGPT
LM386N-3は、小型の低電力オーディオアンプリファイア(Audio Amplifier)ICです。このICは、スピーカーやイヤホンなどの低インピーダンス負荷を駆動するために設計されています。 LM386N-3は、3ピンのパッケージングを採用しており、最大3Wの出力を提供できます。また、単一の電源電圧で動作し、外部部品を最小限に抑えることができます。これらの特性から、LM386N-3は、携帯電話や携帯オーディオプレーヤーなどの携帯型電子機器でよく使用されます。

カテゴリー
学術

ジェネレーター4

 PCのラインからサウンドを出力しその信号をそのままデジタル回路で使用することができるか実験してみました。

その1 矩形波のまま使用
 信号のレベルが少し低いのでHighが5V程度になるまでトランジスタやオペアンプで増幅してみましたが次の問題が発生しました。

問題1 一波長でON・OFFの繰り返しを継続して出力する時は波形が乱れない。一波長でOFFのみが間にあると前後の波形が大きく乱れる。

問題2 一定時間だけONの信号が出せない。常に正負交互の交流信号を出力しないと信号が出てこないか前後の波形が乱れる。

問題3 出力の終わりに意図しない波形が出力されデジタル素子が誤動作をしてしまう。


 

その2 矩形波を止めて正弦波にする
 矩形波は多くの高調波を含んでいるので正弦波のみであれば状況が改善すると思い実験してみましたが問題を全て解決できませんでした。

問題1 解決できた。

問題2 波長を低くすればある程度の期間ONにできる。矩形波でも同様。

問題3 改善されない。


 

その3 常に信号を出している状態にする
 AMラジオの様に常に搬送波を出力しそれにデータである信号を乗せてみました。

問題1 再燃した。

問題2 その2と同じ解決できる。

問題3 若干改善した。


 

結論

 PCのサウンド出力はアプリから要求された信号を忠実に送出するのではなく独自の制御を行っているため振幅に意味を持たせる方法ではデジタルデータとしてそのまま使用できないことが解りました。


 

AM変調
AM変調
AM変調(拡大)
AM変調(拡大)
#include <iostream>
#include <string>
#include <windows.h>
#include <math.h>
#include <MMSystem.h>

#pragma comment (lib, "winmm.lib")

int main() {

    WAVEFORMATEX wfe1;
    static HWAVEOUT hWaveOut1;
    static WAVEHDR whdr1;
    static LPBYTE lpWave1;
    static LPBYTE lpDataA;
    static LPBYTE lpDataB;

    int i, j, len1, start, end;
    int f1;
    size_t terms = 300;
    int sampling = 192000;
    size_t size;
    double pi = 3.14159265359;

    f1 = 15000;
    len1 = sampling / f1;
    wfe1.wFormatTag = WAVE_FORMAT_PCM;
    wfe1.nChannels = 2;
    wfe1.wBitsPerSample = 8;
    wfe1.nBlockAlign = wfe1.nChannels * wfe1.wBitsPerSample / 8;
    wfe1.nSamplesPerSec = sampling;
    wfe1.nAvgBytesPerSec = wfe1.nSamplesPerSec * wfe1.nBlockAlign;
    waveOutOpen(&hWaveOut1, 0, &wfe1, 0, 0, CALLBACK_NULL);
    size = terms * wfe1.nChannels;
    lpWave1 = (LPBYTE)calloc(wfe1.nAvgBytesPerSec, size);

    for (i = 0; i < sampling * terms * wfe1.nChannels; i++) {
        lpWave1[i] = 128;
    }

    start = sampling * wfe1.nChannels * 1;
    end = start + len1 * wfe1.nChannels * f1 * terms;

    double d = 360.0 / len1;
    lpDataA = (LPBYTE)calloc(wfe1.nAvgBytesPerSec, len1);
    for (i = 0; i < len1; i++) {
        lpDataA[i] = (BYTE)(70.0 * sin(d * (i % len1) / 180.0 * pi) + 127.5);
    }

    for (i = start, j = 0; i < end; i++) {
        if ((i % 2) == 0) {
            lpWave1[i] = lpDataA[j];
            ++j;
            if (j >= len1) { j = 0; }
        }
    }

    int a = 300;
    lpDataB = (LPBYTE)calloc(wfe1.nAvgBytesPerSec, len1*a);
    for (i = 0; i < len1*a; i++) {
        lpDataB[i] = (BYTE)(50.0 * sin(d * i / 180.0 * pi / a) + 127.5);
    }

    for (i = start, j = 0; i < end; i++) {
        if ((i % 2) == 1) {
            if (((i / 2 / len1)+0) % 8 < 8 ) {
                lpWave1[i] = lpWave1[i-1] + lpDataB[j] - 128;
                ++j;
                if (j >= len1*a) { j = 0; }
            }
            else { lpWave1[i] = 128; }
        }
    }

    whdr1.lpData = (LPSTR)lpWave1;
    whdr1.dwBufferLength = wfe1.nAvgBytesPerSec * terms;
    whdr1.dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP;
    whdr1.dwLoops = 1;
    waveOutPrepareHeader(hWaveOut1, &whdr1, sizeof(WAVEHDR));
    waveOutWrite(hWaveOut1, &whdr1, sizeof(WAVEHDR));
    
    char str[128];
    std::cout << "hello, world\n";
    std::cin >> str;

}

 

カテゴリー
学術

ジェネレーター3

矩形波をパソコンのラインから出力

 パソコンから20Hzの矩形波をライン出力してみました。LEDが8個並んでいるのはいずれシリアルパラレル変換するためです。今回は並列に接続しているので同じように動作します。下記のコードは4CH出力していますが、動画のLEDのボードに接続しているのはデバイス0のLeftです。

#include <iostream>
#include <string>
#include <windows.h>
#include <MMSystem.h>

#pragma comment (lib, "winmm.lib")

int main() {

    WAVEFORMATEX wfe;
    static HWAVEOUT hWaveOut;
    static WAVEHDR whdr;
    static LPBYTE lpWave;
    WAVEFORMATEX wfe2;
    static HWAVEOUT hWaveOut2;
    static WAVEHDR whdr2;
    static LPBYTE lpWave2;
    int i, len, start, end;
    int frequency = 20;
    int terms = 10;
    int sampling = 192000;

    wfe.wFormatTag = WAVE_FORMAT_PCM;
    wfe.nChannels = 2;
    wfe.wBitsPerSample = 8;
    wfe.nBlockAlign = wfe.nChannels * wfe.wBitsPerSample / 8;
    wfe.nSamplesPerSec = sampling;
    wfe.nAvgBytesPerSec = wfe.nSamplesPerSec * wfe.nBlockAlign;
    waveOutOpen(&hWaveOut, 0, &wfe, 0, 0, CALLBACK_NULL);
    lpWave = (LPBYTE)calloc(wfe.nAvgBytesPerSec, terms * wfe.nChannels);

    wfe2.wFormatTag = WAVE_FORMAT_PCM;
    wfe2.nChannels = 2;
    wfe2.wBitsPerSample = 8;
    wfe2.nBlockAlign = wfe2.nChannels * wfe2.wBitsPerSample / 8;
    wfe2.nSamplesPerSec = sampling;
    wfe2.nAvgBytesPerSec = wfe2.nSamplesPerSec * wfe2.nBlockAlign;
    waveOutOpen(&hWaveOut2, 2, &wfe2, 0, 0, CALLBACK_NULL);
    lpWave2 = (LPBYTE)calloc(wfe2.nAvgBytesPerSec, terms * wfe2.nChannels);

    // 立ち上がりは出力を0にする
    for (i = 0; i < sampling * terms * wfe.nChannels; i++) {
        lpWave[i] = 128;
        lpWave2[i] = 128;
    }

    len = sampling / frequency; 

    // 最初の8サイクルは出力しない
    start = len * 8 * wfe.nChannels;
    start = 0;
    // 8サイクル波形を出力する
    end = start + len * 32 * wfe.nChannels;
    printf("start=%d, end=%d\n", start, end);

    for (i = start; i < end; i++) {
        if ((i % 2) == 0) {
            if ((i/2) % len < len / 2) { lpWave[i] = 228; }
            else { lpWave[i] = 28; }}}

    len /= 2;
    for (i = start; i < end; i++) {
        if ((i % 2) == 1) {
            if ((i / 2) % len < len / 2) { lpWave[i] = 228; }
            else { lpWave[i] = 28; }}}

    len *= 2;
    for (i = start; i < end; i++) {
        if ((i % 2) == 1) {
            if ((i / 2) % len < len / 2) { lpWave2[i] = 228; }
            else { lpWave2[i] = 28; }
        }
    }

    len /= 2;
    for (i = start; i < end; i++) {
        if ((i % 2) == 0) {
            if ((i / 2) % len < len / 2) { lpWave2[i] = 228; }
            else { lpWave2[i] = 28; }
        }
    }

    whdr.lpData = (LPSTR)lpWave;
    whdr.dwBufferLength = wfe.nAvgBytesPerSec * terms;
    whdr.dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP;
    whdr.dwLoops = 1;
    waveOutPrepareHeader(hWaveOut, &whdr, sizeof(WAVEHDR));
    waveOutWrite(hWaveOut, &whdr, sizeof(WAVEHDR));

    whdr2.lpData = (LPSTR)lpWave2;
    whdr2.dwBufferLength = wfe.nAvgBytesPerSec * terms;
    whdr2.dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP;
    whdr2.dwLoops = 1;
    waveOutPrepareHeader(hWaveOut2, &whdr2, sizeof(WAVEHDR));
    waveOutWrite(hWaveOut2, &whdr2, sizeof(WAVEHDR));

    char str[128];
    std::cout << "hello, world\n";
    std::cin >> str;

 

デバイス0の出力
カテゴリー
学術

ジェネレーター2

 WindowsPCのサウンド出力を使って可聴範囲のジェネレーターを作ることができましたがチャンネルが二つでは足りないので追加してみました。

USB to 3.5mmオーディオケーブル
USB to 3.5mmオーディオケーブル

 USBのオーディオ出力を接続しPC本体の出力と合わせてステレオ出力×2=4チャンネルになります。

PC本体の出力
USBオーディオの出力(LとRを換えてみました)
#include <iostream>
#include <string>
#include <windows.h>
#include <MMSystem.h>

#pragma comment (lib, "winmm.lib")

int main() {

    WAVEFORMATEX wfe;
    static HWAVEOUT hWaveOut;
    static WAVEHDR whdr;
    static LPBYTE lpWave;
    WAVEFORMATEX wfe2;
    static HWAVEOUT hWaveOut2;
    static WAVEHDR whdr2;
    static LPBYTE lpWave2;
    int i, len, start, end;
    int terms = 1;
    int sampling = 192000;
    int frequency = 500;

    wfe.wFormatTag = WAVE_FORMAT_PCM;
    wfe.nChannels = 2;
    wfe.wBitsPerSample = 8;
    wfe.nBlockAlign = wfe.nChannels * wfe.wBitsPerSample / 8;
    wfe.nSamplesPerSec = sampling;
    wfe.nAvgBytesPerSec = wfe.nSamplesPerSec * wfe.nBlockAlign;
    waveOutOpen(&hWaveOut, 0, &wfe, 0, 0, CALLBACK_NULL);
    lpWave = (LPBYTE)calloc(wfe.nAvgBytesPerSec, terms * wfe.nChannels);

    wfe2.wFormatTag = WAVE_FORMAT_PCM;
    wfe2.nChannels = 2;
    wfe2.wBitsPerSample = 8;
    wfe2.nBlockAlign = wfe2.nChannels * wfe2.wBitsPerSample / 8;
    wfe2.nSamplesPerSec = sampling;
    wfe2.nAvgBytesPerSec = wfe2.nSamplesPerSec * wfe2.nBlockAlign;
    waveOutOpen(&hWaveOut2, 2, &wfe2, 0, 0, CALLBACK_NULL);
    lpWave2 = (LPBYTE)calloc(wfe2.nAvgBytesPerSec, terms * wfe2.nChannels);

    // 立ち上がりは出力を0にする
    for (i = 0; i < sampling * terms * wfe.nChannels; i++) {
        lpWave[i] = 128;
        lpWave2[i] = 128;
    }

    len = sampling / frequency; 

    // 最初の8サイクルは出力しない
    start = len * 8 * wfe.nChannels;
    // 8サイクル波形を出力する
    end = start + len * 8 * wfe.nChannels;
    printf("start=%d, end=%d\n", start, end);

    for (i = start; i < end; i++) {
        if ((i % 2) == 0) {
            if ((i/2) % len < len / 2) { lpWave[i] = 228; }
            else { lpWave[i] = 28; }}}

    len /= 2;
    for (i = start; i < end; i++) {
        if ((i % 2) == 1) {
            if ((i / 2) % len < len / 2) { lpWave[i] = 228; }
            else { lpWave[i] = 28; }}}

    len *= 2;
    for (i = start; i < end; i++) {
        if ((i % 2) == 1) {
            if ((i / 2) % len < len / 2) { lpWave2[i] = 228; }
            else { lpWave2[i] = 28; }
        }
    }

    len /= 2;
    for (i = start; i < end; i++) {
        if ((i % 2) == 0) {
            if ((i / 2) % len < len / 2) { lpWave2[i] = 228; }
            else { lpWave2[i] = 28; }
        }
    }

    whdr.lpData = (LPSTR)lpWave;
    whdr.dwBufferLength = wfe.nAvgBytesPerSec * terms;
    whdr.dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP;
    whdr.dwLoops = 1;
    waveOutPrepareHeader(hWaveOut, &whdr, sizeof(WAVEHDR));
    waveOutWrite(hWaveOut, &whdr, sizeof(WAVEHDR));

    whdr2.lpData = (LPSTR)lpWave2;
    whdr2.dwBufferLength = wfe.nAvgBytesPerSec * terms;
    whdr2.dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP;
    whdr2.dwLoops = 1;
    waveOutPrepareHeader(hWaveOut2, &whdr2, sizeof(WAVEHDR));
    waveOutWrite(hWaveOut2, &whdr2, sizeof(WAVEHDR));

    char str[128];
    std::cout << "hello, world\n";
    std::cin >> str;

}

 

4チャンネルあればデータに1CH、制御に3CH使えるのでUSBにマイコンをつながなくても様々なデジタル部品の制御ができそうです。

カテゴリー
学術

特徴点の傾向

ここの判定に差分が有っても総合すると一致してしまうことがあるが出ている差分の傾向と総合的に一致していることを合わせるとそれもまた特徴を現すことになるかもしれない。

カテゴリー
学術

種の起源

種の起源
種の起源

ダーウィンとコンピュータに関係はありませんが、種の起源の主張を取り入れれば人工知能ももう少しまともになる気がします。

カテゴリー
学術

リア王

リア王
リア王

演劇に携わっていない人もシェークスピアの名前は聞いたことがあると思います。偉大な人物であればその業績から学ぶことがあるかもしれないとリア王を読んでみました。が、今のところ私には理解が及ばず何かを得ることができませんでした。

カテゴリー
学術

サイバネティクス

サイバネティクス
サイバネティクス

 第三次人工知能ブームで新たに文庫化されたようです。第一次・第二次ブームの時の本が改めて読まれているのでしょうか。

カテゴリー
学術

ロウソクの科学

ロウソクの科学
ロウソクの科学

 電磁気学の専門家だと思っていました。

カテゴリー
学術

科学者と詩人

科学者と詩人
科学者と詩人
カテゴリー
学術

科学と方法

科学と方法
科学と方法

 科学者であっても自身の思想を文書に残すことの大切さを教えてくれる一冊です。

カテゴリー
学術

方法序説

方法序説
方法序説
カテゴリー
学術

科学と仮説

科学と仮設
科学と仮説
カテゴリー
学術

通信の数学的理論

通信の数学的理論
通信の数学的理論
情報源    
↓ メッセージ    
送信機    
↓ 信号    
雑音源
↓ 受信された信号    
受信機    
↓ メッセージ    
受信者    

 狭義の通信のみならず情報を処理するあらゆるところに適用できるモデルです。


 2021.04.07 信号処理とシステム制御 を読もうとしたのですが難しくてわかりませんでした。なのでここに戻って勉強し直します。

 2021.05.20 なんで最初に確率の話が長々と続いているかわかりました。通信する「情報」を数学的に表現すると確率論になるようです。

まえがき
$$
\log_{ 2 } M= \frac{\log_{10} M}{\log_{10} 2}=3.32 \log_{10} M
$$

離散的無雑音システム
$$
C=\displaystyle \lim_{ T \to \infty } \frac{\log N(T)}{T}
$$

$$
N(t)=N(t-t_1)+N(t-t_2)+\cdots +N(t-t_n)
$$

$$
X^{-t_1}+X^{-t_2}+\cdots +X^{-t_n}=1
$$

$$
C=\displaystyle \lim_{ T \to \infty } \frac{\log AX^T_0}{T}=\log X_0
$$

$$
\begin{vmatrix} \displaystyle \sum_s W^{-b^{(s)}_{ij}}-\delta_{ij} \end{vmatrix}=0
$$

ChatGPTに聞いてみた。

User

岩波文庫の通信の数学的理論はどんな本ですか。

ChatGPT

岩波文庫の『通信の数学的理論』は、アメリカの情報理論の創始者の一人であるクロード・シャノンによる著作で、情報理論の基本的な理論を解説した本です。本書は、1948年に発表され、その後も改訂が重ねられ、岩波文庫からも出版されています。

『通信の数学的理論』は、情報理論における重要な概念であるエントロピー、情報源符号化、通信路符号化、通信路容量などについて、数学的な導出過程を詳しく解説しています。また、情報理論の基礎的な公式や定理も紹介されています。

本書は、情報理論に関する古典的な著作であり、情報通信分野の専門家や、情報科学や数学、物理学などの分野に興味を持つ人にとって、非常に貴重な一冊となっています。また、現代においても、情報通信分野における研究や応用に役立つ基礎的な理論として、広く用いられています。

カテゴリー
学術

新科学対話

新科学対話
新科学対話

ChatGPTに聞いてみた。

User

岩波文庫の新科学対話はどんな本ですか。

ChatGPT

岩波文庫の『新科学対話』は、イタリアの科学史家であるジュゼッペ・リビによって書かれた本で、科学に関する対話形式の書籍です。本書は、1997年に刊行され、岩波文庫からも出版されています。

『新科学対話』は、ガリレオ・ガリレイやアイザック・ニュートン、ジョン・ロックなど、17世紀から18世紀にかけての科学者たちが抱えた問題について、当時の人々がどのように議論をしていたかを再現した対話形式で書かれています。また、当時の社会や文化的背景なども詳細に描写されています。

本書では、科学史研究の専門家である著者自身が、当時の科学者たちが直面した課題や、彼らが採用した方法論について語り合う形式で書かれています。また、読み物としての面白さもあるため、一般の人々にも読みやすい内容となっています。

『新科学対話』は、科学史や哲学、または科学技術に興味がある人にとって、非常に興味深い読み物となっています。

カテゴリー
学術

ギリシャ・ローマ神話

ギリシャ・ローマ神話
ギリシャ・ローマ神話

ChatGPTに聞いてみた。

User

トマス・ブルフィンチ著のギリシャ・ローマ神話はどんな本ですか。

ChatGPT

トマス・ブルフィンチ著の『ギリシャ・ローマ神話』は、ギリシャ神話とローマ神話に関するエピソードや物語をまとめた古典文学の書籍です。この本は、19世紀に出版され、以来、英語圏において広く読まれています。

この本には、神々や英雄の起源や冒険、愛や憎しみ、勝利や敗北についての物語が含まれています。神々や英雄の生涯を通して、古代ギリシャやローマ社会の文化や信仰、人間の存在についての哲学的な考え方が示されています。

ブルフィンチは、ギリシャ神話やローマ神話についての知識を広めることを目的に、これらの物語を再構成し、編纂したとされています。この本は、古代の神話や文化に興味がある人や、文学、美術、哲学などに興味がある人にとって、非常に興味深い読み物となっています。

カテゴリー
学術

2SA1015

2SA1015
2SA1015

ChatGPTにこれは何か聞いてみた。

User
2SA1015は何ですか。

ChatGPT
2SA1015は、一般的に用途が広く、小型のPNP(Positive-Negative-Positive)型トランジスタです。PNPトランジスタは、N型半導体とP型半導体の間に挟まれたN型のベースと呼ばれる領域を持ちます。

2SA1015は、電力増幅回路、スイッチング回路、DC-DCコンバータ、放送用音声出力段などのアプリケーションに適しています。また、高周波特性が良く、低ノイズ動作が可能です。

このトランジスタは、最大定格として、コレクタとエミッタ間の最大逆電圧が-50V、コレクタ電流が-150mA、最大電力が300mWであり、動作温度範囲は-55℃〜150℃です。また、SOT-23やSOT-89などの小型パッケージで提供されており、基板面積を節約することができます。

2SA1015は、一般的なPNPトランジスタであり、多くの電子回路で使用されています。ただし、最近では、より高性能なトランジスタが開発され、2SA1015のような一般的なトランジスタはあまり使用されなくなってきています。

カテゴリー
学術

DAC0800LCN

DAC0800LCN
DAC0800LCN

ChatGPTに聞いてみた。

DAC0800LCNは、National Semiconductor(現在はテキサス・インスツルメンツに統合)が製造した、8ビットの電圧出力型デジタル・アナログ・コンバータ(DAC)のICチップです。このチップは、デジタル入力信号をアナログ電圧に変換することができます。DAC0800LCNは、単一の電源電圧で動作し、+5Vから+15Vの範囲の電源電圧をサポートしています。

DAC0800LCNは、256個の出力レベルを持ち、入力信号は直接バイナリに対応しています。また、8つのデジタル入力ピンと2つのアドレス入力ピンを備えています。このチップには、オプションの外部基準電圧入力端子があり、内部基準電圧も使用できます。

DAC0800LCNは、高速かつ精度の高いDACが必要なアプリケーションに適しています。例えば、オーディオ・アンプ、自動制御、ロボット、産業自動化、計測器などが挙げられます。このチップは、DIP(デュアルインラインパッケージ)パッケージで提供されています。

カテゴリー
学術

HM62256ALP-15

HM62256ALP-15
HM62256ALP-15

ChatGPTにこれは何か聞いてみた。

User
HM62256ALP-15は何ですか。

ChatGPT
HM62256ALP-15は、日本の半導体メーカーであるHitachiが製造している静的RAM (Random Access Memory) ICの1つです。このICは、256キロビットの容量を持つ、15ナノ秒アクセスタイムを持つ高速なSRAMです。

HM62256ALP-15は、低消費電力設計を採用しており、静電気放電(ESD)に対する耐性があります。また、シンプルなアドレス指定により、外部からのデータ読み書きが容易にできます。

HM62256ALP-15は、16ピンのデュアルインラインパッケージ (DIP)またはSOICパッケージに収められており、一般的に、マイクロプロセッサやマイクロコントローラなどのCPUとして使用されることが多いです。また、キャッシュメモリやバッファメモリとしても使用されることがあります。

ただし、HM62256ALP-15は製造中止となっており、現在は入手が困難になっている可能性があります。代替品や後継品を使用する必要があるかもしれません。