【问题标题】:Designing a simple bandpass/bandstop filter in Matlab在 Matlab 中设计一个简单的带通/带阻滤波器
【发布时间】:2011-10-10 09:30:40
【问题描述】:

对于家庭作业,我必须在 Matlab 中设计一个简单的带通滤波器,以滤除 250Hz 到 1000Hz 之间的所有频率。到目前为止我做了什么: - 使用“enframe”函数创建半重叠窗口,每个窗口有 512 个样本。在窗户上,我应用了 hann 窗函数。 - 在每个窗口上我应用一个 fft。之后我用函数 ifft 重构了原始信号,一切顺利。

但问题是我必须如何解释 fft 函数的结果以及如何过滤掉一个频带。

【问题讨论】:

标签: matlab signal-processing fft


【解决方案1】:

除非我弄错了,否则听起来您对此采取了错误的方法。

如果您的任务是专门通过操纵其 FFT 来操纵信号,那么请忽略我。否则......请继续阅读。

FFT 通常用于分析频域中的信号。如果您开始摆弄 FFT 返回的复杂系数,那么您将陷入复杂的数学情况。尤其如此,因为您的截止频率不会很好地位于 FFT bin 频率上。另外,请记住,FFT 并不是您正在分析的信号的完美变换。由于scalloping error,它总是会引入自己的人工制品,并与您的 hann 窗口进行卷积。

所以.. 让我们将 FFT 留待分析,然后构建一个过滤器。

如果您在课堂上进行带通设计,我假设您了解他们的工作。 Matlab 中有许多函数可以为不同类型的滤波器生成系数,即butterkaisercheby1。在 Matlab 中查找他们的帮助页面以获取更多信息。您插入这些函数的值将取决于您的滤波器规格,即您想要“X”dB 滚降和“Y”dB 通带纹波。您需要了解这些过滤器的工作原理,并了解它们的传递函数,以了解它们的过滤器顺序如何与您的规范相关。

获得系数后,只需通过filter 函数运行它们即可(再次强调。如果您不确定它是如何工作的,请查看帮助页面)。

强大的 JOS 有一个很棒的带通滤波器设计演练here

另一个小问题.. 在您的问题中,您提到您希望您的过滤器“过滤掉”250Hz 到 1000Hz 之间的所有内容。这有点模棱两可。如果您正在设计带通滤波器,您可能希望“通过”250Hz 到 1000Hz 之间的所有内容。如果您确实实际上想要“过滤掉”此范围内的所有内容,则需要使用带阻过滤器。

【讨论】:

    【解决方案2】:

    这完全取决于您使用的采样率。 如果您根据Nyquist-Shannon sampling theorem 正确采样,那么您可以尝试使用DFT 的定义来解释您的fft 示例。

    要了解哪些频率对应于 dft 结果中的哪些样本,我认为最好查看inverse transformation。您将系数 k 与

    相乘
     exp(i*2*pi*k/N*n)
    

    可以解释为与Euler's Formula 的余弦。所以每个系数都乘以某个频率的正弦。

    祝你好运;)

    【讨论】:

    • 根据奈奎斯特定理,wav 文件的采样率为 16000Hz。问题是我不完全理解 DFT 的定义
    猜你喜欢
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 2013-03-27
    相关资源
    最近更新 更多