深入浅出通信原理Python代码版
深入浅出通信原理是陈爱军的心血之作,于通信人家园连载,此处仅作python代码笔记训练所用
陈老师的连载从多项式乘法讲起,一步一步引出卷积、傅立叶级数展开、旋转向量、三维频谱、IQ调制、数字调制等一系列通信原理知识
连载1:从多项式乘法说起
\[
(x+1)(x^2+2x+5)=x^3+3x^2+7x+5
\]
import sympy
x = sympy.Symbol('x')
sympy.expand((x+1)*(x*x+2*x+5))
这种计算方法总结起来就是:
反褶:一般多项式都是按x的降幂排列,这里将其中一个多项式的各项按x的升幂排列。
平移:将按x的升幂排列的多项式每次向右平移一个项。
相乘:垂直对齐的项分别相乘。
求和:相乘的各结果相加。反褶、平移、相乘、求和-这就是通信原理中最常用的一个概念“卷积”的计算过程。
连载2:卷积的表达式
将多项式转换成矩阵形式
\[
x+1 -> [1,1]\x^2+2x+5 -> [1,2,5]\x^3+3x^2+7x+5=[1,1]*[1,2,5]=[1,3,7,5]
\]
其中卷积(*)的运算如下:
\(c(n)=a(n)*b(n)=\sum_{k=0}^n{a(k)b(n-k)},n=0~(n1+n2)\)
其中n1是a(n)的系数总个数,n2是b(n)的系数总个数
Python计算卷积
import numpy as np
np.convolve([1,1],[1,2,5]) #上例,result:[1, 3, 7, 5]
# 杨辉三角,输入行数,输出对应行的值
def pascal_triangle(n):
if n == 0:
return 1
elif n == 1:
return [1,1]
else:
return np.convolve([1,1],pascal_triangle(n-1))
# test code
for i in range(0,7):
print(pascal_triangle(i))
# 杨辉三角,迭代器形式
def triangles():
nlist=[1]
while True:
yield nlist
nlist.append(0)
nlist = [nlist[i] + nlist[i-1] for i in range(len(nlist))]
# test code
tr = triangles()
for i in range(0,7):
print(next(tr))
原文地址:https://www.cnblogs.com/WindyZ/p/11220682.html
时间: 2024-11-01 20:28:20