傅里叶(四):傅立叶变换(FFT)求时间序列的周期

本文介绍了傅里叶级数和傅里叶变换的基本概念,前者将周期性连续信号转换为非周期离散信号,后者则用于处理非周期连续信号。文中通过实例展示了如何使用Python进行傅里叶变换,并探讨了频率的定义,即单位时间内周期性变化的次数。代码部分演示了使用numpy和matplotlib库进行快速傅里叶变换(FFT)并分析信号频率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 傅里叶级数:在时域是一个周期且连续的函数,而在频域是一个非周期离散的函数。
  • 傅里叶变换:我们接下去要讲的傅里叶变换,则是将一个时域非周期的连续信号,转换为一个在频域非周期的连续信号

首先要来理解什么是频率 :

        通用解释为 -----频率,是单位时间内完成周期性变化的次数,是描述周期运动频繁程度的量,常用符号f或ν表示,单位为秒分之一,Hz是频率的基本单位,通常是以1秒完成的动作次数。比如你1秒能吃3个馒头那就记作你吃馒头的频率是3Hz(3赫兹),比如你的眼皮1秒能跳动10次就记作你眼皮跳动10Hz(10赫兹)。

import numpy as np
import matplotlib.pyplot as plt
import numpy as np

fs = 100  # frequency: 100  Hz
Fs = 1000 # sampling frequency: 1000 Hz

dt = 1/Fs # sampling period
N = 2048

T = N * dt # span

t = np.linspace(0, T, N, endpoint = False) # time
data = np.cos(2 * np.pi * fs * t) + np.random.normal(scale = 0.2, size = len(t))

# data = np.random.randint(6, 10, 300)  # 生成随机数
X = np.fft.fft(data) # Discrete Fourier Transform by fft
X = np.abs(X)
plt.plot(data[:100])
plt.show()
plt.plot(X)
plt.show()
print(1)

mean_X = np.mean(X)
distance = (X-mean_X) ** 2
mean_distance = np.mean(distance)
frequency = [i for i in range(len(distance)) if distance[i] > 0.8 * mean_distance]

length = len(X)
if len(frequency) > 2:
    if frequency[0] == 0:
        period = length // frequency[1]  # length个点中,完成了frequency[1]个周期
        if period >= 0.5 * length:
            print("none")
        print(period)
    else:
        period = length // frequency[1]
        if period >= 0.5 * length:
            print("none")
        print(period)
else:
    print("none")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值