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的错误。无法编译通过。
- 引入的随机噪声极不妥当,噪声某些点位能比信号本身强几百倍。
- 纠正完这些错误后,伪谐波仍然没有出现:
- 那个circ的用法,我不确定是否适合。
下面是结果,依然没有伪谐波出现:
这个时候,就不要企图从AI哪里得到更多信息了。它尽力了。