俗话说万物皆可傅里叶,傅里叶级数可以说是非常伟大的一个工具,傅里叶提出:任何周期函数都可以用正弦函数和余弦函数的无穷级数来表示。
f(x)=a0+∑(ancos(nx)+bnsin(nx));当然我们可以简化其中的运算只观察其中的正弦函数部分。
那么我们的方波是否也可以用傅里叶级数来表示? 当然可以,方波的傅里叶级数表达式为:
我们可以用简单的程序来实现
for(float j = 0;j<100*3.14;j+=0.01) { double t = 0; for(int k = 0;k<= 5;k++) { t += sin((2*k+1)*j)/(2*k+1);//五次谐波 } spiCommand(vspi, 0x1,(t*1024)); // 写入DAC的值 }
K = 5 的时候波形
K = 10的波形
因此方波可以用不同频率的正弦波叠加得到,同理我们想要得到固定频率的正弦波也可以从方波中将相对应的频率分离出来。
例如10KHZ的信号我们可以将其看作10KHZ,30KHZ,50KHZ….的信号的叠加,因此只需要利用合理的低通滤波器和带通滤波器就可以从中很好的分离出正弦信号。
我们可以对信号多进行几次一阶低通滤波(积分)将方波信号逐渐转为锯齿波~三角波~近似正弦波。其中100欧电阻和0.1uF电容组成的低通滤波器截止频率大概为15KHZ。
也可以选择使用30KHZ的带通滤波器来实现提取高次谐波。
我们可以利用一个高频的信号的分频来提取一些信号,例如对一个100KHZ的信号分别进行十分频,二分频来提取30KHZ的信号和100KHZ的信号。
利用74HC160十进制计数器即可完成十分频,同理QA路可实现二分频。
最好是使用带通滤波器尤其是十分频那里(因为他的占空比不是百分之五十),使用带通滤波器选择好合适的中心频率就可以得到我们想要的方波了。