将换能器的频率域数据转换为时域传递函数

时间:2017-01-23 05:11:11

标签: matlab frequency-analysis transfer-encoding

我有几个.mat文件,表示换能器(发射器)的特性;我想将数据用于我的Matlab代码,以便观察它对我的发送信号的响应。

第一个文件包含传感器的幅度,如下所示:每行包含一个角度的频率响应。每列包含一个频率的角度响应。

类似地,我有另一个.mat文件,其中包含发送电压响应的相应相位(以度为单位)

频率(以Hz为单位)(对应于行)位于由第三个.mat文件给出的另一个矩阵中

并且类似地,角度(以度为单位)(对应于列)位于由第4个文件给出的另一个矩阵中。

有人可以帮助我将这些转化为特定角度的时域表示(使用特定角度的幅度和相位信息)并构建要使用的传递函数???

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

要将频域的响应转换为时域,您需要执行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)必须与{{1}完全相同。 }。请注意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)];

请注意,如您所希望每个角度的响应,每行必须进行逆变换。这是通过ifft的第三个输入实现的。

如果您的t_response = ifft(f_response,[],1); 数据文件具有负频率,则必须正确排序,然后相应地重新排序frequencies列。您需要为我上传一些示例数据,以便能够提供更多帮助。