1

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

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

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

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

同样,角度(以度为单位)(对应于列)位于第 4 个文件给出的另一个矩阵中。

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

任何帮助将不胜感激。

4

1 回答 1

1

为了将频域的响应转换为时域,您需要执行傅里叶逆变换。在 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列。您需要上传一些示例数据,以便我能够提供更多帮助。

于 2017-01-23T17:50:10.553 回答