我目前正在设计一个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,如果它有任何区别。
任何帮助将不胜感激。提前谢谢。
答案 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 on
和plot(...)
,您可以添加绘图所需的任何点。
请注意,wout
以每TimeUnit
个弧度为单位,这是sys
(source)的属性。要将wout
转换为赫兹频率轴,您可以使用TimeUnit
在sys
中设置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
是您需要的频率。