您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页MATLAB程序

MATLAB程序

来源:华佗小知识
实验一 离散信号和系统

一 单位脉冲序列

clear all;clc; %清除函数和屏幕 x1n=zeros(1,11);

n=0:10;ns=5; %n为0到10之间的整数 for i=0:10 if i==ns

x1n(i+1)=1; else x1n(i+1)=0;

end %结束if语句 end %结束for语句

stem(n,x1n); %生成n,x1(n)的关系图形

二 单位阶跃序列 程序如下: clear all;clc; x2n=zeros(1,11); n=0:10;ns=3;

for i=0:10 %构成0到10之间的循环 if i-ns>=0

x2n(i+1)=1; else x2n(i+1)=0; end end

stem(n,x2n);

三(1) 生成复指数实部图形程序

clear all;clc; x3n=zeros(1,11); n=0:10;a=-0.2;w=0.5;

for i=0:10 %构成0到10之间的循环 if i>=0

x3n=exp((a+j*w)*n); end end

stem(n,real(x3n));

(2)生成复指数虚部图形程序

clear all;clc; x3n=zeros(1,11); n=0:10;a=-0.2;w=0.5; for i=0:10

if i>=0 %条件是i大于或等于0 x3n=exp((a+j*w)*n); end end

stem(n,imag(x3n));

四 差分方程的通用递推程序 程序如下:

a=[1,0.1,0.15,-0.225]; % a为滤波器传递函数的分母系数向量

b=[3,7,1]; %b为滤波器传递函数的分子系数向量 u=exp(0.1*[1:20]); %n的范围为由0递增到20

y=filter(b,a,u); %计算输入信号u的滤波输出y stem(y); %生成波形

实验二 时域离散信号的产生及时域处理

1.序列的相加和相乘

x1=[0,1,2,3,4,3,2,1,0];n1=[-2:6]; x2=[2,2,0,0,0,-2,-2];n2=[2:8];

n=[-2:8]; %求取新信号的时间起始及中止位置 xa1=zeros(1,11);

xa2=xa1;

for i=1:9 %for循环的条件

xa1(i)=x1(i); %把x1(i)的值赋给 xa1(i)

end for i=1:7

xa2(i+4)=x2(i);

end

ya=xa1+xa2; %两个序列逐点相加 yp=xa1.*xa2; %两个序列逐点相乘 subplot(4,1,1);stem(n,xa1,'.');

line([n(1),n(end)],[0,0]); %建立横坐标x轴 ylabel('xa1'); %给y轴命名 subplot(4,1,2);stem(n,xa2,'.');

line([n(1),n(end)],[0,0]);ylabel('xa2'); subplot(4,1,3);stem(n,ya,'.'); line([n(1),n(end)],[0,0]);ylabel('ya'); subplot(4,1,4);stem(n,yp,'.'); line([n(1),n(end)],[0,0]);ylabel('yp');

2.序列的移位和周期延拓运算

clear all;clc;

N=24;M=8;m=3;

n=0:N-1;

x1=0.8.^n; %生成指数序列 x2=stepseq(0,0,N-1)-stepseq(M,0,N-1); %形成矩形序列RM(n) xn=x1.*x2; xm=zeros(1,N);

for k=m+1:m+M

xm(k)=xn(k-m); %产生序列移位x(n-3) end;

xc=xn(mod(n,8)+1); %产生x(n)的周期延拓x((n))8

xcm=xn(mod(n-m,8)+1); %产生序列移位x(n-3)的周期延拓x((n-3))8 subplot(2,2,1);stem(n,xn,'.');ylabel('x(n)');title('x(n)的周期延拓'); subplot(2,2,2);stem(n,xm,'.');ylabel('x(n--m)');title('x(n)的循环移位'); subplot(2,2,3);stem(n,xc,'.');ylabel('x(mod(n,b))');

subplot(2,2,4);stem(n,xcm,'.');ylabel('x(mod((n-m),b))');

实验四 卷积计算

1.LTI连续系统的卷积计算 程序如下:

u=ones(1,10);

h=exp(-0.1*[1:15]); dt=0.5;

y=conv(u,h); %求u和h的卷积

t=dt*([1:length(y)]-1); %确定横坐标范围 stem(t,y,'.'); %画图

2.离散序列的卷积计算

计算下列卷积,并图示个序列及卷积结果。

(1) y1(n)=x1(n)*h1(n), x1(n)=0.9nR20(n),h1(n)=R10(n)。

(2) y2(n)=x2(n)*h2(n), x1(n)=0.9n-5R20(n-5),h1(n)=R10(n)。

程序如下:

n1=0:19;

x12=[(n1>=0&n1<20)]; %生成矩阵序列R20(n) x1=0.9.^n1;

x1n=x1.*x12; n11=0:9;

h1n=[(n11>=0&n11<10)]; %得到h1(n) h2n=h1n; n2=0:(19+5); x2n=zeros(1,25);

for i=1:20

x2n(i+5)=x1n(i); %由x1(n)得到x2(n) end

dt=1;

y1n=conv(x1n,h1n); %求x1(n)与h1(n)的卷积y1(n) t1=dt*([1:length(y1n)]-1); %建立横坐标轴t1 y2n=conv(x2n,h2n);

t2=dt*([1:length(y2n)]-1);

subplot(3,2,1);stem(n1,x1n,'.');ylabel('x1(n)'); subplot(3,2,2);stem(n2,x2n,'.');ylabel('x2(n)'); subplot(3,2,3);stem(n11,h1n,'.');ylabel('h1(n)'); subplot(3,2,4);stem(n11,h2n,'.');ylabel('h2(n)'); subplot(3,2,5);stem(t1,y1n,'.');ylabel('y1(n)'); subplot(3,2,6);stem(t2,y2n,'.');ylabel('y2(n)');

实验七 离散傅里叶变换(DFT)

实验目的

掌握基本序列的离散傅里叶变换的MATLAB计算;验证N 点DFT的物理意义。

实验内容:

1.基本序列的离散傅里叶变换计算 已知以下序列

复正弦序列 x1(n)ej8nRN(n)n)RN(n) n)RN(n) 余弦序列 x2(n)cos(正弦序列 x3(n)cos(88分别对N=8和N=16计算以上序列的N点DFT,并绘出幅频特性曲线。

程序如下:

N=15; n=0:N;

x1=exp((j*pi/8).*n); x2=[(n>=0)&(n<=N)]; x1n=x1.*x2;

x2n=cos((pi/8).*n).*x2; x3n=sin((pi/8).*n).*x2;

X1k=fft(x1n,16); %xx1n的16点DFT X2k=fft(x2n,16); X3k=fft(x3n,16);

subplot(3,3,1);stem(n,real(x1n),'.');

hold on; %实部与虚部在同一坐标上显示出 stem(n,imag(x1n));

subplot(3,3,2);stem(n,x2n,'.'); subplot(3,3,3);stem(n,x3n,'.');

subplot(3,3,4);stem(n,abs(X1k),'.'); %X1k幅度与n 的关系图 subplot(3,3,5);stem(n,abs(X2k),'.'); subplot(3,3,6);stem(n,abs(X3k),'.');

i=0:7;

x3=exp((j*pi/8).*i); x4=[(i>=0)&(i<=7)]; x1i=x3.*x4;

x2i=cos((pi/8).*i).*x4; x3i=sin((pi/8).*i).*x4; X1i=fft(x1i,8); X2i=fft(x2i,8); X3i=fft(x3i,8);

subplot(3,3,7);stem(i,abs(X1i),'.'); subplot(3,3,8);stem(i,abs(X2i),'.'); subplot(3,3,9);stem(i,abs(X3i),'.');

实验九 香农公式的分析

echo on;

pn0_db=[-20:0.1:30]; pn0=10.^(pn0_db./10);

capacity=3000*log2(1+pn0/3000); pause; %程序暂停,按回车键继续

clf;

semilogx(pn0,capacity); %用横轴刻度以10为底的常用对数,纵轴为线性刻度来做图 title('capacity vs. P/N0 in an AWGN Channel'); xlabel('P/N0');

ylabel('Capacity (Bits/second)');

2.编写程序绘出P/N0=25dB是得加性高斯白噪声信道容量与带宽W间的函数关系曲线。

程序如下:

echo on; pn0_db=25;

pn0=10.^(pn0_db./10); w=0:100000;

capacity=w.*log2(1+pn0./w); pause; clf

semilogx(w,capacity);

title('capacity vs. P/N0 in an AWGN Channel'); xlabel('P/N0');

ylabel('Capacity (Bits/second)');

实验十 双边带(DSB)调制

实验内容:

被调信号m(t)=u(t)- u(t-t0/3)-2[ u(t-t0/3)- u(t-2t0/3)],用m(t)调制载波c(t)=cos(2fct),得到的调制信号用u(t)表示,设to=0.15s,fc=250HZ。 范例:变成作出m(t),c(t) 和u(t)的图形。

echo on; t0=.15; ts=0.001;

fc=250;

fs=1/ts; t=[0:ts:t0];

%message signal

m=[ones(1,t0/(3*ts)),-2*ones(1,t0/(3*ts)),zeros(1,t0/(3*ts)+1)]; %得到函数m(t) c=cos(2*pi*fc.*t); % 载波函数c(t) u=m.*c;

U=fft(u); %对u(t) 进行傅里叶变换 M=fft(m); %对m(t)进行傅里叶变换

UU=abs(U); %得到u(t)的傅里叶变换结果幅度变换波形 MM=abs(M); %得到m(t)的傅里叶变换结果幅度变换波形

x=fftshift(UU); %把u(t)的傅里叶变换结果幅度变换波形移到中间 y=fftshift(MM); %把m(t)的傅里叶变换结果幅度变换波形移到中间 pause; clf;

subplot(3,2,1);

plot(t,m(1:length(t))); xlabel('Time');

title('The messega signal'); pause; subplot(3,2,2); plot(t,c(1:length(t))); xlabel('Time'); title('The carrier'); pause;

subplot(3,2,3);

plot(t,u(1:length(t))); xlabel('Time');

title('The modulated signal'); pause;

subplot(3,2,4);

plot(t,x(1:length(t))); xlabel('Time'); title('The a signal'); pause;

subplot(3,2,5); plot(t,y(1:length(t))); xlabel('Time');

title('The a signal');

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务