Python numpy下几种fft函数的使用方式

2022-08-22 13:01:24
目录
fftrfftfftfreqifftirfft总结

numpy下fft模块提供了丰富的fft函数,几种常用的在这里记录一下使用方式

fft

输入实数samples,如果输入的sample是带虚数部分的话,虚数部分会被默认删除。

t=np.arange(12)
b=np.sin(t)
print(b)
print("sum(b)=", np.sum(b))

s = np.fft.fft(b)
print(s)

运行结果截图如下

从图中可以看到,

    [0]是一个实数,实数部分是所有input中各个元素之和。[i]与[N-i]共轭;输入的N如果是偶数,那么[N/2]没有共轭的元素。 rfft

    rfft

    其实就是对fft的结果输出做了省略。>

    t=np.arange(12)
    b=np.sin(t)
    print(b)
    print("sum(b)=", np.sum(b))
    
    s = np.fft.fft(b)
    print("fft result:", s)
    
    s = np.fft.rfft(b)
    print("rfft result:", s)
    

    np.fft.rfft

    fftfreq

    返回fft的频率节点

    上面的fft和rfft将时域数据转为频域,得到的数据的bin是哪些范围?

    可以通过fftfreq来获取

    第一个参数n是时域数据的数据个数,第二个参数d是表示每一个bin的尺度。一般是1/sample_rate

    t=np.arange(12)
    b=np.sin(t)
    print(b)
    print("sum(b)=", np.sum(b))
    
    s = np.fft.fft(b)
    print("fft result:", s)
    
    s = np.fft.rfft(b)
    print("rfft result:", s)
    
    s= np.fft.fftfreq(12, d=1/8000)
    print(s)
    

    其结果为

    [    0.          666.66666667                      1333.33333333                     2000.
      2666.66666667  3333.33333333                    -4000.                          -3333.33333333
     -2666.66666667 -2000.                            -1333.33333333                    -666.66666667]

    那么结合rfft的数据就有

    BinRangeValue
    bin[1]1~667HZ0.46997981+0.41183211j
    bin[2]667~1334HZ-1.36179847-5.76500237j
    bin[3]1334~2000HZ0.14669493-0.4965488j
    bin[4]2000~2667HZ0.20513541-0.2233417j
    bin[5]2667~3333HZ0.22157176-0.09538547j
    bin[6]3333~4kHZ0.22563497+0.j

    ifft

    ifft是逆向fft操作,代码如下

    import numpy as np
    
    t=np.arange(12)
    b=np.sin(t)
    print(b)
    
    s = np.fft.fft(b)
    #print(s)
    
    y = np.fft.ifft(s)
    print("restore:", y)
    

    它的结果虽然也是复数,但是在实数部分,可以看到,就是结果;

    所以也可以直接输出实数部分np.fft.ifft(s).real

    irfft

    irfft是配合rfft使用的;>但是rfft的结果是n//2+1;

    irfft匹配的是rfft,所以它的参数长度与ifft是不同的;两者也不可混用。

    import numpy as np
    
    t=np.arange(12)
    b=np.sin(t)
    print(b)
    
    s = np.fft.rfft(b)
    #print(s)
    
    y = np.fft.irfft(s)
    print("restore:", y)
    

    总结

    到此这篇关于Python numpy下几种fft函数使用的文章就介绍到这了,更多相关numpy fft函数的使用内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!