《MATLAB语言及应用》期末大作业
题目
1.数组的创建和访问(20分,每小题2分):
1)利用randn函数生成均值为1,方差为4的5*5矩阵A;
2)将矩阵A按列拉长得到矩阵B;
3)提取矩阵A的第2行、第3行、第2列和第4列元素组成2*2的矩阵C;
4)寻找矩阵A中大于0的元素;]
5)求矩阵A的转置矩阵D;
6)对矩阵A进行上下对称交换后进行左右对称交换得到矩阵E;
7)删除矩阵A的第2列和第4列得到矩阵F;
8)求矩阵A的特政值和特征向量;
9)求矩阵A的每一列的和值;
10)求矩阵A的每一列的平均值;
程序代码:
clear;
clc;
A=1+sqrt(4)*randn(5) %生成均值为1,方差为4的5*5矩阵A;
B=A(:) %将矩阵A按列拉长得到矩阵B;
C=A([2 3],[2 4]) %提取矩阵A的第2行、第3行、第2列和第4列元素组
成2*2的矩阵C;
n=find(A>0) %寻找矩阵A中大于0的元素;
x=A(n)
D=A' %求矩阵A的转置矩阵D;
E1=flipud(A); %对矩阵A进行上下对称交换后进行左右对称交换得到矩
阵E;
E=fliplr(E1)
F=A(:,[1 3 5]) %删除矩阵A的第2列和第4列得到矩阵F;
[Av,Ad]=eig(A) %求矩阵A的特征值和特征向量;
S=sum(A,1) %求矩阵A的每一列的和值;
Avg=S/5 %求矩阵A的每一列的平均值;
运行结果:
A =
2.3333 2.1171 0.8568 2.1971 -0.7526
-1.7853 0.4453 -3.8292 1.2944 0.4690
-1.6011 -1.5874 -0.3887 0.7971 0.3448
-0.2100 -0.7769 -1.7828 -4.2700 -1.3165
-1.9771 -0.9730 1.6593 1.0561 2.1601
B =
2.3333
-1.7853
-1.6011
-0.2100
-1.9771
2.1171
0.4453
-1.5874
-0.7769
-0.9730
0.8568
-3.8292
-0.3887
-1.7828
1.6593
2.1971
1.2944
0.7971
-4.2700
1.0561
-0.7526
0.4690
0.3448
-1.3165
2.1601
C =
0.4453 1.2944
-1.5874 0.7971
n =
1
6
7
11
15
16
17
18
20
22
23
25
x =
2.3333
2.1171
0.4453
0.8568
1.6593
2.1971
1.2944
0.7971
1.0561
0.4690
0.3448
2.1601
D =
2.3333 -1.7853 -1.6011 -0.2100 -1.9771
2.1171 0.4453 -1.5874 -0.7769 -0.9730
0.8568 -3.8292 -0.3887 -1.7828 1.6593
2.1971 1.2944 0.7971 -4.2700 1.0561
-0.7526 0.4690 0.3448 -1.3165 2.1601
E =
2.1601 1.0561 1.6593 -0.9730 -1.9771
-1.3165 -4.2700 -1.7828 -0.7769 -0.2100
0.3448 0.7971 -0.3887 -1.5874 -1.6011
0.4690 1.2944 -3.8292 0.4453 -1.7853
-0.7526 2.1971 0.8568 2.1171 2.3333
F =
2.3333 0.8568 -0.7526
-1.7853 -3.8292 0.4690
-1.6011 -0.3887 0.3448
-0.2100 -1.7828 -1.3165
-1.9771 1.6593 2.1601
Av =
Columns 1 through 4
0.1004 + 0.2832i 0.1004 - 0.2832i 0.6302 -0.5216
-0.5969 -0.5969 -0.4811 0.0856
-0.4405 + 0.0006i -0.4405 - 0.0006i -0.3078 0.2120
0.2732 - 0.4899i 0.2732 + 0.4899i 0.0244 -0.1780
-0.0617 + 0.2024i -0.0617 - 0.2024i 0.5254 0.8025 Column 5
0.3903
-0.4959
0.0218
0.1929
-0.7511
Ad =
Columns 1 through 4
-2.6239 + 1.7544i 0 0 0
0 -2.6239 - 1.7544i 0 0
0 0 -0.2434 0
0 0 0 3.5455
0 0 0 0
Column 5
0 0 0 0 2.2257 S =
-3.2403 -0.7749 -3.4846 1.0747 0.9049 Avg =
-0.6481 -0.1550 -0.6969 0.2149 0.1810
2.符号计算(10分,每小题5分):
1) 求方程组20,0uy vz w y z w ++=++=关于,y z 的解; 2) 利用dsolve 求解偏微分方程,dx dy
y x dt dt
==-的解;
程序代码:
clc
[u,v,w] = solve('u*y^2 + v*z + w = 0','y + z + w = 0','u,v,w') [x y]=dsolve('Dx=y','Dy=-x')
运行结果: u =
(-v*z+y+z)/y^2 v =
w =
-y-z
x =
-C1*cos(t)+C2*sin(t)
y =
C1*sin(t)+C2*cos(t)
3.数据和函数的可视化(20分,每小题5分):
1)二维图形绘制:绘制方程
22
22
1
25
x y
a a
+=
-
表示的一组椭圆,其中
0.5:0.5:4.5
a=;
程序代码:
clc
clear
a=0.5:0.5:4.5;
t=-2*pi:0.1:2*pi;
N=length(a);
for i=1:1:N
x=a(i)*cos(t);
y=sqrt(25-a(i).^2).*sin(t); plot(x,y)
hold on
end
运行结果:
-5
-4
-3
-2
-1
1
2
3
4
5
2) 利用plotyy 指令在同一张图上绘制sin y x =和10x y =在[0,4]x ∈上的曲线; 程序代码:
clc clear x=0:0.01:4; y1=sin(x); y2=10.^x;
plotyy(x,y1,x,y2) %用双y 轴绘制二维图形
运行结果:
4
00.51 1.52 2.53 3.5
3) 用曲面图表示函数22z x y =+; 程序代码:
clc clear
[X,Y] = meshgrid(-2:0.05:2); %产生xy 平面上的网格数据 Z = X.^2 + Y.^2;
surf(X,Y,Z) %绘着色曲面图 hold off
运行结果:
4) 用stem 函数绘制对函数cos 4y t π
=的采样序列;
程序代码:
clc clear fs=25; Ts=1/fs; n=1:1:200;
yn=cos(pi*n*Ts/4);
stem(n,yn) %绘离散数据的火柴杆图
运行结果:
4. 设采样频率为Fs = 1000 Hz ,已知原始信号为)150π2sin(2)80π2sin(t t x ?+?=,由
于某一原因,原始信号被白噪声污染,实际获得的信号为))((?t size randn x x
+=,要求设计出一个FIR 滤波器恢复出原始信号。(20分)
程序代码:
clc clear
t=0:0.001:1; %采样周期为0.001s,即采样频率为1000Hz ;
x=sin(2*pi*80*t)+2*sin(2*pi*150*t);
figure(1) subplot(2,1,1)
plot(x(1:50)),title('原始信号'); %画出时域内的信号;
X=fft(x,512); %对x进行512点的傅里叶变换;
f=1000*(0:256)/512; %设置频率轴(横轴)坐标,1000为采样频率;
subplot(2,1,2)
plot(f,X(1:257)); %画出频域内的信号;
%产生受噪声污染的正弦波信号;
x1=sin(2*pi*80*t)+2*sin(2*pi*150*t)+randn(size(t));
figure(2)
subplot(2,1,1)
plot(x1(1:50)),title('污染信号'); %画出时域内的信号;
X=fft(x1,512); %对x进行512点的傅里叶变换;
f=1000*(0:256)/512; %设置频率轴(横轴)坐标,1000为采样频率;
subplot(2,1,2)
plot(f,X(1:257)); %画出频域内的信号;
%用fdatool设计两个带通滤波器,阶数为49阶;
h1=[0.0265532359480858,0.0209562797099352,0.00929121486842632,-0. 00587770342826843,-0.0208088979125023,-0.0315154753625393,-0.0348 377823829651,-0.0293655656278133,-0.0159416478127241,0.0024199751 2057424,0.0212144404649735,0.0355709493160248,0.0415366254746914, 0.0371753238141537,0.0231728963553906,0.00276318355463445,-0.0190 315302461386,-0.0366643443703651,-0.0455069243907929,-0.043088670 8199978,-0.0297939274460077,-0.00881843268871307,0.01461733784526 59,0.0345998033881187,0.0460511706769466,0.0460511706769466,0.034 5998033881187,0.0146173378452659,-0.00881843268871307,-0.02979392 74460077,-0.0430886708199978,-0.0455069243907929,-0.0366643443703 651,-0.0190315302461386,0.00276318355463445,0.0231728963553906,0. 0371753238141537,0.0415366254746914,0.0355709493160248,0.02121444 04649735,0.00241997512057424,-0.0159416478127241,-0.0293655656278 133,-0.0348377823829651,-0.0315154753625393,-0.0208088979125023,-0.00587770342826843,0.00929121486842632,0.0209562797099352,0.0265 532359480858];
h2=[-0.00940055027604103,-0.0222037862986326,-0.0171733368188143, 0.00408544391393662,0.0249114297330380,0.0265565365552902,0.00495 034828782082,-0.0236652232706547,-0.0348288714885712,-0.016806880 0121546,0.0175826549530029,0.0398818850517273,0.0296701062470675, -0.00679892720654607,-0.0399842970073223,-0.0411570966243744,-0.0 0741533236578107,0.0342939943075180,0.0488660223782063,0.02284667 08213091,-0.0231718402355909,-0.0509836338460445,-0.0368096083402 634,0.00818933453410864,0.0467752367258072,0.0467752367258072,0.0 0818933453410864,-0.0368096083402634,-0.0509836338460445,-0.02317 184********,0.0228466708213091,0.0488660223782063,0.0342939943075 180,-0.00741533236578107,-0.0411570966243744,-0.0399842970073223,
-0.00679892720654607,0.0296701062470675,0.0398818850517273,0.0175 826549530029,-0.0168068800121546,-0.0348288714885712,-0.023665223 2706547,0.00495034828782082,0.0265565365552902,0.0249114297330380 ,0.00408544391393662,-0.0171733368188143,-0.0222037862986326,-0.0 0940055027604103];
y1=conv(x1,h1); %卷积
y=-conv(y1,h2);
Y=fft(y,512);
figure(3)
subplot(2,1,1)
plot(y(50:100)),title('恢复信号');
subplot(2,1,2)
plot(f,Y(1:257))
运行结果:
原始信号
050100150200250300350400450500
污染信号
05101520253035404550
050100150200250300350400450500
恢复信号
050100150200250300350400450500
5. 人体心电图测量信号在测量的过程中经常会受到工业高频干扰,所以必须经过低通滤波处理后,才能判断心脏功能的有用信息。下面是一组实际心电图信号采样的样本x(n),其中存在高频干扰。试在实验中,通过MATLAB程序,以x(n)作为输入序列,滤出其中的干扰成分。x(n) = {-4,-2,0,-4,-6,-4,-2,-4,-6,-6,-4,-4,-6,-6,-2,6,12,8,0,-16,-38,-60,-84,-90,-66,-32,-4,-2,8,12,12,10,6,6,4,0,0,0,0,0,-2,-2,0,0,-2,-2,-2,-2,0}。(20分,每小题4分))
1)绘制原数据图形;
2)设计巴特沃斯低通滤波器并绘制出其幅频响应曲线;
3)用设计的滤波器对原数据进行滤波;绘制滤波后的数据图;
4)绘制原数据功率谱图;
5)绘制滤波后的数据功率谱图。
程序代码:
clc
clear
Xn=[-4,-2,0,-4,-6,-4,-2,-4,-6,-6,-4,-4,-6,-6,-2,6,12,8,0,-16,-38, -60,-84,-90,-66,-32,-4,-2,8,12,12,10,6,6,4,0,0,0,0,0,-2,-2,0,0,-2 ,-2,-2,-2,0];
N=length(Xn);
n=1:1:N;
Xk=fft(Xn);
figure(1)
subplot(2,1,1),stem(n,Xn),title('原始信号')
subplot(2,1,2),plot(abs(Xk))
%巴特沃斯低通滤波器
%
[b,a]=butter(10,0.5,'low');
figure(2)
freqz(b,a);
%
Yn=filter(b,a,Xn); %滤波
Yk=fft(Yn);
figure(3)
subplot(2,1,1),stem(n,Yn),title('恢复信号');
subplot(2,1,2),plot(abs(Yk))
fs=5000;
nfft=1024;
window=boxcar(N);
figure(4)
periodogram(Xn,window,nfft,fs); %求Xn的数据功率谱图
figure(5)
periodogram(Yn,window,nfft,fs); %求Yn的数据功率谱图
运行结果:
05101520253035404550
0510152025
3035404550
图1. 原数据图形
00.10.2
0.30.40.50.60.70.80.91
Normalized Frequency (?π rad/sample)
P h a s e (d e g r e e s )
0.1
0.2
0.30.40.50.60.70.80.9
1
Normalized Frequency (?π rad/sample)
M a g n i t u d e (d B )
图2. 幅频响应曲线
05101520253035404550
051015
20253035404550
图3. 滤波后的数据图
00.5
1 1.5
2 2.5
Frequency (kHz)
P o w e r /f r e q u e n c y (d B /H z )
Periodogram Power Spectral Density Estimate
图4. 原数据功率谱图
00.5
1 1.5
2 2.5
Frequency (kHz)
P o w e r /f r e q u e n c y (d B /H z )
Periodogram Power Spectral Density Estimate
图5. 滤波后的数据功率谱图
6.已知x(n)=[2 1 0 1],计算如下表达式:(10分)
1) 计算()x n 的6点DFT 结果()X k ;
2) 已知()()36k Y k W X k =,求()()y n IDFT x n =????; 3) 已知()()Re W k X k =????,求()()w n IDFT X k =????; 4) 已知()()2Q k X k =,求()q n ; 5) 已知()z k =()2X k ,求()z n ; 程序代码:
clear clc N=6; n=0:1:N-1; xn=[2 1 0 1 ]; m=length(xn);
xn1=[xn zeros(1,N-m)]; k=0:1:N-1;
WN1=exp(-j*2*pi/N); nk=n'*k; WNnk1=WN1.^nk; Xk=xn1*WNnk1 %figure(1) %subplot(2,1,1)
%stem(n,xn1);
%subplot(2,1,2)
%stem(k,abs(Xk));
Yk=Xk.*exp(-j*2*pi*3*k/N)
%Yk=exp(-j*2*pi*3*k/N).*Xk
WN2=exp(j*2*pi/N);
WNnk2=WN2.^nk;
yn=Yk*WNnk2/N
Wk=real(Xk);
wn=Wk*WNnk2/N
Qk(1:N/2)=Xk(2*(1:N/2)-1);
Qk1=[Qk zeros(1,N-length(Qk))];
qn=Qk1*WNnk2/N
Zk=Xk.^2;
zn=Zk*WNnk2/N
运行结果:
Xk =
Columns 1 through 5
4.0000 1.5000 - 0.8660i 2.5000 - 0.8660i -0.0000 - 0.0000i 2.5000 + 0.8660i
Column 6
1.5000 + 0.8660i
Yk =
Columns 1 through 5
4.0000 -1.5000 + 0.8660i 2.5000 - 0.8660i 0.0000 + 0.0000i 2.5000 + 0.8660i
Column 6
-1.5000 - 0.8660i
yn =
Columns 1 through 5
1.0000 + 0.0000i 0.0000 - 0.0000i -0.0000 + 0.0000i
2.0000 - 0.0000i 1.0000 - 0.0000i
Column 6
-0.0000 + 0.0000i
wn =
Columns 1 through 5
2.0000 0.5000 + 0.0000i -0.0000 + 0.0000i 1.0000 - 0.0000i -0.0000 + 0.0000i
Column 6
0.5000 + 0.0000i
qn =
Columns 1 through 5
1.5000 + 0.0000i 0.6667 + 0.5774i 0.5000 - 0.0000i 0.6667 + 0.2887i -0.0000 + 0.0000i
Column 6
0.6667 - 0.8660i
zn =
Columns 1 through 5
5.0000 + 0.0000i 4.0000 - 0.0000i 1.0000 + 0.0000i 4.0000 + 0.0000i 2.0000 + 0.0000i
Column 6
0.0000 + 0.0000i