非常复杂的公式背后很可能隐藏了简单的道理。 真正学好通信原理,关键是要透过公式看本质。
以复傅立叶系数为例,很多人都只是会套公式计算,真正理解其含义的人不多。对于经常出现的“负频率”,真正理解的人就更少了。
1 从多项式乘法说起
多项式乘法相信我们每个人都会做:
再合并同类项的方法得到的,要得到结果多项式中的某个系数,需要两步操作才行,有没有办法一步操作就可以得到一个系数呢?
下面的计算方法就可以做到:
1
这种计算方法总结起来就是:
反褶:一般多项式都是按x的降幂排列,这里将其中一个多项式的各项按x的升幂排列。 平移:将按x的升幂排列的多项式每次向右平移一个项。 相乘:垂直对齐的项分别相乘。 求和:相乘的各结果相加。
2 卷积的表达式
利用上面的计算方法,我们很容易得到: c(0)=a(0)b(0)
c(1)=a(0)b(1)+a(1)b(0)
c(2)=a(0)b(2)+a(1)b(1)+a(2)b(0)
c(3)=a(0)b(3)+a(1)b(2)+a(2)b(1)+a(3)b(0) 其中:a(3)=a(2)=b(3)=0 在上面的基础上推广一下:
假定两个多项式的系数分别为a(n),n=0~n1和b(n),n=0~n2,这两个多项式相乘所得的多项式系数为c(n),则: c(0)=a(0)b(0)
c(1)=a(0)b(1)+a(1)b(0)
c(2)=a(0)b(2)+a(1)b(1)+a(2)b(0)
c(3)=a(0)b(3)+a(1)b(2)+a(2)b(1)+a(3)b(0)
c(4)=a(0)b(4)+a(1)b(3)+a(2)b(2)+a(3)b(1)+a(4)b(0) 以此类推可以得到:
上面这个式子就是a(n)和b(n)的卷积表达式。
2
通常我们把a(n)和b(n)的卷积记为:a(n)*b(n),其中的*表示卷积运算符。
3 利用matlab计算卷积
表面上看,卷积的计算公式很复杂,计算过程也很麻烦(反褶,平移,相乘,求和),实际上使用Matlab很容易计算。
以上面的a(n) = [1 1],b(n) = [1 2 5]的卷积计算为例: >> a = [1 1]; >> b = [1 2 5]; >> c = conv(a,b); >> c c =
1 3 7 5
为了更好地理解卷积(多项式相乘,相当于系数卷积),我们用matlab画一下高中学过的杨辉三角。
杨辉三角是一个由数字排列成的三角形数表,一般形式如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1
其中每一横行都表示(a+b)^n(此处n=1,2,3,4,5,6,??????)展开式中的系数。
杨辉三角最本质的特征是,它的两条斜边都是由数字1组成的,而其余的数则是等于它肩上的两个数之和。 >> x=[1 1];y=[1 1]; >> y y = 1 1
>> y=conv(x,y) y =
1 2 1
>> y=conv(x,y) y =
1 3 3 1 >> y=conv(x,y) y =
1 4 6 4 1
3
>> y=conv(x,y) y =
1 5 10 10 5 1 >> y=conv(x,y) y =
1 6 15 20 15 6 1
4 将信号表示成多项式的形式
多项式乘法给了我们启发:如果信号可以分解为类似多项式的这种形式:
存不存在满足这个条件的x呢? 前人早就给出了答案,那就是:
附:前面推导过程中用到的几个三角公式:
4
5 著名的欧拉公式
这就是著名的欧拉公式。
对于欧拉公式,大家知道结论就可以了,想知道怎么得来的同学请参考下面的证明。
欧拉公式的证明(利用泰勒级数展开):
5