为什么我的傅立叶系列无法正常工作?

时间:2018-04-23 23:34:11

标签: matlab signal-processing

为什么我的傅里叶不能正常工作?我哪里弄错了?我写的时域是否正确?我使用的信号方程是:

Fourier Series

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的结果是:

for Fourier length 3

和傅立叶级数10的结果:

for Fourier series length 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);

1 个答案:

答案 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

现在,当您绘制此图时,您将看到方形波形的近似值。求和的上限越大,近似值越好。