はじめに
これまでに離散フーリエ変換についてまとめてきました。今回は番外として、離散フーリエ変換を扱う中でChatGPTと対話したログを示します。理解促進、コード生成に役立てることができたかなぁと思っています。
高速フーリエ変換の前段である離散フーリエ変換を理解する 【No.1 離散フーリエ変換連載】 - YU2TA7KA's BLOG ~take one step at a time~
離散フーリエ変換の実装と結果解釈【No.2 離散フーリエ変換連載】 - YU2TA7KA's BLOG ~take one step at a time~
離散フーリエ変換による波形データの周波数解析【No.3 離散フーリエ変換連載】 - YU2TA7KA's BLOG ~take one step at a time~
DFT行列の発見
離散フーリエ変換の式内にWで表現される行列があります。これは非常に特徴的とは感じましたが、うまく言語化できませんでした。これについてそのまま質問したら、下記のようなやりとりとなり大変理解を深めることができました。検索エンジンではこうはならないので、はじめてChatGPTをうまく使えたなと思えました。
コード生成
最近いろいろな記事で紹介されているソースコード自動生成です。私は離散フーリエ変換への入力波形生成とリファクタリング生成の依頼をしました。どちらも良い感じにしてくれました。これまでの記事で紹介しているソースコードはChatGPTにリファクタリングしてもらって、動作結果が変わらないことを確認して、載せています。自分が実装しようとしているものが、巷にありそう(検索すれば玉石混交で大量に出そう)だなと思えるものはガンガンChatGPTさんで生成してくれる感じがします。逆にまだネットに溢れてなさそうなコードはやっぱり応答してくれません。
おわりに
番外編として、離散フーリエ変換を扱うにあたりChatGPTと行ったやりとりに関して紹介しました。これだけのことでも大変に有用なので、自身の生活にうまいことChatGPTも取り込んでいきたいなと思います。
本丸のFFTは以下のインターフェースで紹介されていたものを写経して理解できないかなと思っています。そして組込みRust本で紹介されているスペクトルアナライザを自分の手元でもやりたいなと思います。
おまけ
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()