0
点赞
收藏
分享

微信扫一扫

AI初体验 - 最初的两次AI辅助开发

八怪不姓丑 2023-06-10 阅读 102

1.第一个尝试:物理公式

2023年6月7日,是我第一次在 AI(ChatGPT)的帮助下,完成了一个数据分析工作。当时手里有一些数据,我大致知道物理原理,但是无法给出一个合适的公式。我大概工作了5个小时,没有进展,数据对不上,一个朋友推荐我用ChatGPT——AI的知识库很庞杂,它说出那个公式后,我立马意识到那个公式是对的。然后,使用这个公式代入数据后,误差直接与测量的误差相匹配,0.5~1%的误差级别,我的测量误差也就是这个区间。

2.第二个尝试:编写脚本

昨天(2023年6月8日)尝试在进行一个.bat脚本编写,发现系统执行时无反馈;让AI介入了多轮,检查语句语法,来回折腾了10几个回合还是不行。这个脚本里会用到一个.bat的高级扩展语法,我怀疑是系统不支持。后来,我想到它最初给的解决方案是python脚本,于是想再试试,下载了python执行环境,这一次,我没有让AI直接辅助编写,而是仅仅询问必要的语法规则。然后大概5~6轮后,程序正常执行了:

import os
import re

print(os.getcwd());
prefix_re = re.compile(r'^(\d+\.\d+)')

for filename in os.listdir(os.getcwd()):
    #try:
        match = prefix_re.match(filename)
        if match:
            sample_rate = match.group(1);
            csv_filename = filename;
            trc_filename = 'trc\\' + filename.replace("txt", "trc");
            vol_ratio = "1";
            cmdline = r'D:\git2023\project\SampleDataTransferI\SampleData_CSV2LecoryTrc\bin\Debug\net6.0\SampleData_CSV2LecoryTrc.exe %s %s %s%s %s'%(csv_filename,trc_filename,sample_rate,"e-6",vol_ratio);
            print(cmdline);
            os.system(cmdline);
    #except:
    #    continue

上面的代码会从文件名中提取浮点格式的数字信息,然后将其整理成命令行参数,调用外部命令执行。

作为一个交互式的函数辅助查询用途,AI工作的非常完美,询问物理公式之类的,都很棒。这些明确的知识点,AI能够工作的很完美,这里有另一个例子(Jun09,2023清晨):

AI的表现会非常诚恳,给你更多的信息,拓展与问题相关的知识点。但是它给出的建议并不是完全正确的,很多时候,你必须经过测试。 

昨晚还测试过它对近体诗的理解。他对一些非常基础的知识点理解的不够——比如它甚至不明白近体诗的句子必须每一句字数相等。在提示后,甚至指出了它的回答前后矛盾,它仍然会坚持自己的看法——它会表达您说的对,但是它的逻辑无法很快做出修改。尝试写出的一些诗作,有点惨不忍睹,在这些方面,甚至达不到普通幼童的智力水平。在你一次次地做相关提示后,它仍然会坚持错误的写法。并且错误会显得更离。

 3.ChatGPT最适合的工作:

你需要询问具体的问题,把所有的可能歧义消除掉。 AI会回答的又快又好。AI作为智能助理是够格的。

后记:那段AI写的演示FFT出现伪谐波的代码

是错的,原始信号:

它以为会出现伪谐波的情形:仍然是两条谱线:

没有额外的谐波出现,在给AI提供了未观测到伪谐波出现的信息后,AI又给出了一个版本,它这次在我的提示下,引入了测量可能产生的相位差和随机噪声:

% 产生一个包含1000Hz、2000Hz、3000Hz三个正弦波信号的复合信号
Fs = 8000;
f1 = 1000;
f2 = 2000;
f3 = 3000;
t = 0:1/Fs:0.01;
signal = sin(2*pi*f1*t) + 0.7*sin(2*pi*f2*t) + 0.5*sin(2*pi*f3*t);

% 对信号进行FFT分析
signal_fft = fft(signal);
signal_fft = abs(signal_fft(1:round(length(signal_fft)/2)+1)); % keep only the first half of the spectrum
signal_fft(2:end-1) = 2*signal_fft(2:end-1); % double the magnitude to account for the other half of the spectrum
f_axis = 0:Fs/length(signal):Fs/2;

figure(1)
subplot(3,1,1)
plot(t,signal)
xlabel('Time (s)')
ylabel('Amplitude')
title('Original Signal')

subplot(3,1,2)
plot(f_axis,signal_fft)
xlabel('Frequency (Hz)')
ylabel('Magnitude')
title('FFT of Original Signal')

% 模拟采样偏移和随机干扰
rand_offset = randi(round(Fs/200), length(signal), 1)-round(Fs/400); % random offset between -2-Fs/400 and 2+Fs/400
perturbation = randn(length(signal), 1) .* exp(-10*sin(2*pi*linspace(0,1,length(signal))')); % random perturbation
delayed_signal = circshift(signal,rand_offset) + perturbation; % add sample delay and noise to the signal

% 对采样后的信号进行FFT分析
delayed_fft = fft(delayed_signal);
delayed_fft = abs(delayed_fft(1:round(length(delayed_fft)/2)+1));
delayed_fft(2:end-1) = 2*delayed_fft(2:end-1);
f_axis = 0:Fs/length(delayed_signal):Fs/2;

subplot(3,1,3)
plot(f_axis,delayed_fft)
xlabel('Frequency (Hz)')
ylabel('Magnitude')
title('FFT of Sampled Signal with Perturbation')

看起来,像模像样,甚至还是一屏3图的模式,但这一次的代码甚至有错误:

  1. 序列出现了+-1的错误。无法编译通过。
  2. 引入的随机噪声极不妥当,噪声某些点位能比信号本身强几百倍。
  3. 纠正完这些错误后,伪谐波仍然没有出现:
  4. 那个circ的用法,我不确定是否适合。

下面是结果,依然没有伪谐波出现:

 这个时候,就不要企图从AI哪里得到更多信息了。它尽力了。

举报

相关推荐

0 条评论