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



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

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

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

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

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

有人能帮我把它们翻译成特定角度的时域表示吗(使用特定角度的幅值和相位信息),并构造一个要使用的传递函数???

任何帮助都将不胜感激。

为了将响应从频域转换为时域,需要执行傅立叶逆变换。在matlab中,这是用函数ifft完成的。

让我们考虑将数据从第一个文件加载到变量magnitude,并将数据从第二个文件加载至变量phase。你必须首先将这两个变量合并为一个单一的复值矩阵

f_response = complex(magnitude.*cosd(phase),magnitude.*sind(phase));

f_response是换能器的实际响应,可以提供给ifft以获得时域响应。然而,还有一个复杂的问题,即ifft所隐含的假定频率阶数。虽然matlab没有提供太多关于这方面的细节,但如果你查看fft文档,你会发现fft返回了两个频率分支。频率响应的排序方式必须符合matlab的预期顺序。例如,如果您以文档中的第一个示例为例

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列。你需要为我上传一些样本数据,以便能够在这方面提供更多帮助。

最新更新