MATLAB中离散双傅立叶级数的问题

时间:2018-06-14 17:02:50

标签: matlab fft curve-fitting least-squares

我尝试在MATLAB中编写的离散双傅里叶级数的公式是:

enter image description here

三角和(傅里叶振幅)前面的系数是我试图通过上面看到的双傅里叶级数从数据拟合中提取的系数。使用我当前的代码,原始函数不会被重建,因此我的系数不正确。我不确定这是否具有任何重要性或洞察力,但A系数的第二项(Akn(1)))比任何其他系数大13个数量级。

我们将非常感谢您对我的计划的任何建议,修改或评论。

%data = csvread('digitized_plot_data.csv',1);
%xdata = data(:,1);
%ydata = data(:,2);
%x0 = xdata(1);
lambda = 20; %km
tau = 20; %s
vs = 7.6; %k/s (velocity of CHAMP satellite) 
L = 4; %S 

% Number of terms to use:
N = 100;

% set up matrices:
M = zeros(length(xdata),1+2*N);
M(:,1) = 1;
for k=1:N
    for n=1:N %error using *, inner matrix dimensions must agree...
        M(:,2*n) = cos(2*pi/lambda*k*vs*xdata).*cos(2*pi/tau*n*xdata);
        M(:,2*n+1) = sin(2*pi/lambda*k*vs*xdata).*sin(2*pi/tau*n*xdata);
    end
end

C = M\ydata;

%least squares coefficients:
A0 = C(1);
Akn = C(2:2:end);
Bkn = C(3:2:end);

% reconstruct original function values (verification check):
y = A0;
for k=1:length(Akn)
    y = y + Akn(k)*cos(2*pi/lambda*k*vs*xdata).*cos(2*pi/tau*n*xdata) + Bkn(k)*sin(2*pi/lambda*k*vs*xdata).*sin(2*pi/tau*n*xdata);
end


% plotting
hold on
plot(xdata,ydata,'ko')
plot(xdata,yk,'b--')
legend('Data','Least Squares','location','northeast')
xlabel('Centered Time Event [s]'); ylabel('J[\muA/m^2]'); title('Single FAC Event (50 Hz)')

0 个答案:

没有答案