在昨天博文 使用数字示波器DS6104测量交流信号的幅值和相位 中对于使用示波器测量正弦交流信号的幅值和相位进行了分析和实验研究。但是对测量出的幅值和相位结果中的误差随着示波器的时基( time base )不同而改变的原因,究竟是在博文第二部分分析中理论上存在的误差引起的,还是由于示波器本身在同步、AD位数精度、数据处理窗口方面引起的呢?

关于这个问题可以通过计算机仿真实验,对采集过程使用仿真来验证。

01数据生成和计算方法


在实验中,根据DS6104示波器的参数,对于采集到的数据做一下假设:
数据点个数N=1400N = 1400N=1400,时基TsT_sTs​对应100个数据采样点。信号的频率f=1000Hzf = 1000Hzf=1000Hz,相位θ=0\theta = 0θ=0。数据的中心对应着时间t=0时刻,相当于信号触发同步的时间点位于示波器的中心。

下面给出生成数据的Python语句:

N = 1400
phase = 0
f = 1000
def ts2data(ts):timeall = ts * N / 100timedim = 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 bitreturn round((1+data) / 2 * (2**bit)) / (2 **bit) * 2 - 1.
位数 有效值 相位 有效值误差
1 0.7821 0.0000 0.0750
2 0.7372 0.0000 0.0301
3 0.7189 0.0000 0.0118
4 0.7076 0.0000 0.0005
5 0.7075 0.0000 0.0004
6 0.7078 0.0000 0.0007
7 0.7072 0.0000 0.0001
8 0.7072 0.0000 0.0001
9 0.7069 0.0000 -0.0002
10 0.7072 0.0000 0.0001
11 0.7070 0.0000 -0.0001
12 0.7071 0.0000 0.0000
13 0.7071 0.0000 -0.0000
14 0.7071 0.0000 0.0000
15 0.7071 0.0000 -0.0000
16 0.7071 0.0000 0.0000
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=8bit = 8bit=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] * lenelif mode == 1:         # Triangle Windowwin = [1] * lenfor i in range(len):if i < len / 2:win[i] = i / ((len + 1) / 2)else: win[i] = (len-i) / ((len + 1) / 2)return winelif mode == 2:win = [1] * lenfor i in range(len):theta = (i - (len - 1) / 2) * pi * 2 / lenwin[i] = (1 + cos(theta)) / 2return winelif mode == 3:win = [1] * lenfor i in range(len):theta = (i - (len - 1) / 2) * pi * 2 / lenwin[i] = 0.54 + 0.46 * cos(theta)return winelse: return [1] * len
pltgif = PlotGIF()
tbdim = linspace(30e-6, 5000e-6, 200)
adim = []
pdim = []
errordim = []
for tb in tbdim:bit = 8t,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) / 2adim.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:\temp\1.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)增加参加窗口

▲ 增加三角窗口

▲ 使用三角窗对采集数据进行处理之后的幅值误差和相位

疑问: 为何三角窗口对于相位影响这么大?
猜测: 可能这个问题来自于对信号的量化误差所带来的。

▲ 将量化8bit去掉之后,使用三角窗口加权数据所得到的复制误差和相位

(2)增加Hanning窗口

▲ 对数据施加Hanning窗口对应的信号波形

▲ 使用Hanning窗口对数据加权计算的信号幅值误差和相位

(3)增加Hamming窗口

▲ 增加Hamming窗口数据的波形

▲ 使用Hamming窗口对数据处理所得到的幅度误差和相位

(4)对比三角窗口,Hanning窗口以及Hamming窗口对于幅度误差的影响

▲ 对比三种加窗方法测量幅值误差曲线

▲ 对比三种加窗方法测量幅值误差曲线(局部)

经过放大之后,我们看到上面的幅值误差曲线呈现了某种随机的情况。猜测这可能 与量化误差有关系,下面重新将上述加窗方法数据生成一边,只是将对信号的量化部分去除掉。绘制出三种加窗方法测量得到的误差曲线(局部)如下:

▲ 将量化误差去掉之后,三种加窗方法对应的幅值误差曲线

可以看到没有了量化误差,测量误差曲线与时基ts之间的关系变得有规律了,而不在呈现随机状态。

04结论


通过实验,可以看到在博文 使用数字示波器DS6104测量交流信号的幅值和相位 中测量信号幅值和相位的过程中,时基ts对于测量误差的影响所出现的现象并不能够完全有理论仿真来解释。特别是对于ts大于0.002s之后出现的情况,应该与示波器本身的采集原理有关系。

这个分析也证实了,在实际工程实践中,除了理论部分分析之外,还需要考虑到实际测量过程所出现的其它异样的情况。

对示波器测量正弦波幅值和相位仿真实验相关推荐

  1. 降压(Buck)变换电路设计原理、参数取值及MATLAB仿真实验

    创作不易,欢迎大家关注+收藏.仿真程序见底部,免费获取. 降压(Buck)变换电路是一种输出直流电压小于等于输入直流电压的单管非隔离直流变换电路.降压电路图如图1所示. Buck变换电路的两个工况如图 ...

  2. 使用数字示波器DS6104测量交流信号的幅值和相位

    01简介 使用普通的万用表测量交流信号的时候,通常会遇到 万用表的频率响应 的问题.使用可以联网的示波器可以获得它采集到的数据,进而可以计算出所测量的交流信号的有效值和相位. 这里通过实验来确定使用示 ...

  3. matlab复数的相位,复数的幅值和相位

    [i]); x[i]=x[i]*180/PI-90; printf("第%d次谐波的相位为为%f \\n", i , x[i]) ; } printf("第%d次谐波的幅 ...

  4. 总结示波器测量电源纹波

    一.什么叫纹波? 纹波(ripple)的定义是指在直流电压或电流中,叠加在直流稳定量上的交流分量. 它主要有以下害处:        1.1.容易在用电器上产生谐波,而谐波会产生更多的危害:      ...

  5. 傅里叶Fourier变换fft-python-scipy-幅值-辐角-相位(一)

    基础回顾 Fourier变换就是将周期信号沿正交基分解,而一组良好的正交基就是正弦/余弦函数,完备的正交基为 ej2πntT或ej2πnf0t\displaystyle e^{j\frac {2 \p ...

  6. 示波器测量红外遥控器晶振

    家里用的电视机或者数字接收机.DVD等都离不开红外遥控器,这些遥控器是我们生活娱乐中必不可少的工具, 遥控器难免因为外界条件而损坏,常见的故障为455晶振容易受外界振动等因素而损坏. 如下图所示是我翻 ...

  7. 为什么信号源输出仅过一个电阻后,示波器测量出的输出电压会随输入频率增大而减小?----浅谈传输线分布电容与示波器的电容对信号传输的一种常见影响

    文章目录 前言 一.问题引入 二.问题重现 三.问题分析 前言 今天在做19年国赛题<简易电路特性测试仪>的时候,发现一个很"神奇"的现象,就是信号源输出的交流信号仅经 ...

  8. 示波器测量的波形一直抖动怎么办

    不知道大家平时有没有留意,我们在利用数字示波器测量信号波形时,经常会发现有时候波形左右抖动的厉害,就像下面的这种,但是呢,有时波形又是正常的,这个到底是我们测量的波形信号质量问题还是我们示波器的问题呢 ...

  9. 万用表和示波器测量的区别?简单看完,让你少走弯路

    很多人对于万用表和示波器测量不同值的区别还不是很清楚,下面安泰维修专业从事仪器仪表维修工程师带大家了解一下关于万用表和示波器区别到底在哪里,让你少走弯路!有需要的朋友可以阅读全文! 示波器万用表是在测 ...

最新文章

  1. 4G EPS 中的 User Plane
  2. ITK:多相Chan和Vese稀疏场水平集分割
  3. SAP UI5 createBindingContext in local JSON model
  4. 一张图解释什么是遗传算法_遗传算法简介及代码详解
  5. 睡眠音频分割及识别问题(五)--YAMNet进一步分析
  6. pytorch LSTM_regression
  7. 【方案分享】2021美图美学营销方案.pdf(附下载链接)
  8. 优化:代码移动code motion
  9. HTML5:web socket 和 web worker
  10. 编写一个简单的widget
  11. php获取当前行,获取在PHP中执行当前函数的代码行和文件?
  12. 阿里云域名注册流程(图文)
  13. 威胁快报|Nexus Repository Manager 3新漏洞已被用于挖矿木马传播,建议用户尽快修复...
  14. java list下标_java8 stream根据下标分组
  15. 微博官方自助服务一键批量取消微博全部关注方法
  16. UI设计可供性解析:巧用隐藏的设计力提升用户体验
  17. 2023java面试看完这篇笔记薪资和offer稳了!
  18. 爬虫【1】打开网站,获取信息
  19. 铁甲小宝像车轮的是什么机器人_铁甲小宝中最神秘的人物,在剧中的地位是无人可以动摇的...
  20. 如何使用python装饰器_如何使用装饰器(瓶子.py)

热门文章

  1. HDU 1084 - What Is Your Grade?
  2. ReentrantLock和synchronized两种锁定机制
  3. 大规模web服务开发技能
  4. 为什么你应该深入Github
  5. 构造函数 原型对象 对象实例 图
  6. uni-app 页面数据无法渲染原因总结
  7. 0-1背包-分支限界
  8. vue点击其它区域隐藏
  9. solr4.5分组查询、统计功能介绍
  10. 留着肯定有用,让你脱胎成技术大神的JAVA开发技巧