完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如何使用数字示波器DS6104去测量交流信号的幅值和相位呢?交流信号的幅值和相位测量出来的结果为什么会有误差呢?
为什么交流信号的幅值和相位随着示波器的时基不同而改变呢? |
|
相关推荐
1个回答
|
|
在昨天博文 使用数字示波器DS6104测量交流信号的幅值和相位 中对于使用示波器测量正弦交流信号的幅值和相位进行了分析和实验研究。但是对测量出的幅值和相位结果中的误差随着示波器的时基( time base )不同而改变的原因,究竟是在博文第二部分分析中理论上存在的误差引起的,还是由于示波器本身在同步、AD位数精度、数据处理窗口方面引起的呢?
关于这个问题可以通过计算机仿真实验,对采集过程使用仿真来验证。 01数据生成和计算方法 在实验中,根据DS6104示波器的参数,对于采集到的数据做一下假设: 数据点个数 N = 1400 N = 1400 N=1400,时基 T s T_s Ts对应100个数据采样点。信号的频率 f = 1000 H z f = 1000Hz f=1000Hz,相位 θ = 0 theta = 0 θ=0。数据的中心对应着时间t=0时刻,相当于信号触发同步的时间点位于示波器的中心。 下面给出生成数据的Python语句: N = 1400 phase = 0 f = 1000 def ts2data(ts): timeall = ts * N / 100 timedim = linspace(-timeall / 2, timeall / 2, N, endpoint=False) return timedim, sin(timedim * 2 * f * pi) 下面给出当ts=0.5ms时对应的数据波形。 ▲ 设置ts=0.5ms时对应的数据波形 利用在博文 使用数字示波器DS6104测量交流信号的幅值和相位 中的计算方法求信号的有效值和相位。 def data2ap(tt, y, freq): sint = [sin(t * 2 * pi * freq) for t in tt] cost = [cos(t * 2 * pi * freq) for t in tt] ys = sum([a * b for a,b in zip(y, sint)]) / len(tt) yc = sum([a * b for a,b in zip(y, cost)]) / len(tt) amp = sqrt(ys**2 + yc**2)*sqrt(2) phase = math.atan2(yc,ys) return amp,phase 测量得到的信号有效值和相位分别是: E = 0.7071067811865476, theta=-1.0150610510858574e-17 02采集位数对计算精度的影响 在示波器中,数据采集的位数为8位。下面对采集数据的位数分别从1~16进行仿真实验,验证采集数据的位数对测量的影响。 def databit(data): global bit return round((1+data) / 2 * (2**bit)) / (2 **bit) * 2 - 1. bit=[1.00,2.00,3.00,4.00,5.00,6.00,7.00,8.00,9.00,10.00,11.00,12.00,13.00,14.00,15.00,16.00] error=[0.07,0.03,0.01,0.00,0.00,0.00,0.00,0.00,-0.00,0.00,-0.00,0.00,-0.00,0.00,-0.00,0.00] ▲ 采集位数与幅度计算误差 ▲ 不同采样位数下对应的采集波形 03时基对误差的影响 在下面的仿真中,采集量化位数 bit = 8。时基从30us到5000us,采集200个实验点。 1.不加窗时对应的误差 ▲ 不同时基采样对应的波形 ▲ 不同的时基对应的计算误差,量化bit=8 通过实验可以验证,如果取消量化过程,所得到的测量误差(幅值,相位)的情况与上面量化位数等于8时几乎一样。 对比在 使用数字示波器DS6104测量交流信号的幅值和相位 中时基使用示波器测量的结果,可以看到,在ts《0.002s的时候,所得到的误差与仿真的结果仅此,但当ts大于0.002之后,所得到的误差就呈现了规律的锯齿波的形状。对于这个现象现在还无法解释。 2.加窗口之后对应的误差 通过对数据增加三角窗和 Hanning 窗口 加权处理,来评估时基对参数计算误差。 def winddata(len, mode = 0): if mode == 0: return [1] * len elif mode == 1: # Triangle Window win = [1] * len for i in range(len): if i 《 len / 2: win[i] = i / ((len + 1) / 2) else: win[i] = (len-i) / ((len + 1) / 2) return win elif mode == 2: win = [1] * len for i in range(len): theta = (i - (len - 1) / 2) * pi * 2 / len win[i] = (1 + cos(theta)) / 2 return win elif mode == 3: win = [1] * len for i in range(len): theta = (i - (len - 1) / 2) * pi * 2 / len win[i] = 0.54 + 0.46 * cos(theta) return win else: return [1] * len pltgif = PlotGIF() tbdim = linspace(30e-6, 5000e-6, 200) adim = [] pdim = [] errordim = [] for tb in tbdim: bit = 8 t,signal = ts2data(tb) signal = list(map(databit, signal)) wind = winddata(len(signal), 3) ratio = 1.0 / sum(wind)*len(wind) signal = [d*w*ratio for d,w in zip(signal, wind)] a, p = data2ap(t, signal, f) error = a - sqrt(2) / 2 adim.append(a) pdim.append(p) errordim.append(error) printff(tb, a, p, error) plt.clf() plt.plot(t, signal) plt.xlabel(‘Time(s)’) plt.ylabel(‘Voltage(V)’) plt.grid(True) plt.draw() plt.pause(.01) pltgif.append(plt) tspsave(‘hamming’, tb=tbdim, a=adim, p=pdim, error=errordim) pltgif.save(r‘d:temp1.gif’) plt.clf() plt.subplot(2,1,1) plt.plot(tbdim, errordim) plt.grid(True) plt.xlabel(‘Time Base(s)’) plt.ylabel(‘Amplitude Error’) plt.subplot(2, 1, 2) plt.plot(tbdim, pdim) plt.grid(True) plt.xlabel(‘Time Base(s)’) plt.ylabel(‘Phase’) plt.show() (1)增加参加窗口 《img al》 ▲ 增加三角窗口 ▲ 使用三角窗对采集数据进行处理之后的幅值误差和相位 疑问: 为何三角窗口对于相位影响这么大? 猜测: 可能这个问题来自于对信号的量化误差所带来的。 ▲ 将量化8bit去掉之后,使用三角窗口加权数据所得到的复制误差和相位 (2)增加Hanning窗口 ▲ 对数据施加Hanning窗口对应的信号波形 ▲ 使用Hanning窗口对数据加权计算的信号幅值误差和相位 (3)增加Hamming窗口 ▲ 增加Hamming窗口数据的波形 ▲ 使用Hamming窗口对数据处理所得到的幅度误差和相位 (4)对比三角窗口,Hanning窗口以及Hamming窗口对于幅度误差的影响 ▲ 对比三种加窗方法测量幅值误差曲线 ▲ 对比三种加窗方法测量幅值误差曲线(局部) 经过放大之后,我们看到上面的幅值误差曲线呈现了某种随机的情况。猜测这可能 与量化误差有关系,下面重新将上述加窗方法数据生成一边,只是将对信号的量化部分去除掉。绘制出三种加窗方法测量得到的误差曲线(局部)如下: ▲ 将量化误差去掉之后,三种加窗方法对应的幅值误差曲线 可以看到没有了量化误差,测量误差曲线与时基ts之间的关系变得有规律了,而不在呈现随机状态。 04结论 通过实验,可以看到在博文 使用数字示波器DS6104测量交流信号的幅值和相位 中测量信号幅值和相位的过程中,时基ts对于测量误差的影响所出现的现象并不能够完全有理论仿真来解释。特别是对于ts大于0.002s之后出现的情况,应该与示波器本身的采集原理有关系。 这个分析也证实了,在实际工程实践中,除了理论部分分析之外,还需要考虑到实际测量过程所出现的其它异样的情况。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 05:07 , Processed in 0.799522 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号