简 介:本文分析了12bit ADC采集的256个正弦信号数据,通过相关运算计算信号幅值。结果显示:无加窗处理时最大幅值为1024;施加三角窗或汉宁窗后幅值降至511左右。当信号饱和失真成方波时,基波分量幅值可达652.3。实验表明加窗处理会降低信号幅值估计,而信号失真则会增大计算幅值。研究为ADC信号处理中的幅值估计提供了量化参考。
关键词:谐波分析
01正弦信号幅度分析
一、问题分析
这是 256 个正弦信号采集数据。 12bit, 有符号的数据。 最高值为 2047。 由于不知道它的相位, 所以将它 与同频率的正弦和余弦序列取相关运算, 获得两个正交分量的幅值。 根据他们计算出正弦信号的幅值。 那么这个幅值最大值是多少? 如果对数据采用三角窗口进行加权, 那么所获得的最大数值是多少呢? 下面通过仿真计算出这个最大数值。
二、计算结果
通过Python 编程, 仿真波形赋值估计。 如果采集到的信号正好是满量程, 也就是信号的峰值为 2047, 使用单频率分量计算所得到的信号幅值,为 1025。 这个数值应该乘以2, 才能够等于信号采集数据的峰值。 对于数据施加三角窗口, 单频率分量计算正弦波赋值,等于511.8。 对应幅度又降低了一倍。 如果对数据施加汉宁窗口, 也就是升余弦窗口。 计算出对应的幅度为 511.74。 至此,我们知道, 对于 12比特 ADC采集信号的数据, 如果不施加窗口, 所得到的最大幅值为 1024。 如果施加三角窗口或者余弦窗口, 最大计算出的信号赋值为 511 左右。
· 没有加窗: c = 1025.63
· 加三角窗口: c= 511.8
· 加升余弦窗口:c=511.74
fromheadmimport*N=256O=0.175Theta=pi/6data=array([(1ifsin(Theta+O*i)>0else-1)*0x7ffforiinrange(N)])sdim=array([sin(O*i)foriinrange(N)])cdim=array([cos(O*i)foriinrange(N)])wdim=array([arcsin(sin(i*2*pi/N-pi/2))/pi+0.5foriinrange(N)])wcos=array([(1-cos(i*2*pi/N))/2foriinrange(N)])odata=data data=data*wdim a=sum(data*sdim)b=sum(data*cdim)c=sqrt(a**2+b**2)/N printf(c)plt.plot(data,lw=3)plt.plot(odata,lw=1)plt.xlabel("N",color="steelblue",fontsize=24)plt.ylabel("Data",color="steelblue",fontsize=24)plt.grid(True,which='both',linestyle='--',alpha=0.7)plt.tight_layout()plt.show()如果正弦信号被放大饱和失真, 对应的基波分量 也会增加。 最严重的情况下, 信号变成了方波信号。 仍然通过增加三角窗口, 或者汉宁窗口, 计算其中的谐波幅度。 对应的幅度最大值为 652.3。
※总结 ※
本文讨论了, 对于 12bit ADC 采集正弦信号。 如果通过加窗方法对其估计信号幅度, 在信号不饱和失真的情况下, 最大幅度为 512。 如果出现了饱和失真, 最严重的情况下, 计算出的数值可以达到 652。