【问题标题】:kiss_fftr followed by kiss_fftri (with very large window size) does not return the input signalKiss_fftr 后跟 Kiss_fftri(具有非常大的窗口大小)不返回输入信号
【发布时间】:2019-01-14 01:17:15
【问题描述】:

我正在较短的音频剪辑(44100 * 14 个样本)和较长的音频剪辑(44100 * 60 * 6 个样本)之间执行互相关。据我了解,因此我无法打开 FFT。在测试kiss_fftr 和kiss_fftri 时,我发现逆运算返回的噪声很大(但在节奏上仍与输入相似)。我已经确认我的输入音频是正确的,并且损坏仅发生在此函数中:

static std::vector<std::vector<float>> do_fft(std::vector<std::vector<float>> song, std::vector<std::vector<float>> loop)
{
    loop[0].resize(kiss_fftr_next_fast_size_real(loop[0].size())); // TODO: resize this to song size instead of loop size when done testing
    loop[1].resize(loop[0].size()); // TODO: make this dynamic

    std::vector<std::vector<kiss_fft_cpx>> fft_loop;
    std::vector<std::vector<float>> output;

    for (int chan = 0; chan < loop.size(); chan++)
    {
        fft_loop.push_back(std::vector<kiss_fft_cpx>());
        fft_loop[chan].resize(loop[chan].size());

        output.push_back(std::vector<float>());
        output[chan].resize(loop[chan].size()); // TODO: resize this to song size instead of loop size when done testing
    }

    kiss_fftr_cfg cfg_loop = kiss_fftr_alloc(loop[0].size(), 0, NULL, NULL);
    kiss_fftr(cfg_loop, &loop[0][0], &fft_loop[0][0]);
    kiss_fft_free(cfg_loop);

    kiss_fftr_cfg cfgi_loop = kiss_fftr_alloc(fft_loop[0].size(), 1, NULL, NULL);
    kiss_fftri(cfgi_loop, &fft_loop[0][0], &output[0][0]);
    kiss_fft_free(cfgi_loop);

    return output;
}

与输入相比,输出如下所示: 放大显示细节:

如果您想知道内存,该程序是 64 位的,并且只使用几 GB 的内存(只是几个 gig,没什么大不了的:P)

【问题讨论】:

  • 输入中的“静音”位似乎被放大了。似乎是一个缩放问题。这在 Kissfft 自述文件中有所说明,不方便地取决于 Kissfft 中使用的值类型。

标签: c++ signal-processing kissfft


【解决方案1】:

不同的 FFT 库使用不同的缩放因子,和/或在其 FFT 和 IFFT 实现之间以不同的方式分配缩放因子。

kiss_fft 要求您在 fft/ifft 对期间或之间缩小 fft 的长度,以返回(大约在数值或舍入误差内)原始时域输入向量。

在您的情况下,这是一个相当大的比例因子,因为您的数据长度很大。

【讨论】:

  • 谢谢!我不敢相信我没有注意到输出仅在过零期间出现。
  • 嗨罗纳德!我想在另一个问题(再次)中挑选你的大脑。这是一个与 kissfft 相关的问题。你介意看看吗? Here is the link.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 2021-09-11
  • 2015-05-26
  • 1970-01-01
  • 2019-02-19
  • 2021-03-15
  • 1970-01-01
相关资源
最近更新 更多