在bodeplot

时间:2016-07-25 06:28:25

标签: matlab plot markers

我目前正在设计一个5阶Butterworth滤波器,并在Matlab中查看其传递函数响应。我已成功计算出它并绘制了这样的波特响应:

% Butterworth Fifth Order Low Pass
figure(1)
h = bodeplot(FinalTF);
setoptions(h,'FreqUnits','Hz','PhaseVisible','off');
title('Butterworth LowPass Fifth Order');
grid on;

其中FinalTF是我正在谈论的传递函数。我想要的是在这个图中的特定点上添加标记(具体我想突出显示频率fp,fo,fs,你不需要知道它们是什么,它们只是x轴上的3个不同点,以及代码处的每个频率的dB。我知道如何通过点击图表来做到这一点,但这将耗费太多时间,因为我有很多情节要经历。我目前遇到两个基本问题:

1)我不知道如何通过使用TF对象获得每个频率的特定dB。我尝试使用函数evalfr(),但是它返回的值似乎有点偏。

2)忽略前一点,即使我手工计算,我也不能使用this method将它们添加到地块上,我不知道是什么问题是。也许是因为我使用的是bodeplot而不是常规情节?我不知道怎么办。

我正在使用Matlab 2015,如果它有任何区别。

任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:1)

我实际上找到了一个解决方案。以下是一些示例代码来说明结果。在我做之前:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
          http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">


    <jee:jndi-lookup id="myConnectionFactory" jndi-name="jms/connectionFactory"/>

    <route id="test" xmlns="http://camel.apache.org/schema/spring">
        <from uri="jms:TestJMSQueue"/>
        <to uri="file:/Users/...."/>
    </route>


    <bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
        <property name="connectionFactory" ref="myConnectionFactory"/>
        <!-- more configuration required based on your requirements -->
    </bean>

    <!--
    example uses  invm amq broker:

    <bean id="anothercnf" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="vm://mybroker"/>
    </bean>
    -->
</beans>

它只打印了传递函数的波特率图。现在我设法将标记添加到我想要的特定频率:

figure(3);
h = bodeplot(FinalTF);
setoptions(h,'FreqUnits','Hz','PhaseVisible','off');
grid on;
title('Chebyshev 2nd Order Band Pass');

效果很好!感谢@Erik的帮助。

答案 1 :(得分:0)

您可以使用[mag,~,wout] = bode(sys)然后使用plot(wout,mag)来创建波德图。然后,使用hold onplot(...),您可以添加绘图所需的任何点。

请注意,wout以每TimeUnit个弧度为单位,这是syssource)的属性。要将wout转换为赫兹频率轴,您可以使用TimeUnitsys中设置sys.TimeUnit = 'seconds'(这是默认值,因此可能不需要),然后f = wout/2/pi; }。使用plot(f,mag),然后hold on绘制它并绘制标记。

要计算某些频率的幅度,请使用mag = bode(sys,w);其中w是每sys.TimeUnit个弧度的频率。如果sys.TimeUnit'seconds'且频率为赫兹,请使用w = 2*pi*f,其中f是您需要的频率。