给定通过FFT获得的频率响应,我想应用1 / n倍频程平滑。我应该使用什么过滤器以及如何使用?也许有人可以指出一个很好的参考(有关该主题的论文或书籍)。

评论

您是否正在寻找一个使频率$ f $衰减到幅度$ 1 / f $的变粉红色滤波器?还是您真的想要将频率$ f $衰减为幅度$ 1 /(\ lg_2 f)$的东西?

我不想衰减任何频率。我希望使用可变带宽(即1个八度,1/3个八度等)对数据进行平滑处理。

扬声器的频率响应通常经过平滑处理,以使图形更易于解释,但仍非常准确(1/20倍频程平滑),或者在市场营销中具有很高的平滑度(1/3倍频程)。这是我读过无数次的内容,这就是我要在这里找到的确切含义。

因此,您的问题不是关于改变信号本身,而是关于如何以图形方式显示设备的频率响应。是吗?

我认为本文包含有价值的信息。但是,不幸的是,它不是免费的。此方法中也描述了基本方法。

#1 楼

通常,“平滑”是指“将当前值平均替换为相邻值”。最常见的是能量平滑,其中平滑会导致整个平滑间隔内的能量平均值,并且相位信息会丢失。也可以完成复杂的平滑处理,但是由于相位包裹,这是一项棘手的事情。

能量平滑可以表示为
$$ Y(k)= \ sqrt {\ frac {1} { N} \ cdot \ sum_ {i = 0} ^ {N-1} X(i)\ cdot X ^ {*}(i)\ cdot W_ {k}(i)} $$

其中$ W_ {k}(i)$是一些合适的窗口函数。例如,在第三倍频程平滑的情况下,这可以推导为第三倍频程带通滤波器在频率k附近的传递函数的大小平方。这也意味着,对于1024点FFT,您需要设计1024个不同的带通滤波器,这是相当多的工作。

如果平滑滤波器的确切形状是灵活。矩形平滑可以通过
$$ Y(k)= \ sqrt {\ frac {1} {b-a + 1} \ cdot \ sum_ {i = a} ^ {b} X(i)\ cdot X ^ {**(i)} $$

其中
$$ a = round(k * 2 ^ {-\ frac {1} {2 \ cdot n}}) ,b = round(k * 2 ^ {\ frac {1} {2 \ cdot n}})$$

只是$ n ^ {th} $八度音阶的带边索引平滑。

就复杂性而言,在任意窗口和矩形窗口之间还有其他几种方法。

评论


$ \ begingroup $
我正在尝试用C代码实现这一点,恐怕我会在这种表示法中有些失落。我很难理解例如我从a到b的总和是如何工作的?任何帮助表示赞赏。
$ \ endgroup $
–安德鲁·史密斯(Andrew Smith)
2013年12月16日14:39

$ \ begingroup $
两个大拇指,可惜只有一票。这个额外的问题询问如何完成1 / n复杂的平滑处理,包括围绕相位包裹的棘手业务。
$ \ endgroup $
– SpeedCoder5
2014年6月1日18:07