I'm trying to find the system transfer function of a set of input-output data using the FFT method. The algorithm I'm following is as follows:
My code is:
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))
I get the following error:
Error using bode (line 84)
Not enough input arguments.
Please guide me how to go about steps 4 and 5 in the above algorithm.
Use element-wise divide , not matrix divide, and plot using the plot function. To produce a plot similar to that shown in the bode function you can plot using semilogx but do the dB and degree conversions yourself:
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))
Generate the x-axis using however you like, I usually use normalized radian frequency from 0 to 1, which is just linspace(0,1,length(fft_ratio))
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.