0

我正在尝试使用 FFT 方法找到一组输入输出数据的系统传递函数。我遵循的算法如下:

  1. 将输入数据和输出数据加载到matlab中。
  2. FFT 输入数据和输出数据。
  3. 将输出 FFT 除以输入 FFT 并取幅值。由于我们示例的输入是单位脉冲,因此输入 FFT 为 1.0。
  4. 将结果绘制为波特图。
  5. 将得到的 Bode' 图视为频率响应 - 它确实是 - 并使用频率响应方法将传递函数拟合到计算的 Bode' 图。

我的代码是:

load testdata.mat; // testdata is a 2 column matrix (1001x2 matrix)

input = fft(signal(:,1)); // FFT of input data (1001x1 complex matrix)

output = fft(signal(:,2)); // FFT of output data (1001x1 complex matrix)

fft_ratio = output/input; // (1001x1001 complex matrix)

fft_ratio_mag = abs(fft_ratio); // (1001x1001 matrix) except column 1, all other    columns have '0' data

bode(fft_ratio_mag(:,1))

我收到以下错误:

Error using bode (line 84)
Not enough input arguments.

请指导我如何执行上述算法中的第 4 步和第 5 步。

4

1 回答 1

1

使用逐元素除法,而不是矩阵除法,并使用绘图函数进行绘图。要生成类似于bode函数中所示的绘图,您可以使用semilogx绘图,但您自己进行 dB 和度数转换:

fft_ratio = output ./ input % note the dot
subplot(2,1,1)
semilogx(20*log10(abs(fft_ratio)))
subplot(2,1,2)
semilogx(plot((180/pi)*angle(fft_ratio))

使用你喜欢的任何方式生成 x 轴,我通常使用从 0 到 1 的归一化弧度频率,即linspace(0,1,length(fft_ratio)).

于 2013-10-17T19:37:33.887 回答