为什么我的傅里叶不能正常工作?我哪里弄错了?我写的时域是否正确?我使用的信号方程是:
f = 5; %fixed signal frequency
fs = 100; %fixed sample frequency (100Hz)
A=1; %fixed amplitude (1)
l=1; % (sec) fixed signal length
k = app.FourierSerieslength.Value; %myFourier series length is 1 to 21
t = 0:1/fs:l-1/fs;
% y = A*sin(2*pi*f*t*k);
y = (4*A/pi)*1/k*sin(2*pi*f*t*k); %Fourier series for the square wave signal
plot(app.UIAxes,t,y);
傅立叶长度3的结果是:
和傅立叶级数10的结果:
长度10是否正确?
为什么我没有方波?
另一个问题是我使用这个傅立叶级数进行上/下采样而不改变时域视图?
这是我的上采样代码:
up = app.UpSamplingSlider.Value;
y_up = zeros(1,length(y)*4);
y_up(1:4:4*length(y)) = y;
y_up = up*y_up;
stem(app.UIAxes3,y_up);
答案 0 :(得分:1)
y = (4*A/pi)*1/k*sin(2*pi*f*t*k); %Fourier series for the square wave signal
不,这不是一个系列,它是一个正弦波。当k=10
时,这会减少到某个常数sin(pi*(0:99))
,它在任何地方都为零(达到数值精度)。每当您看到垂直轴有一个10E-14
乘数时,您可以相当确定它只是零到浮点精度。
要计算傅立叶级数,您需要在等式中包含大Σ符号:
y = zeros(size(t))
for k=1:2:21
y = y + (4*A/pi)*1/k*sin(2*pi*f*t*k);
end
现在,当您绘制此图时,您将看到方形波形的近似值。求和的上限越大,近似值越好。