下面两道题关于使用复利叶变换的,这应该是很常见的嵌入式问题:
A)系统用adc(小于16-bit)采样50Hz交流电流电压,采样频率hz,试求出电流电压幅值以及功率和功率因数。
B)上面的50hz电压中,混入了另一个55hz的电压,求出这两个电压的幅值。
这两道题使用16-bit,32-bit的整数运算,不使用浮点运算,可以在mcu上实现。
下面一道题,因为我听说宇宙飞船有一个变速不变调的专利(我现在怀疑此传说的真实性),所以切磋一下:
C)完成一个wav声音文件的变速不变调的程序。
复利叶变换在mcu上可能不常用,所以不知道有多少感兴趣的同学。
(1)复数的基础知识
在讲解fouriertransform前,大家必须知道一点基本的复数知识。
在复平面上的一个点P(x,y)用复数表示为:
P=x+iy
用极坐标表示为:
P=r*e^(ia)
这里,r=sqrt(x*x+y*)是点(x,y)到原点的距离,a=arctan2(x,y)是角度,e是自然常数。这里引出了一个非常重要的表达式:
e^(ia)=cos(a)+isin(a)
这个表达式,是利用复数完成角度变换和三角函数变换的利器。例如,把点P旋转b角度,那么新点(x1,y1)的角度为a+b,距离仍为r.
P1=x1+iy1
=r*e^(i(a+b))
=r*e^(ia)*e^(ib)
=(x+iy)*(cos(b)+isin(b))
=(x*cos(b)-y*sin(b))+i(y*cos(b)+x*sin(b))
(2)傅里叶变换的基础知识
傅里叶变换是一个积分变换,公式就不提供了,有兴趣的同学可以直接访问下面的连接,以获得更详尽的解释: