通信原理Matlab仿真
实验报告
学号:
姓名:
实验一
1、利用Matlab实现矩形信号串信号分解与合成
Matlab程序代码:
矩形信号串信号分解与合成函数rectexpd():
function rectexpd(T1,T0,m)
%矩形信号串信号分解与合成
%T1:矩信号区间为(-T1/2,T1/2)
%T0:矩形矩信信号串周期
%m:傅里叶级数展开项次数
t1=-T1/2:0.01:T1/2;t2=T1/2:0.01:(T0-T1/2);
t=[(t1-T0)';(t2-T0)';t1';t2';(t1+T0)'];
n1=length(t1);n2=length(t2); %根据周期矩形信号函数周期,计算点数
f=[ones(n1,1);zeros(n2,1);ones(n1,1);zeros(n2,1);ones(n1,1)]; %构造周期矩形信号串
y=zeros(m+1,length(t));y(m+1,:)=f';
figure(1);
plot(t,y(m+1,:)); %绘制周期矩形信号串
axis([-(T0+T1/2)-0.5,(T0+T1/2)+0.5,0,1.2]);
set(gca,'XTick',[-T0,-T1/2,T1/2,T0]);
set(gca,'XTickLabel',{'-T0','-T1/2','T1/2','T0'});
title('矩形信号串');grid on;
a=T1/T0;
pause; %绘制离散幅度谱
freq=[-20:1:20];mag=abs(a*sinc(a*freq));
stem(freq,mag);
x=a*ones(size(t));
for k=1:m %循环显示谐波叠加图形
pause;
x=x+2*a*sinc(a*k)*cos(2*pi*t*k/T0);
y(k,:)=x;
plot(t,y(m+1,:));hold on;
plot(t,y(k,:));hold off;grid on;
axis([-(T0+T1/2)-0.5,[T0+T1/2]+0.5,-0.5,1.5]);
title(strcat(num2str(k),'次谐波叠加'));
xlabel('t');end
pause;
plot(t,y(1:m+1,:));grid on;
axis([-T0/2,T0/2,-0.5,1.5]);
title('各次谐波叠加');xlabel('t');
在命令窗口调用rectexpd()函数:
T1=5;
T0=10;
m=5;
rectexpd(T1,T0,m)
Matlab仿真结果:
2、利用Matlab实现连续信号卷积运算
Matlab程序代码:
连续信号卷积运算的通用函数sconv():
function [f,k]=sconv(f1,f2,k1,k2,p)
f=conv(f1,f2);f=f*p;
k0=k1(1)+k2(1);
k3=length(f1)+length(f2)-2;
k=k0:p:k3*p;
subplot(2,2,1);
plot(k1,f1);
title('f1(t)');
xlabel('t');
ylabel('f1(t)');
subplot(2,2,2);
plot(k2,f2);title('f2(t)');
xlabel('t');
ylabel('f2(t)');
subplot(2,2,3);
plot(k,f);
title('f(t)=f1(t)*f2(t)');
xlabel('t');
ylabel('f(t)');
h=get(gca,'position');
h(3)=2.5*h(3);
set(gca,'position',h);
在命令窗口调用sconv()函数:
p=0.01;
k1=0:p:2;
f1=exp(-k1);
k2=0:p:3;
f2=ones(1,length(k2));
[f,k]=sconv(f1,f2,k1,k2,p)
Matlab仿真结果:
实验二
1、用Matlab模拟图形A律解码
Matlab程序代码:
建立函数ADecode()
function y=ADecode(code,n)
codesize=size(code);
cr_len=codesize(1);
cl_len=codesize(2);
ca=zeros(1,cl_len-1);
for i=1:cr_len
end
y=y/(2^(n-1));
A=87.6;
A1=1+log(A);
for j=1:length(y)
end
建立函数APCM()
function code=APCM(x,n)
xmax=max(abs(x));
x=x/xmax;
xlen=length(x);
y=zeros(1,xlen);
A=87.6;
A1=1+log(A);
for i=1:xlen
y(i)=(A*x(i))/A1;
y(i)=-(A*x1)/A1;
end
y1=y*(2^(n-1)-1);
y1=round(y1);
code=zeros(length(y1),n);
c2=zeros(1,n-1);
for i=1:length(y1)
y1(i)=(y1(i)-r)/2;
c2=fliplr(c2);
code(i,:)=[c1 c2];
end
在新函数中调用前两个函数
t=0:0.01:1;
x=sin(2*pi*t);
code=APCM(x,7);
y=ADecode(code,7);
subplot(2,1,1)
plot(t,x);
title('原函数的图形');
subplot(2,1,2)
plot(t,y);
title('解码后函数的图形');
Matlab仿真结果:
2、用Matlab模拟DSB调制及解调过程
Matlab程序代码:
close all;
clear all;
dt=0.001;%采样时间间隔
fm=1; %信源最高频率
fc=10; %载波中心频率
N=4096;
T=N*dt;
t=0:dt:T-dt;
mt=sqrt(2)*cos(2*pi*fm*t);%信源
s_dsb=mt.*cos(2*pi*fc*t); %DSB-SC双边带抑制载波调幅
B=2*fm;
figure(1);
subplot(311)
plot(t,s_dsb,'b-');
hold on; %画出DSB信号波形
plot(t,mt,'r--');%画出m(t)信号波形
title('DSB调制信号');
xlabel('t');
grid on;
%DSB demodulation
rt=s_dsb.*cos(2*pi*fc*t);
rt=rt-mean(rt);
[f,rf]=T2F(t,rt);
[t,rt]=lpf(f,rf,B);
subplot(312)
plot(t,rt,'k-');
hold on;
plot(t,mt/2,'r--');
title('相干解调后的信号波形与输入信号的比较');
xlabel('t');
grid on;
subplot(313)
[f,sf]=T2F(t,s_dsb); %求调制信号的频谱
psf=(abs(sf).^2)/T; %求调制信号的功率谱密度
plot(f,psf);
axis([-2*fc 2*fc 0 max(psf)]);
title('DSB信号功率谱');
xlabel('f');
grid on;
Matlab仿真结果:
实验三
1、用Matlab模拟双极性归零码
Matlab程序代码:
function y=drz(x)
t0=300;
x=[1 0 0 1 1 0 0 0 0 1 0 1];
t=0:1/t0:length(x);
for i=1:length(x);
end
y=[y,x(i)];M=max(y);m=min(y);
subplot(211)
plot(t,y);grid on;
axis([0,i,m-0.1,M+0.1]);
title('1 0 0 1 1 0 0 0 0 1 0 1 ');
Matlab仿真结果:
2、用Matlab产生2FSK信号
Matlab程序代码:
建立函数fskdigital()
function fskdigital(s,f1,f2)
t=0:2*pi/99:2*pi;
m1=[];c1=[];b1=[];
for n=1:length(s)
end
fsk=c1.*m1;
subplot(211);
plot(b1,'r')title('原始信号');
axis([0 100*length(s) -0.1 1.1]);
grid on;
subplot(212);
plot(fsk)title('2FSK信号');
grid on;
在命令窗口调用函数fskdigital()
>> s=[1 0 1 1 0 0 1 0];
f1=200;
f2=100;
fskdigital(s,f1,f2)
Matlab仿真结果:
3、用Matlab的simulink模块模拟三角波的分解与还原
模块图
仿真结果:
三角波原图
用矩形波近似的冲击函数
分解后的三角波
经低通还原的三角波下载本文