我正在尝试使用 MATLAB 计算波形的傅立叶系数。可以使用以下公式计算系数:
T 被选为 1,这使得 omega = 2pi。
但是我在执行积分时遇到问题。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