在学习傅里叶变换的时候遇到了求周期方波信号频谱图的例子,在书上和网上查阅了一些资料,发现大都是讨论的都是下图左边的周期信号的频谱,课程老师的ppt中也只列出了另一种周期信号频谱图的结论,没有在进行傅里叶变换,自己便根据定义推导了一遍,贴在这里作记录和分享之用。
关于傅立叶级数展开的另一讨论在我的另一篇文章 http://www.zzvips.com/article/148869.html
2016年11月21号更新
在第二个周期方波信号的傅里叶变换里,注意是
转换为sin函数下为
之前写错了,今天更正。
对于这两种方波信号,我们也可以编程验证一下,就是用正弦函数去逼近方波信号,python的实现代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# 分析傅里叶级数分解之后cos和sin的和项的图像输出
from numpy import mgrid,sin,cos,array,pi
from matplotlib.pyplot import plot,show,title,legend,xlabel,ylabel
x = mgrid[ 0 : 10 : 0.02 ] # 这里类似于matlab用冒号产生步长为0.02的序列,但是语法和matlab不同
# 下面的这段循环实现y=sin(x)+sin(3x)+...+sin(19x)
def cos_square():
y1 = 0 ;
for i in range ( 0 , 20 , 1 ):
b = ( - 1 ) * * (i) * cos(( 2 * i + 1 ) * x) / ( 2 * i + 1 )
y1 = b + y1 # 这种求和的方法是从c语言移植过来的
plot(x,y1, 'orange' ,linewidth = 0.6 )
title( 'cos_square' )
xlabel( 'time' )
ylabel( 'amplitude' )
show()
def sin_square():
y2 = 0
for i in range ( 0 , 20 , 1 ):
b = sin(( 2 * i + 1 ) * x) / ( 2 * i + 1 )
y2 = b + y2 # 这种求和的方法是从c语言移植过来的
plot(x,y2, 'g' ,linewidth = 0.6 )
title( 'sin_square' )
xlabel( 'time' )
ylabel( 'amplitude' )
show()
cos_square()
sin_square()
|
输出结果如下:
由结果可以看两种不同的方波级数展开是正确的
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/ouening/article/details/53199215