我需要对输入为扭矩、输出为位置的积分过程进行频率分析。如果输入是正弦曲线,则输出如下所示:
我用来提取幅度比和相位的代码如下所示:
freq = 40;
freq_rad = freq * 2 * pi
phase_offset_rad = 30 * pi / 180
gain = 0
fs = 500;
L = 100;
t = (0:L-1)*(1/fs);
in = 2 * sin(freq * 2 * pi * t);
pos_in = [];
vel = 0;
pos = 0;
for i = 1:length(t)
vel = vel + in(i);
pos = pos + vel;
pos_in = [pos_in; pos];
end
out = pos_in;
%out = (2 + gain) * sin(freq * 2 * pi * t + phase_offset_rad);
fft_in = fft(in);
fft_out = fft(out);
[mag_in idx_in] = max(abs(fft_in));
[mag_out idx_out] = max(abs(fft_out));
phase = angle(fft_out(idx_out)) - angle(fft_in(idx_in))
phase_deg = phase / (pi / 180)
ratio = mag_out / mag_in
如果我在完全直的正弦信号上运行它,那么它就可以完美运行。但是一旦我像上面那样添加失真,相位和幅度值都不正确。我想我需要以某种方式“压平”信号。但我不确定如何从中提取正确的幅度。幅度是多少?我会在输出中说从一个“高原”到下一个“高原”的测量值约为 45,因为这就是事物移动的距离。那将是〜22.5的比率。但是计算的结果是 196。
也许我想错了?我想最终使用实验数据得出从扭矩输入到位置输出的传递函数。也许有人可以展示如何做到这一点?
我一直在想我能做的是记录幅度比和相位,然后制作一个波特图,从中轻松提取传递函数。到目前为止,我还无法从具有不同输入频率的运行测试中获得波特图。