paddlets.analysis.frequency_domain

不同频域和时频域分析算子的实现,包括快速傅里叶变换(FFT)/短时傅里叶变换(STFT)/连续小波变换(CWT)

class FFT(fs: float = 0, norm: bool = True, half: bool = True, **kwargs)[源代码]

基类:Analyzer

对一维信号数据进行快速傅里叶变换得到该信号在不同频率下的振幅谱和相位谱

本算子同时返回X坐标和Y坐标,方便做可视化展示,其中X代表频率,Y代表振幅或者相位

参数
  • fs (float) – 信号的采样频率,默认为0,如果不指定采样频率,横坐标的范围默认为数据的长度,另外如果传入待分析的数据是多列,默认所有的列采样频率是一样的,如果不同列采样频率不一样,建议每列分开调用本算子

  • norm (bool) – 是否对快速傅里叶变换后的振幅谱和相位谱进行归一化,默认做归一化(True)

  • half (bool) – 是否对快速傅里叶变换后的振幅谱和相位谱取一半结果(当时域信号是一个实数信号,傅里叶变换后的频域信号是关于0轴对称的),默认返回一半结果(True)

  • kwargs – 其他相关参数

返回

None

analyze(X: Union[Series, DataFrame]) DataFrame[源代码]

快速傅里叶变换分析算子实现逻辑

参数

X (pd.Series|pd.DataFrame) – 待分析的数据

返回

快速傅里叶变换后的结果,对于每列数据算子返回三列结果

返回类型

fft_result(DataFrame)

实际案例

#Given:
X = pd.DataFrame(np.array(range(100)), columns=['a'])
#Returns:
1. 'a_x': np.ndarray(1-D), Representative frequency),
2. 'a_amplitude': np.ndarray(1-D), Representative cwt of amplitude spectrum
3. 'a_phase': np.ndarray(1-D), Representative phase spectrum
引发

ValueError

classmethod get_properties() Dict[源代码]

返回分析算子的属性

class STFT(fs: float = 1.0, window: Union[str, Tuple[str], List[str]] = 'hann', nperseg: int = 256, noverlap: Union[None, int] = None, nfft: Union[None, int] = None, detrend: Union[str, bool] = False, return_onesided: bool = True, boundary: Optional[str] = 'zeros', padded: bool = True, axis: int = - 1, **kwargs)[源代码]

基类:Analyzer

短时傅里叶变换(STFT)主要用于分析非平稳信号,非平稳信号由于波形的变化没有规律,也没有瞬间频率的概念,直接使用快速傅里叶变换(FFT)效果不佳

在STFT中,采用加窗机制使信号平稳化(从时间上截断,使得短时间内波形没有显著变化),之后就可以对加窗的信号分段使用FFT。也可以说,STFT得到的是按时间顺序排列的n段信号的频谱

在STFT中,窗的长度决定频谱图的时间分辨率和频率分辨率,窗口越长,频率分辨率越高,时间分辨率越低,反之频率分辨率越低,时间分辨率越高,两者不可兼得,对于时变的非稳态信号,高频适合小窗口,低频适合大窗口

在STFT中,为了保证频域特性的基础上提高时域特性,经常选择前后窗函数重叠一部分,这样两个窗确定的时刻就比较接近,就提高了时域分析能力。但不是重叠越多越好,重叠点数过多会大幅增加计算量,导致效率低下

参数
  • fs (float) – 信号的采样频率,默认为1.0,如果传入待分析的数据是多列,默认所有列的采用频率是一样的,如果不同的列采样频率不一样,建议每列分开调用本算子

  • window (str|tuple|array_like) – 需要使用的窗口类型,默认值为``hann``

  • nperseg (int) – 窗口的大小,默认值为256

  • noverlap (None|int) – 窗口之间重叠的点数,默认为None(此时noverlap取值为nperseg的一半)

  • nfft (None|int) – FFT的长度,默认为None(等于nperseg).如大于nperseg会自动进行零填充

  • detrend (str|function|False) – 指定如何去除每个段的趋势,默认为False

  • return_onesided (bool) – 如果为True,则返回实际数据的单侧频谱。如果False返回双侧频谱,默认为True

  • boundary (None|str) – 指定输入信号是否在两端扩展,以及如何生成新值,默认为zeros

  • padded (bool) – 指定输入信号在末尾是否填充零以使信号精确地拟合为整数个窗口段,以便所有信号都包含在输出中,默认为True

  • axis (int) – 计算STFT的轴,默认为最后一个轴(即axis=-1)

  • kwargs – 其他相关参数

关于参数的更多细节,可以参考:https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.stft.html?highlight=stft#scipy.signal.stft

返回

None

analyze(X: Union[Series, DataFrame]) Dict[源代码]

短时傅里叶变换分析算子实现逻辑

参数

X (pd.Series|pd.DataFrame) – 待分析的数据

返回

短时傅里叶变换后的结果,对于每列数据算子返回三列结果

返回类型

stft_result(Dict)

实际案例

#Given:
X = pd.DataFrame(np.array(range(100)), columns=['a'])
#Returns:
1. 'a_f': np.ndarray(1-D), Representative frequency
2. 'a_t': np.ndarray(1-D), Representative time
3. 'a_Zxx': np.ndarray(2-D), Representative stft of x
引发

ValueError

classmethod get_properties() Dict[源代码]

返回分析算子的属性

class CWT(scales: int = 64, wavelet: str = 'cgau8', fs: float = 1.0, method: str = 'conv', axis: int = - 1, **kwargs)[源代码]

基类:Analyzer

快速傅里叶变换(FFT)只能得到一个信号包含哪些频率成分,但无法从频域上得知信号在不同时间的频率信息。短时傅里叶变换(STFT)通过引入加窗机制在一定程度上解决了这个问题,但STFT的效果受窗口大小影响,窗口过小,频率分辨率低,窗口过大,时间分辨率低

连续小波变换可以解决以上问题,它继承和发展了短时傅立叶变换局部化的思想,同时又克服了窗口大小不随频率变化等缺点,能够提供一个随频率改变的’时间-频率’窗口,是进行信号时频分析和处理的理想工具

参数
  • scales (int) – 小波尺度,可以设置为数据长度的一半,同时也要注意当数据的一半比较大(比如大于1000),较大的小波尺度会造成计算比较耗时,这个时候将小波尺度换成100,200等小点的数值

  • wavelet (str) – 小波名称,可选的包括[‘cgau1’, ‘cgau2’, ‘cgau3’, ‘cgau4’, ‘cgau5’, ‘cgau6’, ‘cgau7’, ‘cgau8’, ‘cmor’, ‘fbsp’, ‘gaus1’, ‘gaus2’, ‘gaus3’, ‘gaus4’, ‘gaus5’, ‘gaus6’, ‘gaus7’, ‘gaus8’, ‘mexh’, ‘morl’, ‘shan’],默认为’cgau8’

  • fs (float) – 采样频率,默认为1.0,如果传入待分析的数据是多列,默认所有列的采样频率是一样的,如果不同的列采样频率不一样,建议每列分开调用本算子

  • method (str) – 来计算cwt的方法,可选的包括[‘conv’, ‘fft’, ‘auto’],默认为conv

  • axis (int) – 计算STFT的轴,默认为最后一个轴(即axis=-1)

  • kwargs – 其他相关参数

关于参数的更多细节,可以参考:https://pywavelets.readthedocs.io/en/latest/ref/cwt.html?highlight=cwt

返回

None

analyze(X: Union[Series, DataFrame]) Dict[源代码]

连续小波变换分析算子实现逻辑

参数

X (pd.Series|pd.DataFrame) – 待分析的数据

返回

短时傅里叶变换后的结果,对于每列数据算子返回三列结果

返回类型

cwt_result(Dict)

实际案例

#Given:
X = pd.DataFrame(np.array(range(100)), columns=['a'])
#Returns:
1. 'a_t': np.ndarray(1-D), Representative time
2. 'a_coefs': np.ndarray(2-D), Representative cwt of x
3. 'a_frequencies': np.ndarray(1-D), Representative frequency
引发

ValueError

classmethod get_properties() Dict[源代码]

返回分析算子的属性