MATLAB を使用して波形のフーリエ係数を計算しようとしています。係数は、次の式を使用して計算できます。
T は、オメガ = 2pi を与える 1 になるように選択されます。
ただし、積分の実行に問題があります。関数は、三角波 (sawtooth(t,0.5)
私が間違っていなければ を使用して生成できます) と方形波です。
次のコードで試しました(三角波の場合):
function [ a0,am,bm ] = test( numTerms )
b_m = zeros(1,numTerms);
w=2*pi;
for i = 1:numTerms
f1 = @(t) sawtooth(t,0.5).*cos(i*w*t);
f2 = @(t) sawtooth(t,0.5).*sin(i*w*t);
am(i) = 2*quad(f1,0,1);
bm(i) = 2*quad(f2,0,1);
end
end
ただし、必要な値に近づくことはできません。b_m 係数は三角波に対して与えられ、正の項から始まる m が奇数の場合、1/m^2 および -1/m^2 であると想定されます。
私にとっての主な問題は、MATLAB で積分がどのように機能するかをよく理解していないことと、選択したアプローチが機能するかどうかわからないことです。
編集:明確にするために、これは係数が決定されたときに関数を書き込もうとしている形式です:
fftを使用した試みは次のとおりです。
function [ a0,am,bm ] = test( numTerms )
T=2*pi;
w=1;
t = [0:0.1:2];
f = fft(sawtooth(t,0.5));
am = real(f);
bm = imag(f);
func = num2str(f(1));
for i = 1:numTerms
func = strcat(func,'+',num2str(am(i)),'*cos(',num2str(i*w),'*t)','+',num2str(bm(i)),'*sin(',num2str(i*w),'*t)');
end
y = inline(func);
plot(t,y(t));
end