要将响应从频域转换到时域,您需要执行inverse Fourier transformation。在 matlab 中,这是通过函数 ifft 完成的。
假设您将第一个文件中的数据加载到变量magnitude 中,并将第二个文件中的数据加载到变量phase 中。您必须首先将这两个变量合并为一个复数值矩阵
f_response = complex(magnitude.*cosd(phase),magnitude.*sind(phase));
f_response 是传感器的实际响应,可以提供给ifft 以获得时域响应。但是有一个复杂的情况,ifft 隐含的假定频率顺序。虽然 matlab 没有提供这方面的太多细节,但是如果你查看fft docs,你会看到fft 返回了两个频率分支。频率响应的排序方式必须与 matlab 的预期顺序相对应。以docs中的第一个例子为例
Fs = 1000; % Sampling frequency
T = 1/Fs; % Sampling period
L = 1000; % Length of signal
t = (0:L-1)*T; % Time vector
S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
X = S + 2*randn(size(t));
Y = fft(X);
与每个傅里叶变换输出Y 条目对应的频率数组为:
f = Fs/L*[0:(L/2-1),-L/2:-1];
为了正确应用傅立叶逆变换,您必须检查频率文件中的顺序(假设您将其内容加载到变量frequencies)必须与f 完全相同。请注意,f 有一个规则增加的第一个分支,然后不连续地跳转到负频率。频率的符号用来表示行波的传播方向。如果您的数据仅包含正频率,那将非常好,因为您可以轻松构建负频率分支:
[frequencies,ix] = sort(frequencies);
f_response = f_response(:,ix);
f_response = 0.5*[f_response(:,1:end-1),f_response(:,end:-1:2)];
然后通过做反转它
t_response = ifft(f_response,[],1);
请注意,由于您需要每个角度的响应,因此必须对每一行进行逆变换。这是通过ifft 的第三个输入来实现的。
如果您的frequencies 数据文件有负频率,那么您必须对其进行正确排序,然后相应地重新排序f_response 列。您需要上传一些示例数据,以便我能够提供更多帮助。