第十三讲 信号分析处理函数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十三讲 信号处理(Signal Processing)类函数
信号处理是虚拟仪器中一个重要的内容, 并且由软件来实现。 由于 LabWindows/CVI 提供许多常用的信 号处理函数,所以在程序设计时节约了程序员的大量时间和精力。LabWmdows/CVI 提供的信号函数包括以 下几类: •频域信号处理(Frequency Domain):包括快速傅里叶变换(FFT)、反快速傅里叶变 换(InvFFT)、 FHT、反 FHT (InvFHT)等。 •时域信号处理(Time Domain):包括卷积(Convolve〉、相关(Correlate)、积分 (Integrate)、微 分(Difforace)、反卷积(Deconvolve)等函数。 • IIR 数字滤波器(DR Digital Filters):包括三种不同的滤波器函数:分步滤波,先分配 IIR 滤波器类 型空间,然后计算滤波器的参数,最后实现对信号的滤波:一步滤波,对输入数据直接滤波;旧式滤波, 两步完成滤波,先得到滤波器系数然后滤波。 •F1R 数字滤波器(FIR Digital Filters):包括窗口法等方法构造低通、高通、带通、带阻滤波器。 •窗函数(Windows):包括 Triangular 窗、Hanning 窗、Hamming 窗、Blackman 窗、 Kaiser 窗等函数。
2)输出参数 Rxy[ ] double 型数组
通常,函数的返回值 status 是一个整型,当发生某种错误时,它返冋一个错误编码值。 说明:LabWmdows/CVI 高级分析函数库的头文件中定义了一套编码(int 类型)和对应的一套符号名称 (AnalysisLibErrType 类型)来表示函数调用中可能出现的所有错误。 如果定义函数返回值为整型,则函数返回对应的编码值,如果定义函数返回值为 AnalysisLibErrType 类 型,则返回符号名称。
(3)举例 1
本例的相关性演示仪用于演示两个正弦波信号的相关特性。示例中认为两正弦波都是有限时间信号, 即只在有限段时间呈正弦波形状,其余时刻都为零值。 (1)仪器面板的设计 相关性演示仪对应控件的主要属性设置如下: 控件类型 Numeric Numeric Numeric Numeric 名称 amp cycnum sampcyc phase
13.1 时域信号处理
对信号进行时域分析,可以得到它在时域的各种表征量,主要的分析方法有相关性分析、 卷积处理以 及对信号的其他一些处理。LabWindows/CVI 中提供了信号时域分析中常用的几种 处理方法的函数,主要包 括相关性分析函数 Correlation()、 卷积运箅函数 Convolve()、 解卷积 函数 Deconvolve ()、 积分运算函数 Integrate ()、微分运符函数 Difference ()等 8 个函数。 对于每一种信号处理方法,LabWindows/CVI 函数都是采取某一种定义进行计算。一般 来说,对绝大多 数情况,函数的计算结果都是适用的,但未必对实际中的每种情况都适合, 当出现特殊需要时,需要自己 编写合适的处理函数。
(4)举例 2 利用相关方法去除噪声并检测信号幅值和相位
1) 设计要求 ①产生带有噪声的正弦信号和一个标准信号; ②对上述两个信号进行相关处理,求出带有噪声的原始信号的幅值和相位; ③显示相关前后的效果图。 2)面板和控件属性设置 产生面板*.uir 文件,面板设置如图 13.3 所示,面板和控件的属性如表 13.2 所示。 13.2 面板和控件的属性设置表 面板和控件类型 Panel Graph Graph 名称 PANEL WAVEFORM WAVEFORM2
113
关函数的性质:Rxy(τ)=Ryx(-τ)
将Rxy[i ] = ∑ x[k ]y[k + i ]
k =0 n −1
n −1
转化为:Rxy[i ]∑ x[k − i ]y[k ] 式中: - ( n - 1) ≤ i ≤ m − 1
k =0
n −1
再做移位处理:Rxy[i ]∑ x[k + n - 1 - i ]y[k ] 式中: 0≤i≤n+m−2
k =0
最后的输出结果对应时间τ=0 时刻的值,即 Rxy[n-1]=Rxy(0),(0)。 对于周期性信号,可以用下面的 公式计算其相关性:
Rxy[i ] = ∑ x[k ]y[k + i ]
k =0
n −1
式中: 0 ≤i ≤ n-1
x 和 y 的采样点数为周期的整数倍,且 y 是 x 的 2 倍。 (1)Correlation () 函数原型 int status = Correlate (double x[], int n, double y[],int m, double rxy[]); (2)参数物理意义 1)输入参数 名称 x[ ] n y[ ] m 名称 3)返回值 名称 status 类型 int 类型 int double 型数组 int 类型 说明 序列 x 的点数 离散序列之二 序列 y 的点数 说明 离散序列 x 和 y 的离散互相关运算值 double 型数组 离散序列之一
式中,参数 x[]、y[]分别表示两输入数组,长度分别为 n、m,两数组相关性曲线数据储存在数组 rxy 中,其长度不小于 n+m-1。 当输入数组 x[]、y[]是同一数组时,函数做的是数组的自相关运箅。函数中,离散序列 x 和 y 表示有限时间 信号的釆样值,如图 13.1 所示。
13.1 有限时间信号的采样値序列 信号只在有限时间段内有值,因而对于周期信号,函数是不适用的,需要编写处理函数。 另外,由于编程语言的关系,数组没有负索引的定义,所以,公式中用了移位处理, 并且利用了互相
1.相关分析(Correlate)
相关函数的应用极为广泛,如信号除噪,隐含周期的检测、相关性检验以及信号时延长度的测量等方面。 相关公式:
Rxy[i ] = ∑ x[k + n − 1 − i ]y[k ]
k =0
m −1
y[Leabharlann Baiduj ] = 0 其中, x[ j ] = 0
若j < 0或j ≥ m 若j < 0 或j ≥ n
116
break; } return 0; } /*回调函数 Corr */ int CVICALLBACK Corr (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { double *Rxy; double Rxy2[400]; double number; int n=200,i; switch (event) { case EVENT_COMMIT: number=samples+samples2; Rxy =malloc (number*sizeof (double)); Correlate (wave, samples, wave2, samples2, Rxy); for (i=0; i<n; i++) { Rxy2[i]= Rxy[i]/n; } DeleteGraphPlot (panelHandle, PANEL_CORRGRAPH, -1, VAL_IMMEDIATE_DRAW); PlotY (panelHandle, PANEL_CORRGRAPH, Rxy2, n, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_BLUE); free (Rxy); break; } return 0; }
115
void *callbackData, int eventData1, int eventData2) { /*局部变量定义,波形 1 的参数*/ double amp; double sampcyc; double f; double phase; double cycnum; /*局部变量定义,波形 2 的参数*/ double amp2; double sampcyc2; double f2; double phase2; double cycnum2; switch (event) { case EVENT_COMMIT: /*产生波形 1 的离散序列*/ GetCtrlVal (panelHandle, PANEL_AMP, &amp); GetCtrlVal (panelHandle, PANEL_SAMPCYC, &sampcyc); f=1.0/sampcyc; GetCtrlVal (panelHandle, PANEL_CYCNUM, &cycnum); GetCtrlVal (panelHandle, PANEL_PHASE, &phase); samples=cycnum*sampcyc ; wave=malloc(samples*sizeof (double)); SineWave (samples, amp, f, &phase, wave); /*产生波形 1 的离散序列*/ GetCtrlVal (panelHandle, PANEL_AMP2, &amp2); GetCtrlVal (panelHandle, PANEL_SAMPCYC2, &sampcyc2); f2=1.0/sampcyc2; GetCtrlVal (panelHandle, PANEL_CYCNUM2, &cycnum2); GetCtrlVal (panelHandle, PANEL_PHASE2, &phase2); samples2=cycnum2*sampcyc2 ; wave2=malloc(samples2*sizeof (double)) ; SineWave (samples2, amp2, f2, &phase2, wave2); DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW); PlotY (panelHandle, PANEL_GRAPH, wave, samples, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED); PlotY (panelHandle, PANEL_GRAPH, wave2, samples2, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_DK_GREEN);
Generate Wave
产生波形 幅值设置 周期个数 点数每周期 相位 double double int double
Corr
相关分析 显示波形 显示相关波形
添加完控件及屈性设背后的仪器面板如图 13.2 所示。
图 13.2 相关性演示仪面板及运行结果 相应代码: /*定义全局变量*/ static int panelHandle; static void *wave; /*波形 1 的值序列*/ static void *wave2; /*波形 2 的值序列*/ static int samples; /*波形 1 的采样点数*/ static int samples2; /*波形 1 的采样点数*/ /*回调函数 GenerateWave */ int CVICALLBACK GenerateWave (int panel, int control, int event,
114
回调函数
功能 幅值设置 周期个数 每周期点数 相位
参数类型 double double int double
CommandButton Numeric Numeric Numeric Numeric Command Button Graph Graph
GENERWAVE amp 2 cycnum 2 sampcyc 2 phase 2 corr GRAPH CORRGRAPH
相关文档
最新文档