Cách Vẽ Biểu Đồ Bode Bằng Tay

      17

Giới thiệu

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

Kiểm tra dữ liệu

Dùng hàm plot để vẽ vật dụng thị biểu thị thô, qua đó có tấn công 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ả:

*
biểu lộ thô

Tín hiệu thô

Bộ thanh lọc butterworth

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

load('data1.mat') % import datatimes = data(:,1); % times% su dung mê mẩn dtrend de offset data% Minh chua ro doan ni 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 khoản thời gian lọc

Tín hiệu sau khoản thời gian lọc

Vẽ giản thiết bị 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 đầu vào 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 đầu ra 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 vì chưng va vày 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ả: