核数据处理课程设计--能谱谱数据分解方法研究程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%本次课程设计采用的谱数据为iaea-1995文件夹下iaearfnwﻩTSTSPEC

%里面的数据。首先来看看CALIB.ASC。READ_ME.TXT中说明了这个谱数据包含的部分峰的峰位与对应能量如下:

% Channel Energy(keV)

%ﻩ301122.06

% 1281 511.00

%ﻩ1661 661.66

% 2097834.84

%ﻩ2951 1173.24

% 3207 1274.54

%ﻩ3353 1332.50

%运行程序,其中参数选择为:选择傅里叶变换法平滑输入3,选择高斯滤波器输入2,然后A=1,FWHM=4,对称零面积法的参数是K=2,H=3,b=1寻出来

%的峰与READ_ME.TXT中说明的部分峰的峰位与对应能量数据相吻合。

clc;

clear;

[Filename,Pathname]=uigetfile('*.*','选择谱数据');

fid=fopen([Pathname Filename],'r')%fid为文件指针,r表示读操作

[array,count]=fscanf(fid,'%d',[1 inf]);%指定格式转换后返回给矩阵array,同时返回成功的读出的数据数量count,1表示读出一个元素到一个列向量,inf表示读到文件结束返回一个与文件数据元素相同的列向量

fclose(fid);

%%%%下面开始能谱平滑%%%%%%%

pinghuaxuanze=input('请选择平滑方法:\n输入1选择重心法平滑\n输入2选择多项式最小二乘移动平滑法\n输入3选择傅里叶变换法\n输入4选择小波变换:\n');

%************************重心法平滑****************************

if(pinghuaxuanze==1)

biaoji=1;

for i=1:count

array_z(i)=array(i);

end

w=input('input the widthof the filter window:'); %w表示w 点平滑公式

while mod(w,2)==0 %判断输入的数是否是奇数,不是则重新输入。

w=input('input oddnumber:');

end

m=floor(w/2);

for j=1:m

for i=1:count

if(i==1)

array_smooth(i)=0.5*(array_z(i)+array_z(i+1)); %能谱左边界做对称镜像处理

elseif(i>1&&i<(count-1))

array_smooth(i)=0.25*array_z(i-1)+0.5*array_z(i)+0.25*array_z(i+1);

else

array_smooth(i)=0.5*(array_z(count)+array_z(count-1)); %能谱右边界做对称镜像处理

end

end

fori=1:count %将平滑好的数据放回原数组,为下一次做好准备。

array_z(i)=array_smooth(i);

end

end

for i=1:count

a1(i)=array_z(i);

end

%***********************重心法平滑结束***************************

%***********************多项式最小二乘移动平滑法*****************

elseif(pinghuaxuanze==2)

biaoji=2;

w=input('inputthewidth ofthe filter window:');%w为窗口宽度

fwk= zeros(w,1); %存储滤波器系数,产生一个1行,w列的零矩阵;当求平滑之后谱的第i点数据时,先在原始数据第i点的左、右各取m个数据点;也就是形成一个共有w=2m+1个数据点的窗口;

for i=1:w

k=i-ceil(w/2); %调整,计算采用k=- m:m,窗口的中心点为ceil( w/2)点

fwk(i)=[1+(15/(w^2-4))*((w^2-1)/12-k^2)]/w;%2次或3次滤波器

%fwkz=2.5*(w^2-7)*((w^2-1)/12-k^2)-9*((w^2-1)*(3*w^2-7)/240-k^4); %4次或5次滤波器

%fwk(i)=(1+105/(4*(w^2-4)*(w^2-16))*fwkz)/w;

%fwk(i)=(1+(15*(3*w^2-7)/((w^2-4)*((w^2-5)^2+4)))*((w^2-1)*(3*w^2-7)/240-k^

%4))/w;%箱型滤波器

end

array_z = zeros(count+2*floor(w/2),1);%先将数据全部放在array_z数组中,并将边界做镜像处理,即增加2*floor(w/2)个数据

for i=1:count+2*floor(w/2)

if(i<=floor(w/2))

array_z(i)=array(-i+ceil(w/2));

elseif(i>count+floor(w/2))

array_z(i)=array(-(i-floor(w/2))+2*count+1);

相关文档
最新文档