目录
目录
1. 问题
2.注意
几个细节
1. 求傅里叶级数,注意k等于0时,积分表达式可能不一样。
2. 当X(k)区分k=0和不等于0时,
3. 若X(k)matlab求不出显含值,如e^(2),可用vpa求其近似值。
4.符号变量求和,用symsum
3.代码
% function signal_hw1_7
%% 求傅里叶级数,验证Parseval定理
clc;close all;clear;
syms t T k
T=2;
w=2*pi/T;
x(t)=sqrt((1-t.^2))
X=1/T*int(x*exp(-1i*k*w*t),t,-T/2,T/2)
X0=1/T*int(x,t,-T/2,T/2)
% 时域功率
power_x=int(1/T*abs(x).^2,t,-T/2,T/2)
for m=1:10
% 频域能量
% X的模,而非直接X
% 对符合变量求和 syms
% 得不到显示表达,用vpa得近似数值
power_X(m)=vpa( 2*symsum(X*conj(X),k,1,100*m) + X0^2);
% 频域与时域能量差
error(m)=power_x-power_X(m);
end
power_X(m)
subplot(2,1,1)
plot(100*[1:m],power_X)
hold on
plot(100*[1,m],[power_x,power_x])
xlabel('k')
ylabel('x/X')
legend('power_X','power_x','interpreter','latex')
subplot(2,1,2)
plot(100*[1:m],error)
xlabel('k')
ylabel('error')
结果:
x(t) =
(1 - t^2)^(1/2)
X =
besselj(1, pi*k)/(2*k)
X0 =
pi/4
power_x =
2/3
ans =
0.66666664136571330522750571298223