本文主要是介绍使用Python实现方波信号傅里叶变换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
概述
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 signalmatplotlib.use('TkAgg')mpl.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
mpl.rcParams['axes.unicode_minus'] = False # 显示负号def square():frequency = 1amplitude = 1xout = np.arange(-np.pi, np.pi, 0.001)period = 1.0 / frequencyyout = 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 graphplt.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 signalmatplotlib.use('TkAgg')mpl.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
mpl.rcParams['axes.unicode_minus'] = False # 显示负号def squareWaveFF(t, n):value = 0for k in range(1, n):factor = (0.1 / (2 * k - 1) * 0.1)angle = (2 * k - 1) * ttemp = factor * np.sin(angle)value += tempreturn valuedef square_FF():frequency = 1amplitude = 1xout = 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)
运行代码波形:
这篇关于使用Python实现方波信号傅里叶变换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!