如何在matlab中找到矩阵的波特图?

时间:2013-10-17 18:39:31

标签: matlab

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

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

    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步。

1 个答案:

答案 0 :(得分:1)

使用element-wise divide,而不是矩阵除法,并使用绘图功能绘图。为了生成类似于bode function中所示的情节,您可以使用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))