⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fsaxz.m

📁 信号实验常用的simulink模型和mfile,可直接在matlan下运行。
💻 M
字号:
%FSAXZ Fourier Series Expansion demo.


% Demo initialization ====================

if ~exist('SlideShowGUIFlag'), figNumber=0; end;

t = 0:.1:10;  y = sin(t);  s=(y>0)*0.91;

if cssinit(figNumber),
   plot(t,s),  xlabel('时间(秒)')
   ylabel('方波波形'),  axis([0 10 0 1]), grid
 

   str = str2mat( ...
      ' ', ...
      ' =======================================================', ...
      '      这是一个有关傅立叶级数的演示', ...
      ' =======================================================', ...
      '   图示方波是一个奇谐信号,由傅里叶级数可知,它是由无穷个', ...  
      ' 奇次谐波分量合成的,现在我们用图形的方式来表示它的合成。', ...
      '   我们只考察从 t=0 到 t=10s 这段时间内的信号。', ...
      ' ', ...
      '   请按下“开始”按钮。' ...
   );

   cssdisp(figNumber,str);                                      
   if figNumber,  return;  end
end

% Beginning of the demo ==================


plot(t,y),  xlabel('时间(秒)'),  ylabel('波形'),  grid
    

str = str2mat( ...
  ' ', ...
  '   让我们先画出基波分量。', ...
  ' ', ...
  '    y(t)=sin(t)' ...
);

cssdisp(figNumber,str);                                         
if csspause(figNumber),  return;  end;

y = sin(t) + sin(3*t)/3;
plot(t,y),  xlabel('时间(秒)'),  ylabel('波形'),  grid

str = str2mat( ...
  ' ', ...
  '   现在,将三次谐波加到基波之上,并画出结果,如图所示。', ...
  ' ', ...
  '    y(t) = sin(t) + sin(3*t)/3' ...
);

cssdisp(figNumber,str);                                           
if csspause(figNumber),  return; end;

y = sin(t) + sin(3*t)/3 + sin(5*t)/5 + sin(7*t)/7 + sin(9*t)/9;
plot(t,y),  xlabel('时间(秒)'),  ylabel('波形'),  grid

str = str2mat( ...
  ' ', ...
  '   再将一次、三次、五次、七次和九次谐波加在一起。', ...
  ' ', ...
  '    y = sin(t) + sin(3*t)/3 + sin(5*t)/5 + ',...
  '      sin(7*t)/7 + sin(9*t)/9' ... 
);

cssdisp(figNumber,str);                                       
if csspause(figNumber),  return;  end;

t = 0:.05:10;  y=0;
for k=1:2:19
	y = y + sin(k*t)/k;
end
plot(t,y),  xlabel('时间(秒)'),  ylabel('波形')
grid

str = str2mat ( ...
  ' ', ...
  '   最后,我们合并从基波到十九次谐波的各奇次谐波分量。', ...  
  ' ', ...
  '      10', ... 
  '    Y = ∑ sin((2k-1)*t))/(2k-1)', ...
  '      k=1' ...
);

cssdisp(figNumber,str);                                     
if csspause(figNumber),  return;  end;

t = 0:.02:3.14;
y = zeros(10,max(size(t)));  x = zeros(size(t));
for k=1:2:19
    x = x + sin(k*t)/k;
    y((k+1)/2,:) = x;
end

plot(t,y(1:2:9,:)'),  title('方波的组成: 吉布斯现象')
xlabel('时间(秒)'),  ylabel('波形');
set(gca,'XLim',[0 3.142])
grid

str = str2mat( ...
  ' ',...
  '   将上述波形分别画在一幅图中,可以看出它们逼近方波的过程。', ...
  ' ',...
  '   注意“吉布斯现象”。周期信号傅里叶级数在信号的连续点收', ...
  ' 于该信号,在不连续点收敛于信号左右极限的平均值。如果我们用', ...
  ' 周期信号傅里叶级数的部分和来近似周期信号,在不连续点附近将', ...
  ' 会出现起伏和超量。在实际中,如果应用这种近似,就应该选择足', ...
  ' 够大的 N,以保证这些起伏拥有的能量可以忽略。' ...
);

cssdisp(figNumber,str);
if csspause(figNumber),  return; end;

global FSH HC;
hh = gca;
ha = axes('pos',[0 0 1 1],'Visible','off');
axis([0 1 0 1]),  Nmax = 25;
tx(1) = text(.04,.7,'2','hor','right');
tx(2) = text(.04,.95,int2str(Nmax),'hor','right');
tx(3) = text(.04,.85,'项','horizontalalignment','right');
tx(4) = text(.04,.80,'数','horizontalalignment','right');
set(tx,'visible','off')
fig = gcf;
callbackStr = ['t=0:.02:3.14;x=zeros(size(t));' ...
	'global HC FSH;' ...
	'N = ceil(get(HC,''Value''));' ...
	'y = zeros(N,length(t));' ...
	'for k=1:2:(2*N-1);' ...
	'x = x+sin(k*t)/k; y((k+1)/2,:) = x;end,' ...
	'xd = 1:length(t); yd = (1:size(y,1))'';' ...
	'set(FSH,''xd'',xd,''yd'',yd,''zd'',y,''CData'',y),' ...
	'title([int2str(N) '' 项'']);'];
HC = uicontrol(fig,'Style','slider', ...
   'Min',2,'Max',Nmax,'Units','normalized', ...
   'Position',[0.05 0.70 0.03 0.25], ...
   	'Value',9,'CallBack',callbackStr,'visible','off');
set(fig,'currentaxes',hh);

surf(y);  axis ij

FSH = get(hh,'Children');

P = pink(64);
colormap(flipud(P(17:64,:)));
ylabel('级数项数'),  xlabel('波形')
title([int2str((k-1)/2) ' 项'])

set(HC,'visible','on');
set(tx,'visible','on');
set(fig,'CurrentAxes',hh);

str = str2mat( ...
  ' ', ...
  '   现在,将这种情况用一个三维图形表示出来。为观察级数逼近', ...  
  ' 方波的过程,你可以通过移动滚动条来改变部分和的数目。', ...
  ' ', ...
  '   上图表明了一个方波信号的傅立叶级数是如何收敛的。' ...
);

cssdisp(figNumber,str);
if csspause(figNumber)
   set(HC,'visible','off');
   set(tx,'visible','off'); return 
end

set(HC,'visible','off');
set(tx,'visible','off');

str = str2mat( ...
  ' ', ...
  '   单击 “重置” 重新开始 '...
  );

cssdisp(figNumber,str);
% End of the demo ========================                



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -