当前位置:文档之家› 数字信号平均模拟实验(10-5)

数字信号平均模拟实验(10-5)

1
近代物理实验补充教材
10.5 数字信号平均模拟实验
平均技术是微弱信号检测的常见手段之一。

它利用时域的取样和同步积累方法,恢复被噪声埋没的周期重复的微弱信号。

按照信号处理方式的不同,平均技术可以分为采用模拟电路的取样积分和采用计算机处理的数字信号平均两种方式。

采用取样平均方法的BOXCAR 积分器的教学实验已经在很多高校使用。

数字信号平均技术在许多专用的设备中(例如脉冲式核磁共振谱仪)中应用广泛,而相应的教学实验并不多见。

本实验采用C(C++)语言编程,进行数字信号的计算机仿真实验。

1 实验原理
噪声,指的是干扰测量信号的各种电扰动。

通常包括两类: A.系统内部热噪声;B.环境的杂散电波干扰。

噪声一般是随机的。

信号是有规律的,能够重复的,后续信号与早先信号是有关联的,可以用一个时间函数来描述它的规律性。

噪声和信号叠加在一起,会干扰信号,使信号失真。

信号取样平均技术可抑制噪声的干扰。

取样过程中的有用信号,一般来说是周期性重复的,经多次取样积累有加强的性质,对噪声来说具有减弱的趋势。

设信号与噪声混合表示为[1]:
)()()(t N t S t f +=
式中)(t S 为周期信号,)(t N 为噪声。

被测信号)(t f 是信号与噪声的合成。

实验中多点平均每隔T 秒全部取样一次,其中第k 点(全部取样点的任一点)的第i 次取样值为: )()()(T i t N T i t S T i t f k k k *++*+=*+
将此取样值与相同点的前)1(-i 次取样值作线性累加。

经过m 次的重复后,第k 点信号的积累值为:
∑=*+m
i k
T i t
f 1
)()=
∑=*+m
i k
T i t
S 1
)( +∑=*+m
i k T i t N 1
)(
其中噪声:
∑=*+m
i k
T i t
N 1
)(= )(t N m *
式中)(t N 为噪声的有效值。

对于周期信号来说,由于是在同步状态下取样,因此经过m 次积累为:
∑=*+m
i k
T i t
S 1
)( =)(T i S m **
经过m 次的重复后,信噪比为改善为:SNIR=m
2
对被测信号的各取样值相干累加后再作平均处理,其处理关系为:
∑=*+m
i k T i t f m 1
)(1) 记录其结果,可得到逐渐清晰的周期信号波形,信号的信噪比不断提高。

2 仿真实验设计
仿真实验的信号处理流程如图1,程序流程图2所示。

用户可用正弦信号、方波信号或正弦指数衰减信号进行实验。

噪声信号通过函数rand()
实现。

在实验程序中,lineto()函数来显示噪声与信号累加后的波形,并且能够实现不断的刷新,让用户能够实时观察信号累加的整个实验过程。

实验观察选择了方波信
号,初始信噪比为1:1,累加次数分别为1、4、64、1024的实验结果如图3所示。

由图可以看出,累加次数越多,信噪比的改善就越大。

图1 信号处理流程
图2 程序基本流程
是否
是是
图形界面初始化
信号累加和显示
结 束
选择波形,输入信号信噪比和总叠加次数n
叠加次数i=1 i=i+1
i<=n ? 是否
是是 开始?
累加1次后的信号波形
累加4次后的信号波形
累加64次后的信号波形
累加1024次后的信号波形
图3 数字信号平均的实验结果
3. 演示程序
表1 给出了信号为指数衰减波形和噪声单次叠加时的演示程序。

#include<math.h>
#include<graphics.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
double s[1000]; //原始信号
double n[1000]; //混合信号
void main(void) { //信号和噪声单次叠加时的演示程序
int N=630; //观察数据点数
int gdriver = DETECT, gmode, errorcode; //图形模式用的参数
int x, y, maxx; //maxx为图形模式下最大的
char abc[20];
randomize(); //噪声函数初始化
for(int i=0; i<N; i++ ) s[i]=-100*sin(i*3.14/180)*exp(-i/100.); //产生信号波形
initgraph(&gdriver, &gmode, "c:\\borlandc\\bgi"); //图形模式初始化
y = getmaxy() / 2;
int j=1; //累加次数
moveto(1, n[1] / j + y/2 ); //输出第一个数据点
for( i=1;i<N;i++) { // 输出该次累加信号的各个数据点
n[i]+=s[i]+rand()/150; //叠加,获得累加后的信号
lineto(i, n[i] / j+y/4); //将[i]规一化后,输出到屏幕(连线到该点)}
sprintf(abc,"scans: %d \n",j); //将累加次数转换为字符串
outtextxy(5,420,abc); //输出累加次数
getch(); // 等待按键
cleardevice(); // 清屏
// j=j+1; // 累加次数加1
} // end of main program.
3实验内容
1.分别产生随机噪声和指数衰减信号,观察并记录。

2.选择合适的初始信噪比,累加次数分别为1、4、64、1024,输出信号平均波形。

3.将初始信噪比减小/增大5倍, 累加次数为1024次时观察并输出信号平均波形。

4.* 产生方波形号,重复实验2
4思考题
1.什么样的信号适合于数字信号平均技术?
2.在累加次数为4的基础上再累加4次,与累加次数为1024的基础上再累加4的效果
3
有多大的差别?试分析原因。

3.总结数字信号平均的规律。

参考文献
1.陈佳圭,《微弱信号检测》,第四章,中央广播电视大学出版社,1987
#include<math.h>
#include<graphics.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
double s[1000];
double n[1000];
int main()
{
int N=1000;
int gdriver=DETECT,gmode,errorcode;
int i,j,x,y,maxy;
char abc[20];
int randomize();
for(i=0;i<N;i++) s[i]=-200*sin(i*3.14/180)*exp(-i/100.);
gdriver=6; //图形驱动器参数
gmode=1; //图形模式参数在IBM X31 上测试此参数显示为1024*768 256色
initgraph(&gdriver,&gmode,"");
y=getmaxy()/2;
j=1;
for (j=1;j<=1024;j++)
{ cleardevice();
moveto(1,n[1]/j+y/2);
for(i=1;i<=N;i++){
n[i]+=s[i]+rand()/150;
lineto(i,n[i]/j+y/4);
}
sprintf(abc,"scans:%d",j);
outtextxy(5,420,abc);
}
getch();
return 0;
4
}
5。

相关主题