我正在寻找接收信号频率的方法。
让我们一起创建一个示例
signal = [numpy.sin(numpy.pi * x / 2) for x in range(1000)]
这个数组将代表录制的声音的样本。(x=毫秒)
sin(pi*x/2)=>;250 Hrz
现在我们不知道函数是什么样子。我们刚收到信号(点列表)。我们如何从这个阵列接收频率?你知道吗
重要提示:
我读过很多Stackoverflow的帖子,也看过很多youtube的视频。我还没有找到答案。请用简单的词。
(我感谢你的每一个回答)
Tags:
似乎你想要的是来自wiki的信号的Fourier Transform:
这本质上是一个数学运算,当应用在一个信号上时,它会让你知道每个频率在时间序列中是如何呈现的。为了得到这背后的一些直觉,不妨看看DFT的数学定义:
其中
k
这里被一直扫到tN-1
来计算所有的DFT
系数。你知道吗首先要注意的是,这个定义在某种程度上类似于两个函数的相关性,在这里是
x(n)
和负指数函数。虽然这看起来有点抽象,但通过使用Euler's formula并对定义进行一点处理,DFT可以表示为正弦波和余弦波的相关性,这将解释DFT
的虚部和实部。你知道吗因此,请注意,这本质上是计算相关性,每当复指数分解得到的相应正弦或余弦与
x(n)
的正弦或余弦匹配时,X(K)
中就会有一个峰值,这意味着,这样的频率存在于信号中。你知道吗在给出了一个非常简短的理论背景之后,让我们考虑一个示例,看看如何在python中实现这一点。让我们考虑一下following signal:
现在,DFT可以通过使用^{} 来计算,如前所述,它将告诉您现在在变换域中的信号中的每个频率的贡献:
现在,如果我们画出实际的频谱,你会看到,在50Hz的频率上有一个峰值,用数学术语来说,它是一个以50Hz的基频为中心的δ函数。这可以在下面的Table of Fourier Transform Pairs中检查。你知道吗
对于所用的信号,我们将得到:
相关问题 更多 >
编程相关推荐