MATLAB信号处理例题
- 格式:doc
- 大小:219.50 KB
- 文档页数:17
◆例1设方波的数学模型为:
]5sin 513sin 31[sin 4)(000 t t t E t f T ,基频: T
20
用MATLAB 软件完成该方波的合成设计
◆ MATLAB 源程序
t=-10:0.1:10; %设定一个数组有201个点,方波周期为20
e=5;w=pi/10; %设定方波幅值为5,w 代表w0
m=-5*sign(t); %给定幅值为5的方波函数
y1=(-4*e/pi)*sin(w*t); %计算1次谐波
y3=(-4*e/pi)*(sin(w*t)+sin(3*w*t)/3); %计算3次谐波
y5=(-4*e/pi)*(sin(w*t)+sin(3*w*t)/3+sin(5*w*t)/5); %计算5次谐波
plot(t,y1,'y');hold; grid; %用黄色点线画出1次谐波及网格线,并在同一张图上画其余曲线
plot(t,y3,'g'); %用绿色点线画出3次谐波
plot(t,y5,'b'); %用蓝色点线画出5次谐波
plot(t,m,'-k'); %用黑色实线画方波
title('方波合成');xlabel('t');ylabel('f(t)'); %为图形加上标题
n=50; %合成任意次方波,n 决定方波的合成次数,在此给定50
yn=0; %设置初始值
for i=1:n
yn=yn+(-4*e/pi)*(1/(2*i-1))*sin((2*i-1)*w*t);
end; %计算n 次谐波合成
plot(t,yn,'r') %用红色实线画出n 次谐波合成
◆ 从图中我们可以看到Gibbs 现象。在函数的间断点附近,增加傅里叶级数的展开次数,虽然可以使其间断点附近的微小振动的周期变小,但振幅却不能变小。此现象在控制系统表现为:当求控制系统对阶跃函数的响应时,超调量总是存在的。
◆例2(P110)MATLAB中函数FFT应用举例。
%MATLAB中函数FFT应用举例
t=0:0.001:0.6;
x=sin(2*pi*50*t)+sin(2*pi*120*t);
y=x+2*randn(size(t))
subplot(2,1,1)
plot(y(1:50))
xlable(‘时间轴t’)
ylable(‘信号值f(t)’)
title(‘正弦波+随即噪声’,’FontSize’,10)
y=fft(y,512);
f=1000*(0:256)/512;
subplot(2,1,2)
plot(f,Y(1:257))
set(gca,’Xtick’,[0,50,100,150,200,250,300,350,400,450,500])
set(gca,’XtickLabel’,’0|50|100|150|200|250|300|350|400|450|500|’) xlabel(‘频率轴\omega’)
ylabel(‘频谱幅值F(\omega)’)
title(‘信号频谱’,’FontSize’,10)
◆例3
例 3.8.3 有一二阶系统,阻尼比 =0.47,固有频率500 n Hz ,采样间隔
0004.0 t s,采样点数N =256。
试计算理论幅频特性与由系统阶跃响应计算出的幅频特性数据值,并画出两个计算结果的幅频特性曲线。
%example 3.8.3 MA TLAB PROGRAM
N=256;
dt=0.0004
wn=500;
seta=0.47;
dw=2*pi/(N*dt);
a=wn^2;
b=[1,2*seta*wn,a];
t=[0:dt:(N-1)*dt];
c=step(a,b,t);
w=[0:dw:(N-1)*dw];
[mag,phase]=bode(a,b,w);
ycw=fft(c);
Re=real(ycw);
Im=imag(ycw);
for i=1:N
Rw(i,1)=1-Im(i,1)*(i-1)*dw*dt;
Iw(i,1)=Re(i,1)*(i-1)*dw*dt;
end
ffw=Rw+Iw*sqrt(-1);
Aw=abs(ffw)
semilogx(w,20*log10(mag),'r-')
axis([100,10000,-30,10])
text(600,12,'幅频特性')
hold on
semilogx(w,20*log10(Aw))
axis([100,10000,-30,10])
grid on
◆例4
例6.2.4 用MATLAB 中的函数XCORR 求出下列两个周期信号的互相关函数,式中的f=10Hz 。
),2sin()(ft t x )902sin(5.0)( ft t y
%例6.2.4 中计算两个周期信号互相关函数的MA TLAB 程序
N=500;
Fs=500;
n=0:N-1;
t=n/Fs;
Lag=200;
x=sin(2*pi*10*t);
y=0.5*sin(2*pi*10*t+90*pi/180);
[c,lags]=xcorr(x,y,Lag,'unbiased');
subplot(2,1,1)
plot(t,x,'r')
hold on
plot(t,y,'b')
xlabel('t');ylabel('x(t)y(t)');
title('原周期信号')
grid
hold off
subplot(2,1,2);
plot(lags/Fs,c,'k');