Java 音频处理-Num分块&;前向傅里叶变换?

Java 音频处理-Num分块&;前向傅里叶变换?,java,audio,fft,processing,Java,Audio,Fft,Processing,我很难理解老师教给我的一个概念,同学之间的答案也很不一致。我想知道是否有人可以帮助澄清这个想法或概念 在音频处理中称为num分块我们只需要处理WAV文件。因此我们假设音频数据未压缩 numChunking与音频正弦波上的傅里叶变换有关 为了确定裸体犬的数量,我们做了如下的事情 方法1: int numChunks = totalNumOfSamples/chunkSize 但与我交谈过的其他人也很少说 方法2: int numChunks = totalNumOfSamples/binSize

我很难理解老师教给我的一个概念,同学之间的答案也很不一致。我想知道是否有人可以帮助澄清这个想法或概念

在音频处理中称为num分块我们只需要处理WAV文件。因此我们假设音频数据未压缩

numChunking与音频正弦波上的傅里叶变换有关

为了确定裸体犬的数量,我们做了如下的事情

方法1:

int numChunks = totalNumOfSamples/chunkSize
但与我交谈过的其他人也很少说

方法2:

int numChunks = totalNumOfSamples/binSize
区别在于chunkSize只是一些指定的或硬编码的数字,比如1024或2000之类的数字binSize另一方面是我们对样本应用傅里叶变换后绘制的频率数。我们通常会在屏幕上显示50-100个箱子(面板上的条形图/频率条形图),这将花费很长时间

在方法1中,我们从例如47988个样本/2000=23个Numchunk中获得了大量Numchunk。然后我们将这些块发送到for循环中,并将每个声音数据样本添加到每个块中,因此,如果我们将所有23个NumChunk放在一起,我们几乎拥有了整个声音数据,但由于无法容纳分区中的每个样本,因此精度有所下降。然后我们将它们添加到一个数组或数组列表中,稍后发送到离散傅里叶变换(前向傅里叶函数)我们得到我们的结果,把它们放在我们的箱子里,然后把结果画成条状

我不确定的最后一个细节是,傅里叶变换是除以整个声音中的总采样数,还是除以一个numChunk中的总采样数

在方法2中,该方法的工作方式是numChunks=总样本数/bin大小。例如,我们将使用相同的示例。47988/30箱=1599个纽卡在这个想法中,我的同学向我解释说numChunks是许多子阵列。所以我制作了一个2D数组,1599个数组,每个数组的长度为一个二进制大小,所以当我们通过前向傅里叶变换处理每个子数组时,我们得到我们得到的振幅值或频率,然后我们通过前向傅里叶将每个子数组的值除以整个声音的总样本大小

这两种观点的结果都不一样。方法1得出的第一个值约为37.5,方法2得出的值为3689。它们下面的值看起来都是正确的,所以我不确定哪种方法是正确的,或者是否有正确的方法

这是用Java编写的


这个问题很让人困惑,你可以看出我自己也很困惑。我希望有人能帮我弄清楚哪个是对的,哪个是错的,或者解释一下这个概念。

哇,你有点困惑了。我会尽力帮你解释一下

使用DFT(离散傅里叶变换)所做的是获取大量样本N,并将它们从时域转换为频域。在频域中得到的阵列大小与在时域中放入的阵列大小相同。因此,您可以根据输出阵列中所需的频率分辨率,将numChunks设置为任意值,因为频率分辨率将为sampleRate/numChunks。所以,如果你想,比如说输出80个频率值,就使用80的块大小。将您的声音文件划分为totalNumSamples/80块,您将依次获得每个块的频率内容

为了回答你的另一个问题,整个声音中的总采样数并不重要——你做的每一个DFT都是完全独立的,所以重要的是你放入每个DFT中的采样数


我希望这能有所帮助。

哇,你有点困惑。我会尽力帮你解释一下

使用DFT(离散傅里叶变换)所做的是获取大量样本N,并将它们从时域转换为频域。在频域中得到的阵列大小与在时域中放入的阵列大小相同。因此,您可以根据输出阵列中所需的频率分辨率,将numChunks设置为任意值,因为频率分辨率将为sampleRate/numChunks。所以,如果你想,比如说输出80个频率值,就使用80的块大小。将您的声音文件划分为totalNumSamples/80块,您将依次获得每个块的频率内容

为了回答你的另一个问题,整个声音中的总采样数并不重要——你做的每一个DFT都是完全独立的,所以重要的是你放入每个DFT中的采样数


我希望这能有所帮助。

请注意,80个大小为80 DFT的箱子实际上只代表40个不同的频率。还要注意的是,通常的做法是将连续DFT重叠在chunksize my#bins上?是的,进行DFT的样本数将与箱子数相同。这些存储箱将以fs/chunksize Hz从0到fs等间距排列。请注意,大小为80的DFT的80个存储箱实际上仅代表40个不同的频率。此外,请注意,重叠连续DFT是一种常见做法。chunksize my#存储箱?是的,您进行DFT的样本数将与您的存储箱数相同。垃圾箱将以fs/chunksize Hz从0到fs等距排列。