Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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
Python 带小数点频率的FFT-如何量化频率的平均加权?_Python_Fft - Fatal编程技术网

Python 带小数点频率的FFT-如何量化频率的平均加权?

Python 带小数点频率的FFT-如何量化频率的平均加权?,python,fft,Python,Fft,通过下面的代码,我想了解输入信号中的不同频率以及它们的“强度” 如果正弦波的频率没有小数点(如:5.0和20.0)-请参见下面的第一个屏幕截图:我在fft中得到两个频率的尖峰,并且高度和频率本身与我的代码中的输入参数相等 不幸的是,如果一个频率有小数位(比如:一个频率的5.4),情况就不同了。请参见第二个屏幕截图:现在5.4不再是fft图中的尖峰,峰值的高度也不同于该正弦波的2.0振幅 我有两个问题: 如何更改点数(n)或其他参数,使5.4具有高度为2.0的尖峰,如其他屏幕截图所示 计算一个频率

通过下面的代码,我想了解输入信号中的不同频率以及它们的“强度”

如果正弦波的频率没有小数点(如:
5.0
20.0
)-请参见下面的第一个屏幕截图:我在fft中得到两个频率的尖峰,并且高度和频率本身与我的代码中的输入参数相等

不幸的是,如果一个频率有小数位(比如:一个频率的
5.4
),情况就不同了。请参见第二个屏幕截图:现在5.4不再是fft图中的尖峰,峰值的高度也不同于该正弦波的2.0振幅

我有两个问题:

  • 如何更改
    点数(
    n
    )或其他参数,使
    5.4
    具有高度为2.0的尖峰,如其他屏幕截图所示

  • 计算一个频率范围(如05.4的频率,两个范围应提供相同的
    频率强度

  • 守则:

    import matplotlib
    matplotlib.use('QT5Agg')
    import matplotlib.pyplot as plt
    import numpy as np
    from numpy.fft import fft, fftfreq
    
    # setup for domain - number of points
    n = 1000.
    
    # distance (in meters) or time period (in seconds)
    Lx = 100.
    
    omega = 2.0 * np.pi / Lx
    x = np.linspace(0, Lx, n)
    
    y1 = 2.0 * np.sin(5.4 * omega * x)
    y2 = 2.0 * np.sin(25.0 * omega * x)
    
    y = y1 + y2
    
    freqs = fftfreq(int(n))
    
    mask = freqs >= 0
    
    nwaves = freqs * n
    
    fft_vals = fft(y)
    
    # true theoretical fft
    fft_theo = 2.0 * np.abs(fft_vals / n)  # multiplied by 2 because I do not look at negative frequencies and have to take their values into account here, too.
    
    plt.figure(8)
    plt.plot(nwaves[mask], fft_theo[mask], "-o", markersize=4, label='fft')
    plt.xlim(-0.1, 30)
    plt.minorticks_on()
    plt.grid(b=True, which='major', color='b', linestyle='--')
    plt.grid(b=True, which='minor', color='y', linestyle='--')
    plt.show()
    
    :

    屏幕截图1:较低频率为
    5.0


    屏幕截图2:较低的频率为
    5.4

    在这两种情况下,您可以使用Sinc插值(或重建)查看孔径频率中严格整数周期之间加窗正弦波的实际频谱


    任何有限长度信号都没有尖峰。它看起来是这样的,因为您只绘制了整数周期频率点。

    缺少的链接:(看看除了中心以外的整数点是如何为零的)以及@hotpaw2(或其他)的概念:谢谢您的回答。不幸的是,我现在无法从中受益。一些问题仍然存在:1。你是否有一个链接到一些代码,其中进行了sinc插值?2.sinc插值是否在频域内完成?3.在进行sinc插值后:与其他频率范围相比,我是否能够判断在专用频率范围内普遍存在的“信号量”?关于我之前评论中的主题1:我看到您在dsp.stackexchange.com中提供了以下链接。但我必须承认,我无法从中编译引用的代码。。。这里有一些加窗的Sinc上采样插值代码,很久以前用一种极小的Basic语言编写:谢谢你的链接。在进行sinc插值后,我是否能够判断在特定频率范围内的“信号量”?‬