我正在尝试使用FFT方法找到一组输入输出数据的系统传递函数。我正在遵循的算法如下:
我的代码是:
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步。
答案 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))
。