audio - 使用不同的 FFT 方法时,我的音频中出现奇怪的嘶嘶声/伪影
问题描述
我正在使用 fft (FFTW) 进行滤波器卷积。我经历了一些我无法理解的事情。我有一个输入 x(n),我想应用一个滤波器 IR u(n)。长度均为 N。因此我将两者都归零,例如到 2n 并对两者进行 FFT 以获得 X(n) 和 U(n)。如果我只做 X(n)*U(n) 和 IFFT,我会得到一个信号 y(t)。如果我听信号没有嘶嘶声,一切听起来都很好。为了加快程序速度和节省内存,我尝试利用 U(n) 和 X(n) 的对称性,并仅使用 U(n) 和 X(n) 的前半部分并在后半部分填充零。所以我做了 X(n0...n/2,0,0,0,0,..,N) U(n0,..,n/2,0,0,0,..,N) 和 IFFT . 结果输出听起来与乘以全长 X 时的结果没有什么不同U,但输出端有奇怪的细微嘶嘶声。Mostley 在响亮/共振的输入信号部分很明显,听起来几乎就像在剪辑舞台。我没有改变这两种方法的缩放比例,所以我不明白发生了什么。有人可以帮我出个主意吗?
只使用 U 和 X 的一半并用零填充其余部分是错误的,我必须使用全长吗?或者这是否会改变,例如缩放?
解决方案
您不能简单地将部分信号频谱设置为零。任何实信号(没有虚部)都具有共轭复频谱。我想这就是你所说的对称性。如果您将频谱的一部分设置为零,则时域中的信号将很复杂,并且与您开始使用的原始信号完全不同。
如果您想加快计算速度,请减少您正在使用的样本数量
推荐阅读
- c# - 是否可以将两个数组作为单个命令相乘以提高代码性能?
- javascript - 为什么按照示例教程解析错误意外令牌<出现在PHP Javascript的以下代码行中?
- c++ - 从 std::tuple 中提取类型以获得方法签名
- sql - 如何在动态查询中两次使用临时表?
- azure-data-factory-2 - ADF 创建管道运行 - 参数
- c++ - 如果从 cmd.exe 运行但不能从 Qt Creator 中运行,则基于 Qt 的 C++ 项目可以工作
- visual-studio-code - 如何在 VS Code 中不使用高对比度设置选择前景色?
- amazon-cloudformation - 调用 UpdateStack 操作时发生错误 (ValidationError):无效的模板属性或属性 [WebAppGroup, WebAppLaunchConfig]
- sql - 将生产表中的前 1000 行复制到本地计算机 SQL Server
- kubernetes - 如何让 kubectl 识别新扩展的 az aks nodepool 节点?