⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ninteger.m

📁 国外人编写的一个分数阶系统的控制工具箱
💻 M
📖 第 1 页 / 共 3 页
字号:
            ylabel('Step response')
        case 6 % pole and zero placement
            [zeros_open_loop, poles_open_loop] = zpkdata(handles.open_loop, 'v');
            axes(handles.plot)
            plot(real(zeros_open_loop), imag(zeros_open_loop), 'ob',...
                real(poles_open_loop), imag(poles_open_loop), 'xr')
            if handles.open_loop.Ts == 0
                grid
            else
                zgrid
            end
            xlabel('Real')
            ylabel('Imaginary')
    end
else % plant parameter variations were given
    Ts = handles.open_loop.Ts;
    variable = handles.open_loop.variable;
    switch plot_type
        case 1 % Bode diagram
            w = logspace(log10(wl), log10(wh));
            [gain, phase] = bode(handles.open_loop, w);
            gain = 20*log10(squeeze(gain));
            phase = squeeze(phase);
            % gain variations
            [gain2, phase2] =...
                bode(handles.open_loop * (k+vargain(1)) / k, w);
            gain2 = 20*log10(squeeze(gain2));
            phase2 = squeeze(phase2);
            [temp1, temp2] =...
                bode(handles.open_loop * (k+vargain(2)) / k, w);
            gain2 = [gain2, 20*log10(squeeze(temp1))];
            phase2 = [phase2, squeeze(temp2)];
            % zero variations
            for i=1:length(zeros)
                if imag(zeros(i)) > 0 % this is a complex zero that was already cared for
                    continue % skip this zero
                end
                for j=1:2
                    if imag(zeros(i))==0
                        correction = zpk(zeros(i)+varzeros(i,j), zeros(i), 1,...
                            Ts, 'Variable', variable);
                    else
                        correction = zpk([zeros(i)+varzeros(i,j)...
                                conj(zeros(i))+conj(varzeros(i,j))],...
                            [zeros(i) conj(zeros(i))], 1, Ts, 'Variable', variable);
                    end
                    [temp1, temp2] =...
                        bode(tf(ss(handles.open_loop * correction)), w);
                    gain2 = [gain2, 20*log10(squeeze(temp1))];
                    phase2 = [phase2, squeeze(temp2)];
                end
            end
            % pole variations
            for i=1:length(poles)
                if imag(poles(i)) > 0 % this is a complex zero that was already cared for
                    continue % skip this zero
                end
                for j=1:2
                    if imag(poles(i))==0
                        correction = zpk(poles(i)+varpoles(i,j), poles(i), 1,...
                            Ts, 'Variable', variable);
                    else
                        correction = zpk([poles(i)+varpoles(i,j)...
                                conj(poles(i))+conj(varpoles(i,j))],...
                            [poles(i) conj(poles(i))], 1, Ts, 'Variable', variable);
                    end
                    [temp1, temp2] =...
                        bode(tf(ss(handles.open_loop * correction)), w);
                    gain2 = [gain2, 20*log10(squeeze(temp1))];
                    phase2 = [phase2, squeeze(temp2)];
                end
            end
            % plot
            axes(handles.plot1)
            semilogx(w, gain2, 'm-', w, gain, 'b-')
            grid
            xlabel('Frequency (rad/s)')
            ylabel('Gain (dB)')
            axes(handles.plot2)
            semilogx(w, phase2, 'm-', w, phase, 'b-')
            grid
            ylabel('Phase (degrees)')
        case 2 % Nichols diagram
            w = logspace(log10(wl), log10(wh));
            [gain, phase] = bode(handles.open_loop, w);
            gain = 20*log10(squeeze(gain));
            phase = squeeze(phase);
            % gain variations
            [gain2, phase2] =...
                bode(handles.open_loop * (k+vargain(1)) / k, w);
            gain2 = 20*log10(squeeze(gain2));
            phase2 = squeeze(phase2);
            [temp1, temp2] =...
                bode(handles.open_loop * (k+vargain(2)) / k, w);
            gain2 = [gain2, 20*log10(squeeze(temp1))];
            phase2 = [phase2, squeeze(temp2)];
            % zero variations
            for i=1:length(zeros)
                if imag(zeros(i)) > 0 % this is a complex zero that was already cared for
                    continue % skip this zero
                end
                for j=1:2
                    if imag(zeros(i))==0
                        correction = zpk(zeros(i)+varzeros(i,j), zeros(i), 1,...
                            Ts, 'Variable', variable);
                    else
                        correction = zpk([zeros(i)+varzeros(i,j)...
                                conj(zeros(i))+conj(varzeros(i,j))],...
                            [zeros(i) conj(zeros(i))], 1, Ts, 'Variable', variable);
                    end
                    [temp1, temp2] =...
                        bode(tf(ss(handles.open_loop * correction)), w);
                    gain2 = [gain2, 20*log10(squeeze(temp1))];
                    phase2 = [phase2, squeeze(temp2)];
                end
            end
            % pole variations
            for i=1:length(poles)
                if imag(poles(i)) > 0 % this is a complex zero that was already cared for
                    continue % skip this zero
                end
                for j=1:2
                    if imag(poles(i))==0
                        correction = zpk(poles(i)+varpoles(i,j), poles(i), 1,...
                            Ts, 'Variable', variable);
                    else
                        correction = zpk([poles(i)+varpoles(i,j)...
                                conj(poles(i))+conj(varpoles(i,j))],...
                            [poles(i) conj(poles(i))], 1, Ts, 'Variable', variable);
                    end
                    [temp1, temp2] =...
                        bode(tf(ss(handles.open_loop * correction)), w);
                    gain2 = [gain2, 20*log10(squeeze(temp1))];
                    phase2 = [phase2, squeeze(temp2)];
                end
            end
            % plot
            axes(handles.plot)
            plot(phase2, gain2, 'm-', phase, gain, 'b-')
            ngrid
            xlabel('Phase (degrees)')
            ylabel('Gain (dB)')
        case 3 % Nyquist diagram
            w = logspace(log10(wl), log10(wh));
            response = squeeze(freqresp(handles.open_loop, w));
            % gain variations
            response2 =...
                squeeze(freqresp(handles.open_loop * (k+vargain(1)) / k, w));
            response2 = [response2, squeeze(freqresp(handles.open_loop *...
                        (k+vargain(2)) / k, w))];
            % zero variations
            for i=1:length(zeros)
                if imag(zeros(i)) > 0 % this is a complex zero that was already cared for
                    continue % skip this zero
                end
                for j=1:2
                    if imag(zeros(i))==0
                        correction = zpk(zeros(i)+varzeros(i,j), zeros(i), 1,...
                            Ts, 'Variable', variable);
                    else
                        correction = zpk([zeros(i)+varzeros(i,j)...
                                conj(zeros(i))+conj(varzeros(i,j))],...
                            [zeros(i) conj(zeros(i))], 1, Ts, 'Variable', variable);
                    end
                    response2 = [response2,...
                            squeeze(freqresp(handles.open_loop * correction,...
                            w))];
                end
            end
            % pole variations
            for i=1:length(poles)
                if imag(poles(i)) > 0 % this is a complex zero that was already cared for
                    continue % skip this zero
                end
                for j=1:2
                    if imag(poles(i))==0
                        correction = zpk(poles(i)+varpoles(i,j), poles(i), 1,...
                            Ts, 'Variable', variable);
                    else
                        correction = zpk([poles(i)+varpoles(i,j)...
                                conj(poles(i))+conj(varpoles(i,j))],...
                            [poles(i) conj(poles(i))], 1, Ts, 'Variable', variable);
                    end
                    response2 = [response2,...
                            squeeze(freqresp(handles.open_loop * correction,...
                            w))];
                end
            end
            % plot
            axes(handles.plot)
            plot(real(response2), imag(response2), 'm-',...
                real(response), imag(response), 'b-', -1, 0, 'r.')
            grid
            xlabel('Real')
            ylabel('Imaginary')
        case 4 % impulse response
            if Ts>0
                t = 0:Ts:tfinal;
            else
                t = 0:tfinal/100:tfinal;
            end
            out = impulse(handles.open_loop, t);
            % gain variations
            out2 = impulse(handles.open_loop * (k+vargain(1)) / k, t);
            out2 = [out2,...
                    impulse(handles.open_loop * (k+vargain(2)) / k, t)];
            % zero variations
            for i=1:length(zeros)
                if imag(zeros(i)) > 0 % this is a complex zero that was already cared for
                    continue % skip this zero
                end
                for j=1:2
                    if imag(zeros(i))==0
                        correction = zpk(zeros(i)+varzeros(i,j), zeros(i), 1,...
                            Ts, 'Variable', variable);
                    else
                        correction = zpk([zeros(i)+varzeros(i,j)...
                                conj(zeros(i))+conj(varzeros(i,j))],...
                            [zeros(i) conj(zeros(i))], 1, Ts, 'Variable', variable);
                    end
                    out2 = [out2,...
                            impulse(handles.open_loop * correction, t)];
                end
            end
            % pole variations
            for i=1:length(poles)
                if imag(poles(i)) > 0 % this is a complex zero that was already cared for
                    continue % skip this zero
                end
                for j=1:2
                    if imag(poles(i))==0
                        correction = zpk(poles(i)+varpoles(i,j), poles(i), 1,...
                            Ts, 'Variable', variable);
                    else
                        correction = zpk([poles(i)+varpoles(i,j)...
                                conj(poles(i))+conj(varpoles(i,j))],...
                            [poles(i) conj(poles(i))], 1, Ts, 'Variable', variable);
                    end
                    out2 = [out2,...
                            impulse(handles.open_loop * correction, t)];
                end
            end
            % plot
            axes(handles.plot)
            plot(t, out2, 'm-', t, out, 'b-')
            grid
            xlabel('Time (s)')
            ylabel('Impulse response')
        case 5 % step response
            if Ts>0
                t = 0:Ts:tfinal;
            else
                t = 0:tfinal/100:tfinal;
            end
            out = step(handles.open_loop, t);
            % gain variations
            out2 = step(handles.open_loop * (k+vargain(1)) / k, t);
            out2 = [out2,...
                    step(handles.open_loop * (k+vargain(2)) / k, t)];
            % zero variations
            for i=1:length(zeros)
                if imag(zeros(i)) > 0 % this is a complex zero that was already cared for
                    continue % skip this zero
                end
                for j=1:2
                    if imag(zeros(i))==0
                        correction = zpk(zeros(i)+varzeros(i,j), zeros(i), 1,...
                            Ts, 'Variable', variable);
                    else
                        correction = zpk([zeros(i)+varzeros(i,j)...
                                conj(zeros(i))+conj(varzeros(i,j))],...
                            [zeros(i) conj(zeros(i))], 1, Ts, 'Variable', variable);
                    end
                    out2 = [out2,...
                            step(handles.open_loop * correction, t)];
                end
            end
            % pole variations
            for i=1:length(poles)
                if imag(poles(i)) > 0 % this is a complex zero that was already cared for
                    continue % skip this zero
                end
                for j=1:2
                    if imag(poles(i))==0
                        correction = zpk(poles(i)+varpoles(i,j), poles(i), 1,...
                            Ts, 'Variable', variable);
                    else
                        correction = zpk([poles(i)+varpoles(i,j)...
                                conj(poles(i))+conj(varpoles(i,j))],...
                            [poles(i) conj(poles(i))], 1, Ts, 'Variable', variable);
                    end
                    out2 = [out2,...
                            step(handles.open_loop * correction, t)];
                end
            end
            % plot
            axes(handles.plot)
            plot(t, out2, 'm-', t, out, 'b-')
            grid
            xlabel('Time (s)')
            ylabel('Step response')
        case 6 % pole and zero placement
            [zeros_open_loop, poles_open_loop] = zpkdata(handles.open_loop, 'v');
            % zero variations
            zeros2 = [];
            for i=1:length(zeros)
                if imag(zeros(i))>0
                    zeros2 = [zeros2; zeros(i)+varzeros(i-1,1);...
                            zeros(i)+varzeros(i-1,2)];
                else
                    zeros2 = [zeros2; zeros(i)+varzeros(i,1);...
                            zeros(i)+varzeros(i,2)];
                end
            end
            % pole variations
            poles2 = [];
            for i=1:length(poles)
                if imag(poles(i))>0
                    poles2 = [poles2; poles(i)+conj(varpoles(i-1,1));...
                            poles(i)+conj(varpoles(i-1,2))];
                else
                    poles2 = [poles2; poles(i)+varpoles(i,1);...
                            poles(i)+varpoles(i,2)];
                end
            end
            % plot
            axes(handles.plot)
            plot(real(zeros2), imag(zeros2), 'om',...
                real(poles2), imag(poles2), 'xg',...
                real(zeros_open_loop), imag(zeros_open_loop), 'ob',...
                real(poles_open_loop), imag(poles_open_loop), 'xr')
            if handles.open_loop.Ts == 0
                grid
            else
                zgrid
            end
            xlabel('Real')
            ylabel('Imaginary')
    end
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -