上篇文章将向大家介绍频谱的概念,对傅里叶级数、傅里叶积分、傅里叶变换进行了数学的推导,并解释了它们各自的物理意义。推导过程见我的上一篇文章:频谱分析——频谱概念(傅里叶变换、级数、积分及物理意义)
如下图所示的方波表达式为:
傅里叶级数表示为:
其中
首先求傅里叶系数:
即
因此,得到的傅里叶级数的表达式为:
用MATLAB绘制一下傅里叶级数的曲线
先看看傅里叶级数40次谐波逐次叠加的结果的动态展示(偶次谐波为零,为方便展示,作图时忽略偶次谐波项)
左图是n次谐波的和,右图可以清晰直观地看出各次谐波叠加逼近原始方波的过程
接下来再看看傅里叶级数100次谐波逐次叠加的结果
1000次谐波叠加
10000次谐波叠加
将10000次谐波叠加的方波边缘处放大,发现有依然是有超调现象
这种现象称为吉布斯(Gibbs)现象
在时域描述一个不连续的信号时,要求信号有无穷的频率成分,但实际情况中不可能采样到无穷的频率成分,只能对一定频率范围的信号进行采样。
而对于方波这样具有跳跃间断点的信号,采样将会存在频率截断,频率截断会引起时域信号在不连续处产生“振铃效应”。吉布斯现象的产生有两个条件:(1) 对信号频谱的锐截止;(2) 原信号存在跳变点。
MATLAB代码如下:
clc,clearf = 2; %输入方波的频率A = 1; %输入方波的幅值tw = 1;%持续时间,单位:秒[t,y] = squareWave(f,A,tw);%设置傅里叶级数的系数a0 = A / 2;n = 100; %谐波次数sum = zeros(1 , length(t) );sum = sum + a0;% figure(2);% plot(t,y);% hold oneach_hm = zeros( n + 1 , 40000 );hm = 0 : n;for k = 1 : 2 : nAn = -( 2 * A / ( 2 * pi * k) ) * ( cos( k * pi ) - 1 );y1 = An * sin( 2 * pi * k * t * f );each_hm( k + 1 , : ) = y1;sum = sum + y1;each_hm( 1 , : ) = sum;figure(2);plot( t , sum );title([ 'Sum of the first ', num2str(k) , ' harmonics'])figure(3)title([ 'For the first ' , num2str(k) , ' harmonics'])plot3( t , zeros( 1 , 40000 ) , each_hm( 1 , : ) )grid onhold onplot3( t , k * ones( 1 , 40000 ) , each_hm( k + 1 , : ) )xlabel('t'); ylabel('Harmonic');pause(0.5)endpause(0.5)figure(2)plot(t , y , '--' , 'LineWidth' , 2 );hold onplot( t , sum ,'LineWidth',1);legend('Original Square Wave' , 'Fourier series approximation ')title(['Sum of the first ' , num2str(k) , ' harmonics'])
%%方波生成代码 squareWave函数function [t,y] = squareWave(freq,A,waveTime)tt = waveTime;%secf = freq; %hztp = 1 / f;fs = 20000 * f;n1 = tp*fs;t= 0 : 1 / fs : ( n1 - 1) / fs;y1 = zeros(1 , n1);y1(1 : n1 / 2) = A;n2 = tt * fsnw = tt / tp;t2=0 : 1 / fs : ( n2 - 1 ) / fs;y2 = zeros(1 , n2);y2 = repmat(y1 , 1 , nw);y = y2;t = t2;end
联系客服