基于VC++的动态信号分析系统的设计方案
用上极其方便。
3.2 主要处理算法
3.2.1 FFT
频谱分析是数字信号处理技术的一个非常重要的手段,以便能清楚的看到某波形的频谱分布情况.而要对一个输入信号源作频谱分析,将其由时域信号转变为频域信号,就必然要用到傅里叶分析。快速傅里叶变换(Fast Fourier Transform,FFT)的迅速发展,使数字频谱分析取得了突破性的进展。FFT的算法种类较多,而且选择使用的方式也各不一样,本文选用时间抽选奇偶分解快速离散傅里叶变换。
基2型FFT算法的步骤如下:
(1)将原始序列按下标的奇、偶性质不断分解,一直由一个N 项序列分解为N 个单项重排序列;
(2)计算N 个单项序列的DFT.此时,N = 1,而0 n N - 1,所以,n = k = 0,于是:
即单项序列的DFT就是其自身,这样就求得了N 个单项重排序列的DFT;
(3)对N 个单项重排子序列的DFT两两合成,最终得到一个N 项序列的DFT,这就是原始序列的DFT.
根据上面的指导思想,就可编制FFT计算程序。
在进行FFT时,按照“蝴蝶图”所描述的计算方法对输入的时域序列按奇偶分解后的序列排序而输出的频域序列仍是按自然顺序排列的。此方法无须中间存储单元,但需要倒一次序.
下面代码用于完成对原始采样时域序列的快速傅里叶变换,A,M 分别表示指向原始采样数据数组的指针和序列长度的2的整数次幂:
1 kHz 矩形波频谱图,包括实谱、虚谱、幅值谱、相位谱如图4所示。
3.2.2 相关性分析
在信号分析中,相关性是一个非常重要的概念,它表达了两个信号(或一个信号不同时刻)之间的线性相关程度。
相关函数及其离散化数据计算公式为:
式中:N 为采样点数;Δt 为采样间隔;n 为时间序列;r为时延序列(时间位移数)。
自相关分析算法:
(1)标准方法
根据式(3)直接计算采样数据之间的平均乘积,然后以此作为自相关函数估计。本次即采用该方法设计算法;
(2)间接方法
该方法得到的不是通常的自相关函数,是“循环”相关函数。该方法通过在原数据补0后经FFT,计算其自功率谱后做IFFT,取前半部分而得到其自相关函数。
互相关函数及其离散化数据计算公式为:
互相关分析算法:
(1)标准方法
根据式(5)直接计算采样数据之间的平均乘积,然后以此作为互相关函数估计。本次即采用该方法设计算法;
(2)间接方法
该方法同FFT,计算其互功率谱后做IFFT,取前半部分而得到其互相关函数。
两个不同频率的正弦波信号的相关信号如图5 所示,因为频率不同,所以不相关,其波形接近值恒为零的直线。
3.2.3 包络线分析
信号的包络通常有3种提取方法:Hilbert幅值解调法、检波-滤波法和高通绝对值解调法。
Hilbert法解调出的包络是对信号绝对值的包络,其解调幅值代表真实包络,且在ARM系统中,Hilbert变换可以方便地借助FFT来实现,所以,本文采用Hilbert变换法提取信号的包络。
具体的步骤如下:
(1)对x(t) 做FFT,得X(k),k = 0,1,2,-,N - 1,注意k = N 2,-,N - 1 对应负频率;
(2)Z(k) 的取值:
(3)对Z(k) 做逆FFT,即得到x(n) 的解析信号z(n) ;
(4)| z(n)|即为 x(n)的包络。
通过以上分析编程实现了对信号的包络解调。
图6 所示为一调制波波形,对其进行包络分析,结果如图7所示。
4 闪屏现象及其解决方案
VC 中基于MFC 编写的程序中,窗口的移动缩放、鼠标点击等操作都会引起窗口重绘.本应用程序中使用绘图方式输出采集数据、信号波形图、频谱图等,绘制比较复杂,也比较消耗CPU时间,因此频繁的重绘会引起画面闪烁,影响信号动态显示分析效果,为此这里采用了双缓存技术,解决闪屏问题。
双缓存技术就是先在内存中准备一块区域,把要显示的位图都加载到内存中,然后调用BitBlt函数,把内存设备复制到显示设备上,这个过程比较简单,就是将图面的每个像素一次复制到输出设备,不需消耗太多的时间,这样就可以防止闪屏,改善显示效果。
双缓冲绘图主要代码如下:
5 系统测试分析
为验证系统的正确性和可靠性,产生如下信号:
取分析长度(时间块)T = 10 s,从式中可以看出有4种频率
分量,分别为1 Hz、6 Hz、9 Hz、20 Hz,取采样间隔为0.01 s,绘制其时域波形图及频谱图分别如图8和图9所示。
通过FFT后的数据,发现频谱幅值在各频率点处的大小(图中未标注)分别为500、1 000、1 000、500,经过计算,符合时域中信号幅值分别为1、2、2、1,并且通过FFT,成功分离出了原始信号中4 种频率分量:1 Hz、6 Hz、9 Hz、20 Hz,这也验证了FFT 算法的频率分辨能力。
6 结论
针对目前动态信号测试分析系统的现状,以Windows XP系统为开发平台,采用面向对象的编程技术和VC++为开发工具,本文提出了一套基于VC++的动态信号分析系统的设计方案。方案可
VC++动态信 相关文章:
- 电源设计小贴士 1:为您的电源选择正确的工作频率(12-25)
- 用于电压或电流调节的新调节器架构(07-19)
- 超低静态电流电源管理IC延长便携应用工作时间(04-14)
- 电源设计小贴士 2:驾驭噪声电源(01-01)
- 负载点降压稳压器及其稳定性检查方法(07-19)
- 电源设计小贴士 3:阻尼输入滤波器(第一部分)(01-16)