问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

RC高通滤波器Bode图分析:传递函数与零极点详解

创作时间:
作者:
@小白创作中心

RC高通滤波器Bode图分析:传递函数与零极点详解

引用
CSDN
1.
https://blog.csdn.net/weixin_44634860/article/details/143469275

RC高通滤波器是一种常见的电子滤波器,广泛应用于信号处理领域。本文将详细介绍RC高通滤波器的Bode图分析,包括传递函数、零极点、截止频率等关键概念,并通过MATLAB代码展示具体的计算和绘图过程。

RC高通滤波器

我们设定电阻R为1K欧姆,电容C为1微法。

传递函数

传递函数是描述系统输入输出关系的重要工具。对于RC高通滤波器,其传递函数可以表示为:

$$
H(s) = \frac{u_o}{u_i} = \frac{R}{X_C + R} = \frac{R}{\frac{1}{sC} + R} = \frac{sRC}{1 + sRC}
$$

其中,$s = j\omega$。

进一步整理可得:

$$
H = \frac{(\omega RC)^2 + j\omega RC}{1 + (\omega RC)^2}
$$

由上式可得出传递函数的实部和虚部:

$$
\begin{matrix}
real = \frac{(\omega RC)^2}{1 + (\omega RC)^2} \
image = \frac{\omega RC}{1 + (\omega RC)^2}
\end{matrix}
$$

进一步求出幅值和相位表达式:

$$
\begin{matrix}
幅值 = \sqrt{real^2 + image^2} = \sqrt{\frac{(\omega RC)^2}{1 + (\omega RC)^2}} \
相位 = arctan\left(\frac{image}{real}\right) = arctan\left(\frac{1}{\omega RC}\right) \
(其中 \omega = 2\pi f)
\end{matrix}
$$

截止频率

截止频率是滤波器的重要参数,表示信号幅度衰减到原值的$\frac{1}{\sqrt{2}}$(约-3dB)时的频率。对于RC高通滤波器,截止频率计算公式为:

$$
f_r = \frac{1}{2\pi RC}
$$

零点与极点

零点和极点是传递函数的重要特征,它们决定了系统的频率响应特性。

零点

令传递函数的分子为0可求出零点:

$$
s = 0
$$

极点

令传递函数的分母为0可求出极点:

$$
s = -\frac{1}{RC}
$$

Bode图绘制与分析

Bode图是描述系统频率响应的重要工具,包括幅频特性和相频特性两部分。下面使用MATLAB绘制RC高通滤波器的Bode图。

MATLAB代码

R = 1000;
C = 1 * 10^(-6);
H = tf([(R*C) 0], [(R*C) 1]);

% 获取零极点
z = zero(H);
p = pole(H);

opts = bodeoptions;
opts.FreqUnits = 'Hz'; % 设置频率单位为Hz
bode(H, opts);
grid on

% 获取当前坐标轴
h = findobj(gcf, 'Type', 'axes');

% 设置增益图的横纵坐标显示值
set(h(1), 'XScale', 'log'); % 设置横坐标为对数刻度
set(h(1), 'XLim', [0, 1000000]);
set(h(1), 'XTick', [0, 1, 10, 100, 1000, 10000, 100000, 1000000]); % 设置横坐标刻度
set(h(1), 'YLim', [-40, 0]); % 设置纵坐标范围
set(h(1), 'YTick', [-40, -30, -20, -10, 0]); % 设置纵坐标刻度

% 设置相位图的横纵坐标显示值
set(h(2), 'XScale', 'log'); % 设置横坐标为对数刻度
set(h(1), 'XLim', [1, 1000000]);
set(h(2), 'XTick', [0, 1, 10, 100, 1000, 10000, 100000, 1000000]); % 设置横坐标刻度
%set(h(2), 'YLim', [0, 90]); % 设置纵坐标范围
set(h(2), 'YTick', [0, 15, 30, 45, 60, 75, 90]); % 设置纵坐标刻度

% 计算截止频率
cutoff_freq = 1 / (2 * pi * R * C); % 截止频率(Hz)

% 在增益图上标示零点和极点
for i = 1:length(h)
    if i == 1 % 增益图
        % 标示零点
        for j = 1:length(z)
            if ~isinf(z(j)) % 排除无穷大
                hold on;
                % 将零点从弧度转换为赫兹
                freq_hz = real(z(j)) / (2 * pi);
                plot([freq_hz, freq_hz], [-90, 90], 'r--'); % 画虚线
                text(freq_hz, 90, sprintf('Zero: %.2f Hz', freq_hz), 'Color', 'r'); % 添加文本标注
            end
        end
        % 标示极点
        for j = 1:length(p)
            if ~isinf(p(j)) % 排除无穷大
                hold on;
                % 计算频率
                freq_hz = (p(j)) / (2 * pi); % 使用虚部计算频率
                % 处理负频率
                if freq_hz < 0
                    freq_hz_positive = -freq_hz; % 转换为正频率
                else
                    freq_hz_positive = freq_hz; % 保持正频率
                end
                % 标示正频率
                plot([freq_hz_positive, freq_hz_positive], [-100, 10], 'g--'); % 画虚线
                text(freq_hz_positive, 80, sprintf('Pole: %.2f Hz', freq_hz_positive), 'Color', 'g'); % 添加文本标注
            end
        end
    elseif i == 2 % 相位图
        % 标示零点
        for j = 1:length(z)
            if ~isinf(z(j)) % 排除无穷大
                hold on;
                % 将零点从弧度转换为赫兹
                freq_hz = real(z(j)) / (2 * pi);
                plot([freq_hz, freq_hz], [-90, 90], 'r--'); % 画虚线
                text(freq_hz, 90, sprintf('Zero: %.2f Hz', freq_hz), 'Color', 'r'); % 添加文本标注
            end
        end
        % 标示极点
        for j = 1:length(p)
            if ~isinf(p(j)) % 排除无穷大
                hold on;
                % 计算频率
                freq_hz = (p(j)) / (2 * pi); % 使用虚部计算频率
                % 处理负频率
                if freq_hz < 0
                    freq_hz_positive = -freq_hz; % 转换为正频率
                else
                    freq_hz_positive = freq_hz; % 保持正频率
                end
                % 标示正频率
                plot([freq_hz_positive, freq_hz_positive], [-100, 10], 'g--'); % 画虚线
                text(freq_hz_positive, -80, sprintf('Pole: %.2f Hz', freq_hz_positive), 'Color', 'g'); % 添加文本标注
            end
        end
        % 标示截止频率
        hold on;
        plot([cutoff_freq, cutoff_freq], [-90, 90], ':'); % 画截止频率虚线
        text(cutoff_freq, 70, sprintf('Cutoff: %.2f Hz', cutoff_freq), 'Color', 'b');
    end
end

Bode图分析

  1. 截止频率处:在$f = f_r \approx 159.15Hz$处,对应的幅值和相位计算如下:

$$
\begin{matrix}
幅值 = \sqrt{\frac{(2\pi f_r RC)^2}{1 + (2\pi f_r RC)^2}} = \frac{\sqrt{2}}{2}(即 -3dB) \
相位 = arctan\left(\frac{1}{2\pi f_r RC}\right) = arctan(1) = 45°
\end{matrix}
$$

  1. 截止频率左侧:当$f << f_r$时,对应的幅值和相位计算如下:

$$
\begin{matrix}
幅值 = \sqrt{\frac{(2\pi fRC)^2}{1 + (2\pi fRC)^2}} \
(随着频率减小幅值减小,斜率为20dB/10dec,即频率每减小10倍,幅值衰减20dB) \
相位 = arctan\left(\frac{1}{2\pi fRC}\right) = arctan(∞) = 90°
\end{matrix}
$$

  1. 截止频率右侧:当$f >> f_r$时,对应的幅值和相位计算如下:

$$
\begin{matrix}
幅值 = \sqrt{\frac{(2\pi fRC)^2}{1 + (2\pi fRC)^2}} \approx 1(即0dB) \
相位 = arctan\left(\frac{1}{2\pi fRC}\right) = arctan\left(\frac{1}{∞}\right) = 0°
\end{matrix}
$$

  1. 极点与零点的影响
  • 每增加一个极点,可以使得Bode图的幅值变化-20dB/dec,相位变化-90°;
  • 每增加一个零点,可以使得Bode图的幅值变化20dB/dec,相位变化90°;
  • 对于RC高通滤波器来说,其极点对应的频率与截止频率数值上相等,Bode图上也可以看出,均为159.19Hz;

通过本文的介绍,读者可以深入了解RC高通滤波器的Bode图分析方法,掌握传递函数、零极点、截止频率等关键概念,并能够使用MATLAB进行实际计算和绘图。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号