使用matlab對sinc函數進行最小二乘擬合仿真

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 該函數用於得到sinc函數偏移特定位置時的函數值,用於仿真 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%數據生成及圖像顯示部分
clc;close all;clear;
N1 = 100;
N2 = 100;
alpha = 1;
% delta1 = 0;
% delta2 = 0;
delta1 = 0.0002;
delta2 = 0.0001;
t=-3:0.01:3;
[n1,n2] =meshgrid(t);

x1 = -3:0.01:3;
x2 = -3:0.01:3;
syms k1 k2; 
r = alpha / (N1*N2) * sin(pi*(k1 + delta1)) .* sin(pi*(k2 + delta2)) ./ ( sin(pi / N1 *(k1 + delta1)) .* sin(pi / N2 *(k2 + delta2)) );

old = {k1, k2};
new = {n1 ,n2};
f = subs(r,old, new);
mesh(n1,n2,f);


%獲取間隔數據
disp(sprintf('偏移量delta1 = %f,   delta2 = %f 時,偏移數據爲:',delta1,delta2))
s = -3:1:3;
[x1,x2] = meshgrid(s);
old = {k1, k2};
new = {x1 ,x2};
ytmp = subs(r,old, new)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%數據仿真驗證部分


N1 = 100;
N2 = 100;

n2 = [-3:3, -3:3, -3:3, -3:3, -3:3, -3:3, -3:3];
n1 = [-3,-3,-3,-3,-3,-3,-3, -2,-2,-2,-2,-2,-2,-2, -1,-1,-1,-1,-1,-1,-1, 0,0,0,0,0,0,0, 1,1,1,1,1,1,1, 2,2,2,2,2,2,2, 3,3,3,3,3,3,3];

y = reshape(ytmp,1,49);
n = [n1;n2];
f = inline(' a(1) /(100*100) * sin(pi*(n(1,:) + a(2))) .* sin(pi*(n(2,:) + a(3))) ./ ( sin(pi / 100 *(n(1,:) + a(2))) .* sin(pi / 100 *(n(2,:) + a(3))) + eps )' ,'a','n');
[xx,res]=lsqcurvefit(f,[0.1,0.1,0.1],n,y); %最小二乘擬合求解參數
disp(sprintf('數據仿真-驗證結果'))
alpha_delta1_delta2 = xx
err = res

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章