Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Audio STFT的赫兹计算_Audio_Fft_Dft - Fatal编程技术网

Audio STFT的赫兹计算

Audio STFT的赫兹计算,audio,fft,dft,Audio,Fft,Dft,这个问题主要与这个答案有关:如果@Paul R有机会看一下,这将是一个理想的选择 我有一个信号,我计算了一个STFT。NFFT的大小为256,重叠部分为128。这产生了21个包含输出的独立块 因此,我想把它转换成赫兹,看看信号中每个点的不同赫兹是什么。我使用以下公式计算了震级: sqrt(output[i][j].re * output[i][j].re + output[i][j].im * output[i][j].im) 这将产生以下结果: freq = 7 * 44100 / 4

这个问题主要与这个答案有关:如果@Paul R有机会看一下,这将是一个理想的选择

我有一个信号,我计算了一个STFT。NFFT的大小为256,重叠部分为128。这产生了21个包含输出的独立块

因此,我想把它转换成赫兹,看看信号中每个点的不同赫兹是什么。我使用以下公式计算了震级:

sqrt(output[i][j].re * output[i][j].re + output[i][j].im * output[i][j].im)
这将产生以下结果:

freq = 7 * 44100 / 4

我主要对下一部分的工作方式感到困惑。例如,我基本上有一个2D向量,其中包含来自STFT的所有块(每个块的大小为256)。因此,我是否计算块内每个点的幅值,计算最大的幅值数,然后使用公式
freq=I_max*Fs/N

如果是这样的话,它会像下面这样(一个示例,而不是实际数据):

然后,这将为每个STFT输出生成量级向量。从那里,我可以计算出哪个是最高的(比如说7),然后我可以计算以下各项:

freq = 7 * 44100 / 4
其中44100=采样率,4=STFT块的大小

这将给出每个块的频率


这是正确的,还是我完全忽略了这一点?

您混淆了一些东西,您的输出图像似乎是所有21个块(FFT)加在一起的21*256=5376点,这真的毫无帮助

您需要使用以下方法找到每个块的基频(NFFT=256):

对于您的情况:

freq = MaxMagnitudeFromThisBlockFFT * 44100 / 256
最后,您将发现21个频率,每个块对应一个FFT

附言:


您的NFFT是256,采样率是44100,那么您的频率分辨率是44100/256=17226625,如果您想要更精确,请尝试NFFT=2048或4096。

您好,问题是。对于STFT,我将使用光谱图,它似乎已经找到了震级
10*log10(sqrt(re*re+im*im)
那么我只需要计算这些箱子的最大数量,然后计算htz吗?例如,这里可以使用光谱图的结果吗/I我从不使用光谱图来计算它,我总是使用磁势方程sqrt(re+imimm)这是正确的方法,现在你所需要的就是从上半年的结果中获得最大值(索引)…感谢这项工作!!只是不使用光谱图计算吗?明白了:)!我最有可能看到htz在区块中发生变化吗?也就是说,如果一个块比另一个块低,我假设频率会增加,反之亦然?很好,每个块与你的频率是增加还是减少没有关系,只是取决于你的输入信号,所以这种方法不适合显示频率随时间的变化?
freq = MaxMagnitudeFromThisBlockFFT * 44100 / 256