深入浅出通信原理(Python代码版)

深入浅出通信原理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))

猜你喜欢

转载自www.cnblogs.com/WindyZ/p/11220682.html