Cách vẽ biểu đồ bode bằng tay

      109

Giới thiệu

Bài viết này sẽ hướng dẫn xử lý và lọc sơ bộ tín hiệu trước khi tính toán và vẽ giản đồ Bode. Giả sử tiến hành khảo sát hệ thống với thời gian lấy mẫu 0.01s, tín hiệu ngõ vào và ngõ ra đo được có dạng như trong bảng dưới. Sau mỗi lần khảo sát, dữ liệu được lưu vào file data.mat. Sau nhiều lần các dữ liệu được lưu vào file data1.mat, data2.mat … Các file dữ liệu mẫu download ở cuối bài viết.

Kiểm tra dữ liệu

Dùng hàm plot để vẽ đồ thị tín hiệu thô, qua đó có đánh gia sơ bộ

% Tien Anh% https://bmshop.vnload('data1.mat') % import datatimes = data(:,1); % timesfigure(1);grid onhold onplot(times,data(:,2),'-r'); % inputplot(times,data(:,3),'-b'); % outputKết quả:

*
Tín hiệu thô

Tín hiệu thô

Bộ lọc butterworth

Giới thiệu bộ lọc butterworth: (đang cập nhật)

load('data1.mat') % import datatimes = data(:,1); % times% su dung ham dtrend de offset data% Minh chua ro doan nay laminput=dtrend(data(:,2),3);output=dtrend(data(:,3),3);% Minh chua ro cach dung bo loc butter = butter(3,0.2);input_filted = filter(B,A,input);output_filted = filter(B,A,output);figure(3);grid onhold onplot(times,input_filted,'-r',times,output_filted,'-b');Kết quả:

*
Tín hiệu sau khi lọc

Tín hiệu sau khi lọc

Vẽ giản đồ Bode

%% Plot bode from experimental data - version 0.5% Author: Tien Anh% Info: https://bmshop.vn% Info: Matlab 2014a%%clc;clear all;points_bode = <0 0 0>;% vong lap ve cho 9 mau du lieufor idx=1:9 filename=sprintf('data%s.mat',num2str(idx)); Data = importdata(filename); times = Data(:,1); t_sampling = Data(2,1)-Data(1,1); % Sampling time %% Offset data input=dtrend(Data(:,2),3); output=dtrend(Data(:,3),3); %% Butterworth Filter = butter(3,0.2); input_filted = filter(m,n,input); output_filted = filter(m,n,output); index_in=0; %% Find maxima of input for k=2:length(input_filted)-1 if input_filted(k)>input_filted(k-1) && input_filted(k)>input_filted(k+1) index_in = ; end end index_in(1,:)=<>; % Trim data %% Find average of input frequencies temp = 0; for k=1:length(index_in)-1 temp=; end temp(1,:)=<>; % Trim data freq = mean(temp); Wn = 2*pi*freq; index_out=0; %% Find maxima of output for k=2:length(output_filted)-1 if output_filted(k)>output_filted(k-1) && output_filted(k)>output_filted(k+1) index_out = ; end end index_out(1,:)=<>; % Trim data %% Tim bien do va do lech pha bode_data = zeros(1,2); for k=1:length(index_out) if (output_filted(index_out(k))/input_filted(index_in(k))>=1) L = 20*log10(output_filted(index_out(k))/input_filted(index_in(k))); phi = (times(index_in(k))-times(index_out(k)))*360; bode_data=>; end end bode_data(1,:)=<>; points_bode = >;endpoints_bode(1,:)=<>;%% Make plotfigure(1); clf% Magnitude plot on topsubplot(2, 1, 1)semilogx(points_bode(:,3), points_bode(:,1), 'r-o');grid on% Phase plot on bottomsubplot(2,1,2)semilogx(points_bode(:,3), points_bode(:,2), 'r-o')grid onKết quả: