在Matlab中设计一个简单的带通/带阻滤波器

时间:2011-10-10 09:30:40

标签: matlab signal-processing fft

对于家庭作业,我必须在Matlab中设计一个简单的带通滤波器,滤除250Hz和1000Hz之间的所有内容。到目前为止我做了什么: - 使用'enframe'功能创建半重叠窗口,每个窗口有512个样本。在窗口我应用hann窗口功能。 - 在每个窗口我都应用了一个fft。在此之后,我用功能ifft重建原始信号,一切顺利。

但问题是我如何解释fft函数的结果以及如何滤除频带。

2 个答案:

答案 0 :(得分:3)

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

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

FFT通常用于分析频域中的信号。如果你开始摆弄FFT返回的复系数,那么你就会陷入一个复杂的数学情境。特别是这种情况,因为您的截止频率不会很好地依赖于FFT bin频率。另外,请记住,FFT并不是您正在分析的信号的完美变换。由于scalloping error,它将始终引入自己的人工制品,并与你的hann窗口卷积。

所以..让我们离开FFT进行分析,并构建一个过滤器。

如果你在班上做带通设计,我会假设你明白他们做了什么。 Matlab中有许多函数可以生成不同类型滤波器的系数,即butterkaiser cheby1。在Matlab中查找他们的帮助页面以获取更多信息。插入这些功能的值取决于您的滤波器规格,即您需要“X”dB滚降和“Y”dB通带纹波。您需要了解这些过滤器的工作原理,并了解其传递函数,以了解其过滤器顺序与您的规范之间的关系。

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

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

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

答案 1 :(得分:1)

这一切都取决于您使用的采样率。 如果您根据Nyquist-Shannon sampling theorem进行采样,那么您可以尝试使用DFT的定义来解释fft的样本。

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

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

可以解释为Euler's Formula的余弦。因此,每个系数乘以某个频率的正弦值。

祝你好运;)

相关问题