如何从信号中提取准确的频率?

2024-09-27 00:20:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个一维信号阵列。这个数组包含一些我想用np.fft分析的特性的信息。你知道吗

作为一个例子,我尝试了以下方法:

我的函数应该是简单的正弦波lambda x : sin(x),理论上,当我把一个输入数组通过这个函数时,我会得到一个信号数组,当用fft变换时,它应该告诉我信号的主要成分是(伪码)signal = 1* sin(x)。你知道吗

到目前为止,我无法从这里的任何答案得到任何明智的,所以我提出了这个问题。你知道吗

现在我的问题是:如何从信号中获得“原始”正弦分量权重?你知道吗

这就是我被困的地方:

>>> y = f(x)
>>> fqs = np.fft.fft(y)
>>> fqs
array([ 3.07768354+0.00000000e+00j,  3.68364588+8.32272378e-16j,
        8.73514635-7.15951776e-15j, -7.34287625+1.04901868e-14j,
       -2.15156054+5.10742080e-15j, -1.1755705 +4.87611209e-16j,
       -0.78767676+3.40334406e-16j, -0.58990993+4.25167217e-16j,
       -0.476018  -3.43242308e-16j, -0.40636656+1.13055751e-15j,
       -0.36327126+1.55440604e-16j, -0.33804202-1.07128132e-16j,
       -0.32634218+2.76861429e-16j, -0.32634218+8.99298797e-16j,
       -0.33804202+5.02435797e-16j, -0.36327126-1.55440604e-16j,
       -0.40636656-3.06536611e-16j, -0.476018  -4.57882679e-17j,
       -0.58990993+4.31587904e-16j, -0.78767676+9.75500354e-16j,
       -1.1755705 -4.87611209e-16j, -2.15156054-1.87113952e-15j,
       -7.34287625+1.79193327e-15j,  8.73514635-6.76648711e-15j,
        3.68364588-6.60371698e-15j])
>>> np.abs(_)
array([3.07768354, 3.68364588, 8.73514635, 7.34287625, 2.15156054,
       1.1755705 , 0.78767676, 0.58990993, 0.476018  , 0.40636656,
       0.36327126, 0.33804202, 0.32634218, 0.32634218, 0.33804202,
       0.36327126, 0.40636656, 0.476018  , 0.58990993, 0.78767676,
       1.1755705 , 2.15156054, 7.34287625, 8.73514635, 3.68364588])
>>> where do I find my 1*sin(x) ?

Tags: 方法lambda函数fft信息信号np数组
1条回答
网友
1楼 · 发布于 2024-09-27 00:20:43

尽管这里显示了x变量,但我认为您并没有生成周期函数。这对我来说很好:

import numpy as np
x=np.linspace(0,np.pi*2,100,endpoint=False)
y=np.sin(x)
yf=np.fft.rfft(y)

输出为

 (-1.5265566588595902e-16+0.0j)
 (-1.8485213360008856e-14+-50.0j)
 (5.8988036787285649e-15+-3.4015634637549994e-16j)
 (-1.0781745022416177e-14+-3.176912458933349e-15j)
 (6.9770353907875146e-15+-3.6920723832369405e-15j)

唯一的零虚数是在模式1。你知道吗

相关问题 更多 >

    热门问题