我在Matlab工作。我有图形功能。我应该:
step = 0.05;
t = -5:step:10;
y1 = heaviside(abs(t)-6);
y2 = heaviside(-(abs(t)-2));
funct = 4*(y1+y2)+2;
plot(t,funct,'LineWidth',2),grid;
%coefficients of my Fourier series y
a = -4; b = 8; T = abs(a-b); L = T/2;
a0 = 8;
a(1) = 2*sqrt(3)/pi; b(1) = -2/pi;
a(2) = 6*sqrt(3)/pi; b(2) = 3/pi;
a(3) = 0; b(3) = - 8/(3*pi);
a(4) = -2*sqrt(3)/pi; b(4) = 3/(2*pi);
a(5) = -2*sqrt(3)/(5*pi); b(5) = -2/(5*pi);
n = -5:step:10;
sum = 0;
for k = 1:5
sum = sum + a(k)*cos(n*pi*k/L)+b(k)*sin(n*pi*k/L);
end
y = a0/2 + sum; %my series
%answer Fourier series y2
n = -5:step:10;
sum = 0;
for k = 1:5
sum = sum + (power(-1,k-1)/(2*k-1))*cos((2*k-1)*pi*n/4);
end
y2 = 4+(8/pi)*sum; %answer series
n = 1:length(t);
hold on
plot(n*step-5,y,'r-');
当我绘制y(我的重建函数)时,我有以下图片:
但是当我绘制y2(答案功能)时,我有很好的结果:
第一个图形看起来在重建信号时只使用一个傅立叶分量。
为什么我的解决方案会获得如此糟糕的结果?
答案 0 :(得分:1)
<强>更新强>
我无法摆脱我的第一种方法错误的感觉,所以我在进一步思考。你的程序和图片完全正确!
不同之处在于,在第二个循环中k=1
导致周期长度为8且相位为0(即余弦从x=0
开始),这与下面的矩形函数非常匹配。
但是在第一个循环中,k=1
的周期长度略长(并且相位与0不同)。较长的周期长度以及添加每个余弦和正弦分量(而不仅仅是第二个循环中的奇数)
导致一个近似值,这个近似值不太明显地符合下面的矩形函数(但实际上它用这么少的系数确实尽可能好)。您需要使用大约15个而不是5个系数来获得与第二个循环类似的良好拟合。
旧有错误的调试方法:
我的第一个猜测是系数a
和b
的值是错误的,因为正确的函数是偶数,因此所有正弦振幅都应为零(为什么! )。
为了测试你的第一个估计循环是否正确,我从第二个循环中获取了系数
k = 1:5;
a = power(-1,k-1) ./ (2*k-1);
b = zeros(1,5);
并在第一个循环中使用它们而不是你的。结果仍然是错误的。 所以,要找到第二个错误,你需要比较线
sum = sum + a(k)*cos(n*pi*k/L)+b(k)*sin(n*pi*k/L);
和
sum = sum + a(k)*cos((2*k-1)*pi*n/4);
如果你想自己调试然后立即停止阅读,否则我的下一个提示是(2*k-1)
保证只有第1,第3,第5 ......余弦的振幅值不等于零(其中是矩形波的必要属性。)
答案 1 :(得分:1)
@Hartmut Pfitzinger,谢谢你的回答。我找到另一种方法来解决我的问题:我考虑了(-4,8)间隔的功能,这并不奇怪,甚至没有。但我意识到我可以考虑(-2,6)间隔的功能,它会是均匀的。所以我只是在间隔(-2,6)上将信号扩展到傅里叶级数,找到仅用于cos的系数,并在第二次循环时获得近似值。