目录
概述
1 方波信号
1.1 问题描述
1.2 傅里叶级数的数学实现
2 函数实现
2.1 方波信号实现
2.2 方波信号的傅里叶函数
3 测试函数
3.1 测试原理
3.2 改变K值的波形变化
概述
本文主要介绍使用使用Python实现方波信号傅里叶变换的方法,笔者首先介绍了方波信号的数学实现方法,还介绍了波形信号实现傅里叶变化的数学实现步骤,最后使用python语言实现了该算法,并通过改变级数k值,测试不同的波形图。
1 方波信号
1.1 问题描述
设f(x) 是周期为2π的周期函数,他在[ -π, +π]上的表达式为:
将f(x) 展开为傅里叶级数。
1.2 傅里叶级数的数学实现
1)收敛性判断
f(x) 满足如下条件:
1)f(x)在x = kπ(k=0,±1,,±2,±3,.... )的位置为断点
2)f(x) 在其他点的位置 是连续点
2)收敛点计算
根据收敛定理可得,
x = kπ时,该级数收敛于:
x ≠ 0 时,该级数收敛于 f(x)
3)实现傅里叶级数
根据傅里叶级数公式:
和 表示如下:
其中 :
计算步骤如下:
step-1:计算
step-2:计算
4)傅里叶级数实现
其中f(x)
将 ,带入 f(x)中,可得如下公式:
其中x属于如何集合:
2 函数实现
2.1 方波信号实现
使用Python编写方波函数
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2024/7/7 13:05
# @Author : ming fei.tang
# @File : test code
# ---------------------
import numpy as np
from scipy.fftpack import fft, ifft
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.pylab import mpl
from scipy import signal
matplotlib.use('TkAgg')
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
mpl.rcParams['axes.unicode_minus'] = False # 显示负号
def square():
frequency = 1
amplitude = 1
xout = np.arange(-np.pi, np.pi, 0.001)
period = 1.0 / frequency
yout = amplitude * signal.square(2 * np.pi * frequency * xout)
plt.plot(xout, yout)
plt.xlabel('x')
plt.ylabel('y')
plt.title('方波信号')
plt.axhline(y=0, color='r')
# to display the final graph
plt.show()
if __name__ == '__main__':
square()
运行代码,得到如下波形图:
2.2 方波信号的傅里叶函数
在1.2节中已经实现了方波信号的傅里叶函数的算法,现在使用python语言实现该算法的公式。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2024/7/7 13:05
# @Author : ming fei.tang
# @File : test code
# ---------------------
import numpy as np
from scipy.fftpack import fft, ifft
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.pylab import mpl
from scipy import signal
matplotlib.use('TkAgg')
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
mpl.rcParams['axes.unicode_minus'] = False # 显示负号
def squareWaveFF(t, n):
value = 0
for k in range(1, n):
factor = (0.1 / (2 * k - 1) * 0.1)
angle = (2 * k - 1) * t
temp = factor * np.sin(angle)
value += temp
return value
def square_FF():
frequency = 1
amplitude = 1
xout = np.arange(-np.pi * 10, np.pi * 10, 0.1)
yout = squareWaveFF(xout, 10)
plt.subplot(231)
plt.plot(xout, yout)
plt.title('方波信号的傅里叶形式')
plt.xlabel('x')
plt.ylabel('y')
plt.axhline(y=0, color='r')
plt.show()
# 测试函数
if __name__ == '__main__':
square_FF()
3 测试函数
3.1 测试原理
根据傅里叶级数的公式:
通过改变k的值,可以得到不同的级数和累加
3.2 改变K值的波形变化
1) K = 5
# 测试代码
if __name__ == '__main__':
square_FF(5)
运行代码波形:
2) K = 50
# 测试代码
if __name__ == '__main__':
square_FF(50)
运行代码波形:
3)K=100
# 测试代码
if __name__ == '__main__':
square_FF(100)
运行代码波形:
4)K=1000
# 测试代码
if __name__ == '__main__':
square_FF(1000)
运行代码波形: