我是一名软件工程师,自学 DSP。我在研究生教科书中遇到了这个问题,不知道如何继续。
Determine the frequency response for the filter:
H(z) = 1.5 / (1 + 3z^-1)
显然,这是一个 z 域传递函数。如何获得频率响应?我正在考虑将其转换为时域差分方程,计算大约 128 个点,通过 MATLAB 的 FFT 运行它,绘制它,瞧,最终的曲线就是答案。这是一个正确的方法吗?有更多的分析/数学答案吗?
我是一名软件工程师,自学 DSP。我在研究生教科书中遇到了这个问题,不知道如何继续。
Determine the frequency response for the filter:
H(z) = 1.5 / (1 + 3z^-1)
显然,这是一个 z 域传递函数。如何获得频率响应?我正在考虑将其转换为时域差分方程,计算大约 128 个点,通过 MATLAB 的 FFT 运行它,绘制它,瞧,最终的曲线就是答案。这是一个正确的方法吗?有更多的分析/数学答案吗?
解析的方法是替换变量经过得到频率响应(和) - 也就是说,频率响应是在单位圆上计算的变换。
请注意,matlab 有一个内置函数,用于直接根据滤波器系数 ( freqz
) 绘制频率响应,可以查看其源代码。看一看!该实现甚至不涉及求解差分方程或过滤脉冲 - 您可以简单地将分子序列的 FFT 除以分母序列的 FFT - 填充到所需的频点数。
首先,您的传递函数在,这意味着您的过滤器不稳定,如果您使用它进行任何处理,您可能会看到输出变为无穷大。
但是,一般来说,您可以使用差分方程处理脉冲并对生成的脉冲响应进行 FFT(或频率)。这应该给出与传递函数的 freqz 相同的结果(如果您的滤波器不稳定)。
您还可以处理任意输入并通过取输出频率响应与输入频率响应的比率来确定滤波器的频率响应。如果您通过 FFT 执行此操作,则取决于您的过滤器选择窗口函数可能很重要。如果您得到奇怪的结果,请尝试使用三角形或 parzen 窗口(它们的泄漏比其他常见窗口少)。
编辑:也许,首先,使用不稳定滤波器的想法是防止使用您的方法(过滤一些样本)来计算频率响应。虽然,滤波器不稳定,但它提供了一个非常精细的频率响应,不会“爆炸”,因为如果您使用 freqz 或如果您进行分析,极点实际上并不直接位于单位圆上或附近。例如
, 在哪里和
你不能从这个表达式中真正看出底层过滤器是不稳定的。但是假设你“喜欢”这个传递函数的频率响应,那么是否有可能找到另一个具有完全相同频率响应(幅度响应)但在单位圆内具有极点的传递函数?