YU2TA7KA's BLOG ~take one step at a time~

派生開発、組み込み開発周りのこと。

【番外】離散フーリエ変換学習時のChatGPTとの対話ログ【No.4 離散フーリエ変換連載】

DFT行列の発見

離散フーリエ変換の式内にWで表現される行列があります。これは非常に特徴的とは感じましたが、うまく言語化できませんでした。これについてそのまま質問したら、下記のようなやりとりとなり大変理解を深めることができました。検索エンジンではこうはならないので、はじめてChatGPTをうまく使えたなと思えました。




コード生成

最近いろいろな記事で紹介されているソースコード自動生成です。私は離散フーリエ変換への入力波形生成とリファクタリング生成の依頼をしました。どちらも良い感じにしてくれました。これまでの記事で紹介しているソースコードはChatGPTにリファクタリングしてもらって、動作結果が変わらないことを確認して、載せています。自分が実装しようとしているものが、巷にありそう(検索すれば玉石混交で大量に出そう)だなと思えるものはガンガンChatGPTさんで生成してくれる感じがします。逆にまだネットに溢れてなさそうなコードはやっぱり応答してくれません。

おわりに

番外編として、離散フーリエ変換を扱うにあたりChatGPTと行ったやりとりに関して紹介しました。これだけのことでも大変に有用なので、自身の生活にうまいことChatGPTも取り込んでいきたいなと思います。
本丸のFFTは以下のインターフェースで紹介されていたものを写経して理解できないかなと思っています。そして組込みRust本で紹介されているスペクトルアナライザを自分の手元でもやりたいなと思います。

cc.cqpub.co.jp


おまけ

ChatGPTによる波形出力のコード

def generate_cos_wave(frequency, amplitude, sampling_rate, duration):
    """Generate a cosine wave signal.

    Args:
        frequency (float): The frequency of the wave in Hz.
        amplitude (float): The amplitude of the wave.
        sampling_rate (int): The number of samples per second.
        duration (float): The duration of the signal in seconds.

    Returns:
        time_array(numpy.ndarray)
        signal(numpy.ndarray): A numpy array containing the signal.
    """
    # calculate the number of samples
    num_samples = int(sampling_rate * duration)

    # generate the time array
    time_array = np.arange(num_samples) / sampling_rate

    # generate the signal
    signal = amplitude * np.cos(2 * np.pi * frequency * time_array)

    return time_array, signal

def plot_signal(time, signal):
    plt.plot(time, signal)
    plt.xlabel('Time (seconds)')
    plt.ylabel('Amplitude')
    plt.title('Waveform')
    plt.show()