通信系统仿真实验报告
姓名:郑智
班号:075131
学号:[1**********] 指导老师:王瑾
1. 设圆柱半径r=1.5,高h=3,求圆柱表面积和体积
程序:
r=1.5;
h=3;
s=pi*r*r*2+2*pi*r*h
a=pi*r*r*h
2. 求某自然数内的全部素数
程序:
n=input('enter n:');
j=1;
for i=1:n
if isprime(i)
x(j)=i;
j=j+1;
end
end
x
3. 输入3个数a 、b 、c ,要求按由小到大的顺序输出。
程序:
a=input('enter a:');
b=input('enter b:');
c=input('enter c:');
y = sort([a b c]);
disp(y);
4. 计算多项式y=x5-3x 4-8x 3+7x2+3x-5在[-4,5]区间的微分, 并作图.
程序:
x=linspace(-4,5,100);
p=[1 -3 -8 7 3 -5];
f=polyval(p,x);
differential=diff(f)./diff(x);
dx=x(2:length(x))
plot(dx,differential);
title(' 多项式方程的微分图'
);
5. 已知y=1-1/2+1/3-1/4+……-1/100,求y 的值。
程序:
n=1:100;
y=(-1).^(n-1)./n;
sum(y)
2-8 产生5阶随机方阵A ,其元素为[10,90]区间的随机整数,然后判断A 的元素是否能被3整除。
程序: %生成5阶随机方阵A 。
A=randi([10,90],5,5) % 判断A 的元素是否可以被3整除。
P=rem(A,3)==0%其中,rem(A,3)是矩阵A 的每个元素除以3的余数矩阵。此时,0被扩展为与A 同维数的零矩阵,P 是进行等于(==)比较的结果矩阵。
2-9 建立矩阵A ,然后找出大于4的元素的位置。
(1) 建立矩阵A 。
A=[4,-65,-54,0,6;56,0,67,-45,0]
(2) 找出大于4的元素的位置。
find(A>4)
% 建立矩阵A 。
A=[4,-65,-54,0,6;56,0,67,-45,0]
% 找出大于4的元素的位置。
find(A>4)
2-13 建立一个字符串向量,然后对该向量做如下处理:
(1) 取第1~5个字符组成的子字符串。
(2) 将字符串倒过来重新排列。
(3) 将字符串中的小写字母变成相应的大写字母,其余字符不变。
(4) 统计字符串中小写字母的个数。
a = 'TuRuJie'
a(1:5)
a(end:-1:1)
upper(a)
sum(a='a' )
5-1 在0≤x≤2 区间内,绘制曲线
y=2e-0.5xcos(4πx)
x=0:pi/100:2*pi;
y=2*exp(-0.5*x).*cos(4*pi*x);
plot(x,y);
5-5 采用图形保持,在同一坐标内绘制曲线y1=0.2e-0.5xcos(4πx) 和
y2=2e-0.5xcos(πx)。
x=0:pi/100:2*pi;
y1=0.2*exp(-0.5*x).*cos(4*pi*x);
plot(x,y1)
hold on
y2=2*exp(-0.5*x).*cos(pi*x);
plot(x,y2);
hold off
5-6 在同一坐标内,分别用不同线型和颜色绘制曲线y1=0.2e-0.5xcos(4πx) 和y2=2e-0.5xcos(πx),标记两曲线交叉点。
clear all ; %在同一坐标内,分别用不同线型和颜色绘制曲线y1=0.2e-0.5xcos(4πx) 和y2=2e-0.5xcos(πx) ,标记两曲线交叉点。
clc;
x=linspace(0,2*pi,1000);
y1=0.2*exp(-0.5.*x).*cos(4*pi*x);
y2=2*exp(-0.5.*x).*cos(pi*x);
k=find(abs(y1-y2)
x1=x(k);
y3=0.2*exp(-0.5.*x1).*cos(4*pi*x1);
plot(x,y1,x,y2,'r:',x1,y3, 'k.' );
5-13 分别以条形图、阶梯图、杆图和填充图形式绘制曲线y=2sin(x)。 x=0:pi/10:2*pi;
y=2*sin(x);
subplot(2,2,1);bar(x,y,'g' );
title('bar(x,y,''g'')');axis([0,7,-2,2]);
subplot(2,2,2);stairs(x,y,'b' );
title('stairs(x,y,''b'')');axis([0,7,-2,2]);
subplot(2,2,3);stem(x,y,'k' );
title('stem(x,y,''k'')');axis([0,7,-2,2]);
subplot(2,2,4);fill(x,y,'y' );
title('fill(x,y,''y'')');axis([0,7,-2,2]);
2.2设一个线性时不变系统的系统传递函数为H (f ) =j 2πf /(1+j 2πf ) ,通过Matlab 画出如下输入信号经过该系统时的输出信号波形及频谱。 (1)x (t ) =10sin 2πft
(2)x (t ) =10(sin2πft +sin 20πft +sin 40πft ) (3)x (t ) =⎨
clear;clc; T=1;
N_sample=128; dt=T/N_sample; t=0:dt:10*T-dt; f=5;
⎧10≤t
0其他⎩
y1=10*sin(2*pi*f*t);
y2=10*(sin(2*pi*f*t)+sin(20*pi*f*t)+sin(40*pi*f*t)); y3=[ones(1,N_sample),zeros(1,9*N_sample)];
[f1,sf1]=T2F(t,y1); [f2,sf2]=T2F(t,y2); [f3,sf3]=T2F(t,y3);
H1=1j*2*pi*f1./(1+1j*2*pi*f1); H2=1j*2*pi*f2./(1+1j*2*pi*f2); H3=1j*2*pi*f3./(1+1j*2*pi*f3); sf1=sf1.*H1; sf2=sf2.*H2; sf3=sf3.*H3;
[t1,y10]=F2T(f1,sf1); [t2,y20]=F2T(f2,sf2); [t3,y30]=F2T(f3,sf3);
figure(1) subplot(311) plot(t,y1); title(' 原始波形' ); subplot(312) plot(f1,sf1); title(' 频谱' ); subplot(313) plot(t1,y10); title(' 输出波形' );
figure(2) subplot(311) plot(t,y2);
title(' 原始波形' ); subplot(312) plot(f2,sf2); title(' 频谱' ); subplot(313) plot(t2,y20); title(' 输出波形' );
figure(3) subplot(311) plot(t,y3); title(' 原始波形' ); subplot(312) plot(f3,sf3); title(' 频谱' ); subplot(313) plot(t3,y30); title(' 输出波形' );
T2F 函数:
function [f,sf]=T2F(t,st) dt=t(2)-t(1); T=t(end); df=1/T; N=length(st);
f=-N/2*df:df:N/2*df-df; sf=fft(st);
sf=T/N*fftshift(sf);
F2T 函数:
function [t,st]=F2T(f,sf) df=f(2)-f(1);
Fmx=(f(end)-f(1)+df); dt=1/Fmx; N=length(sf); T=dt*N; t=0:dt:T-dt; sff=fftshift(sf); st=Fmx*ifft(sff);
原始波形
100
-1020
-2-80100
-10
012345频谱
678910
-60-40-200输出波形
20406080
[1**********]0
原始波形
500
-5020
-2-80500
-50
012345频谱
678910
-60-40-200输出波形
20406080
[1**********]0
原始波形
10.5
010
-1-8010
-1
012345频谱
678910
-60-40-200输出波形
20406080
[1**********]0
2.3设输入信号为s (t ) =g (t ) cos 20πt ,其中g (t ) =⎨
⎧10≤t
,带通系统响应幅度谱
0其他⎩
⎧-1
⎪
H (f ) =⎨1
⎪0⎩
f +≤5f -10≤5其他
,其相位为线性相位φ(f ) =4πf ,即
H (f ) =H (f ) e -j φ(f ) 通过Matlab 画出信号波形。 (1)用等效基带方式。 (2)用直接卷积方式。
(3)用频域相乘方式,再取傅立叶反变换方式。 (4)画出输出信号的幅度谱。
(5)求输出信号的功率(理论值与Matlab 计算对比)。 改变带通系统的宽带,观察输出信号波形的变化。
clear all ; clc; dt=0.01;
t=0:dt:5-dt;
gt=[ones(1,1/dt),zeros(1,4/dt)]; s1=gt.*cos(20*pi*t);
[f1 s1f]=T2F(t,s1);
s1_lowpass=hilbert(s1).*exp(-j*2*pi*10*t); [f2 s2f]=T2F(t,s1_lowpass);
h2f = zeros(1,length(s2f));
[a b]=find( abs(s1f)==max(abs(s1f)) ); %找到带通信号的中心频率 h2f(201-15:201+15)=1; h2f(301-15:301+15)=1;
h2f=h2f.*exp(-1j*4*pi*f2); %加入线性相位,
[t1 h1] = F2T(f2,h2f); %带通系统的冲激响应
h1_lowpass = hilbert(h1).*exp(-j*2*pi*10*t); %等效基带系统的冲激响应
figure(1) subplot(621); plot(t,s1);
xlabel('t' ); ylabel('s1(t)'); title(' 带通信号' );
subplot(623); plot(f1,abs(s1f));
xlabel('f' ); ylabel('|S1(f)|'); title(' 带通信号幅度谱' );
subplot(622)
plot(t,real(s1_lowpass)); xlabel('t' );ylabel('Re[s_l(t)]'); title(' 等效基带信号的实部' );
subplot(624) plot(f2,abs(s2f));
xlabel('f' );ylabel('|S_l(f)|');
title(' 等效基带信号的幅度谱' ); %画带通系统及其等效基带的图
subplot(625) plot(f2,abs(h2f));
xlabel('f' );ylabel('|H(f)|'); title(' 带通系统的传输响应幅度谱' );
subplot(627) plot(t1,h1);
xlabel('t' );ylabel('h(t)'); title(' 带通系统的冲激响应' );
subplot(626)
[f3 hlf]=T2F(t1,h1_lowpass); plot(f3,abs(hlf));
xlabel('f' );ylabel('|H_l(f)|'); title(' 带通系统的等效基带幅度谱' );
subplot(628)
plot(t1,h1_lowpass); xlabel('t' );ylabel('h_l(t)');
title(' 带通系统的等效基带冲激响应' ); %画出带通信号经过带通系统的响应 及 等效基带信号经过等效基带系统的响应
tt = 0:dt:t1(end)+t(end)+dt; yt = conv(s1,h1);
subplot(629) plot(tt,yt);
xlabel('t' );ylabel('y(t)');
title(' 带通信号与带通系统响应的卷积' )
ytl = conv(s1_lowpass,h1_lowpass).*exp(j*2*pi*10*tt);
subplot(6,2,10) plot(tt,real(yt));
xlabel('t' );ylabel('y_l(t)cos(20*pi*t'); title(' 等效基带与等效基带系统响应的卷积×中心频率载波' )
subplot(6,2,11) sff=s1f.*h2f; [t,st]=F2T(f1,sff); plot(t,st);
title(' 取傅立叶反变换方式' ) df=f1(2)-f1(1); E=sum(abs(sff).^2)*df
F2T 函数:
function [t,st]=F2T(f,sf) df=f(2)-f(1);
Fmx=(f(end)-f(1)+df); dt=1/Fmx; N=length(sf); T=dt*N; t=0:dt:T-dt;
sff=fftshift(sf); st=Fmx*ifft(sff);
带
通信号
R e [s l (t ) ]
s 1(t )
等效基带信号的实
部
t
带通信号幅度谱
t
等效基带信号的幅度
谱
|S 1(f ) |
f
带通系统的传输响应幅度谱
|S l (f ) |
f
带通系统的等效基带幅度谱
f
带通系统的冲激响
应
|H l (f ) |
|H (f ) |
f
带通系统的等效基带冲激响应
y l (t ) c o s (20*p i *t
t
带通信号与带通系统响应的卷积
h l (t )
h (t )
t
等效基带与等效基带系统响应的卷积×中心频率载波
0123
56t
取傅立叶反变换方式
478910
y (t )
01234
5t
678910
00.511.522.533.544.55
2.4信号x(t)定义为
⎧1-2≤t
x (t ) =⎨
1≤t
通过Matlab 画出该信号的幅度和相位谱。
clear all ; clc; T=1;
N_sample=128; dt=T/N_sample; t=-2:dt:5;
x=[ones(1,N_sample),abs(t(N_sample:3*N_sample)),ones(1,N_sample),zero
s(1,3*N_sample)];
[f,sf]=T2F(t,x); subplot(311) plot(t,x); title(' 原始波形' ); subplot(312) plot(f,angle(sf)); title(' 相位谱' ); subplot(313) plot(f,abs(sf)); title(' 幅度谱' );
T2F 函数:
function [f,sf]=T2F(t,st) dt=t(2)-t(1); T=t(end); df=1/T; N=length(st);
f=-N/2*df:df:N/2*df-df; sf=fft(st);
sf=T/N*fftshift(sf);
原始波形
1.5
1
0.5
0-2
5
-5-100
4
2
0-100-1012345相位谱-80-60-40-200幅度谱[1**********]-80-60-40-[1**********]100
3. 用matlab 产生一个频率为10Hz 、功率为2w 的余弦信源
m (t ),设载波频率为1KHz ,试画出:
(1)AM 信号(直流0.5V ),DSB-SC,SSB,VSB 调制信号;
(2)该调制信号的功率谱密度;
(3)相干解调后的信号波形。
%信源
close all ;
clear all ;
dt = 0.0001; %时间采样间隔
fm=10; %信源最高频率
fc=1000; %载波中心频率
T=0.5; %信号时长
t1 = 0:dt:T-dt;
mt = sqrt(4)*cos(2*pi*fm*t1); %信源
%N0 = 0.01; %白噪单边功率谱密度
%AM modulation
A=0.5;
s_am = (A+mt).*cos(2*pi*fc*t1);
B = 2*fm; %带通滤波器带宽
%noise = noise_nb(fc,B,N0,t); %窄带高斯噪声产生
%s_am = s_am + noise;
%%AM demodulation
figure(1)
subplot(311)
plot(t1,s_am);
hold on ;
plot(t1,A+mt,'r--' ); %标示AM 的包络
title('AM 调制信号及其包络' );
xlabel('t' );
figure(1)
rt1 = s_am.*cos(2*pi*fc*t1); %相干解调
rt1 = rt1-mean(rt1);
[f1,rf1] = T2F(t1,rt1);
[t1,rt1] = lpf(f1,rf1,2*fm); %低通滤波
subplot(312)
plot(t1,rt1);
hold on ;
plot(t1,mt/2,'r--' );
title(' 相干解调后的信号波形与输入信号的比较' );
xlabel('t' )
subplot(313)
[f1,sf]=T2F(t1,s_am);
psf = (abs(sf).^2)/T;
plot(f1,psf);
axis([-2*fc 2*fc 0 max(psf)]);
title('AM 信号功率谱' );
xlabel('f' );
%%DSB demodulation
figure(2)
s_dsb=mt.*cos(2*pi*fc*t1);
subplot(311)
plot(t1,s_dsb);
hold on ;
plot(t1,mt,'r--' ); %标示AM 的包络
title('DSB 调制信号及其包络' );
xlabel('t' );
rt2 = s_dsb.*cos(2*pi*fc*t1);
rt2 = rt2-mean(rt2);
[f2,rf2] = T2F(t1,rt2);
[t2,rt2] = lpf(f2,rf2,2*fm);
subplot(312)
plot(t2,rt2);
hold on ;
plot(t2,mt/2,'r--' );
title(' 相干解调后的信号波形与输入信号的比较' );
xlabel('t' )
subplot(313)
[f2,sf]=T2F(t2,s_dsb);
psf = (abs(sf).^2)/T;
plot(f2,psf);
axis([-2*fc 2*fc 0 max(psf)]);
title('DSB 信号功率谱' );
xlabel('f' );
%%SSB demodulation
figure(3)
s_ssb = real( hilbert(mt).*exp(j*2*pi*fc*t1) );
B=fm;
subplot(311)
plot(t1,s_ssb);
hold on ; %画出SSB 信号波形
plot(t1,mt,'r--' ); %标示mt 的波形
title('SSB 调制信号' );
xlabel('t' );
rt = s_ssb.*cos(2*pi*fc*t1);
rt = rt-mean(rt);
[f,rf] = T2F(t1,rt);
[t,rt] = lpf(f,rf,2*fm);
subplot(312)
plot(t,rt);
hold on ;
plot(t,mt/2,'r--' );
title(' 相干解调后的信号波形与输入信号的比较' );
xlabel('t' )
subplot(313)
[f,sf]=T2F(t,s_ssb);
psf = (abs(sf).^2)/T;
plot(f,psf);
axis([-2*fc 2*fc 0 max(psf)]);
title('SSB 信号功率谱' );
xlabel('f' );
%%VSB modulation
s_vsb = mt.*cos(2*pi*fc*t1);
B=1.2*fm;
[f,sf] = T2F(t1,s_vsb);
[t,s_vsb] = vsbpf(f,sf,0.2*fm,1.2*fm,fc);
figure(4)
subplot(311)
plot(t,s_vsb);
hold on ; %画出VSB 信号波形
plot(t,mt/4,'r--' ); %标示mt 的波形
title('VSB 调制信号' );
xlabel('t' );
rt = s_vsb.*cos(2*pi*fc*t1);
[f,rf] = T2F(t1,rt);
[t,rt] = lpf(f,rf,2*fm);
subplot(312)
plot(t,rt);
hold on ;
plot(t,mt/8,'r--' );
title(' 相干解调后的信号波形与输入信号的比较' );
xlabel('t' )
subplot(313)
[f,sf]=T2F(t,s_vsb);
psf = (abs(sf).^2)/T;
plot(f,psf);
axis([-2*fc 2*fc 0 max(psf)]);
title('VSB 信号功率谱' );
xlabel('f' );
AM 调制信号及其包络
5
-500.050.250.30.350.4
t
相干解调后的信号波形与输入信号的比较0.10.150.20.450.5
2
-200.050.10.150.20.250.3
t
AM 信号功率谱0.350.40.450.5
0.1
0.05
0-2000-1500-1000-5000
f [**************]
DSB 调制信号及其包络
2
-200.050.250.30.350.4
t
相干解调后的信号波形与输入信号的比较0.10.150.20.450.5
2
-200.050.10.150.250.3
t
DSB 信号功率谱0.20.350.40.450.5
0.1
0.05
0-2000-1500-1000-5000
f [**************]
SSB 调制信号
2
-200.050.250.30.350.4
t
相干解调后的信号波形与输入信号的比较0.10.150.20.450.5
2
-200.050.10.150.250.3
t
SSB 信号功率谱0.20.350.40.450.5
0.4
0.2
0-2000-1500-1000-5000
f [**************]
6.1设载波频率为20Hz ,信息速率为2 Baud,用Matlab 画出:
(1)QPSK 信号的波形
(2)QPSK 信号经过带宽为4Hz 的带通系统后的包络波形
%设载波频率为20Hz ,信息速率为2 Baud,用Matlab 画出:
%QPSK
close all ;
clear all ;
M=4;
Ts=2;
fc=20;%载波频率为20Hz
N_sample=16;
N_num=100;
dt=1/fc/N_sample;
t=0:dt:N_num*Ts/2-dt;
T=dt*length(t);
for PL=1:100%输入100段N_num个码字的波形,为了使功率谱密度看起来更加平滑 %可以取这100段信号功率谱密度的平均
d1=sign(randn(1,N_num));
d2=sign(randn(1,N_num));
gt=ones(1,fc*N_sample);
%QPSK调制
s1=sigexpand(d1,fc*N_sample);
s2=sigexpand(d2,fc*N_sample);
b1=conv(s1,gt);
b2=conv(s2,gt);
s1=b1(1:length(s1));
s2=b2(1:length(s2));
st_qpsk=s1.*cos(2*pi*fc*t)-s2.*sin(2*pi*fc*t);
%经过带通后
[f y1f]=T2F(t,st_qpsk);
[t y1]=bpf(f,y1f,fc-1/Ts,fc+1/Ts);
subplot(211)
plot(t,st_qpsk);xlabel('t' );ylabel('QPSK 波形' );
axis([5 15 -1.6 1.6]);
title('QPSK 波形' );
subplot(212)
plot(t,y1);xlabel('t' );ylabel('QPSK 波形' );
axis([5 15 -1.6 1.6]);
title(' 经过带通后的波形' );
end
QPSK 波形
1
Q P S K 波形0
-1
56781011
t
经过带通后的波形912131415
1
Q P S K 波形0
-1
5678910
t 1112131415
6.2写一个Matlab 程序实现一个二进制DPSK 通信系统的Monte Carlo仿真。设传输信号相位是θ=0°和θ=180°,θ=0°的相位变化对应于传输“0”,而θ=180°的相位变化对应于传输“1”。在不同的SNR 参数εb/N0值下,传输N=10000个比特作仿真。为了方便可将εb归一化为1,然后用σ^2=N0/2,SNR就是εb/N0=1/(2σ^2),这里σ^2是加信噪声分量的方差。所以SNR 可以通过给加信噪声分量的方差加权予以控制。画出测出的二进制DPSK 的误码率,并将它与理论差错概率作比较。
clear all ;
EsN0dB=3:0.5:10;
EsN0=10.^(EsN0dB/10);
Es=1;
N0=10.^(-EsN0dB/10);
sigma=sqrt(N0/2);
N_num=10000;
error=zeros(1,length(EsN0dB));
s_data=zeros(1,length(EsN0dB));
for k=1:length(EsN0dB)
error(k)=0;
s_data(k)=0;
while error(k)
d=(sign(randn(1,N_num))+1)/2; %随即产生10000个单极性码元 %绝对码转换为差分码(传号差分码) dpsk信号
for i=1:N_num
if i==1
b(1)=d(1);
else
b(i)=xor(d(i),b(i-1));
end
end
%DPSK信号 相位变化0用0表示,变化pi 用1表示 s_dpsk=sqrt(Es)*exp(j*pi*b);
%加入信道噪声的信号
r=s_dpsk+sigma(k)*(randn(1,length(d))+j*randn(1,length(d))); %判决
for m=1:2 %计算距离 m =1: 0;m=2 :pi
rd(m,:)=abs(r-sqrt(Es)*exp(j*pi*(m-1)));
end
for n=1:length(s_dpsk)
if rd(1,n)
dd(n)=0;
else
dd(n)=1;
end
end
% 差分码转换为绝对码
r(1)=dd(1);
for i=2:N_num
r(i)=xor(dd(i),dd(i-1)); end
%接收到的信号与原信号比较得到误码率 for p=1:N_num
if r(p)~=d(p)
error(k)=error(k)+1; end
end
s_data(k)=s_data(k)+N_num; end
end
%实际误码率
Pe=error./s_data;
%理论误码率
Pb=erfc(sqrt(EsN0));
figure
semilogy(EsN0dB,Pb); hold on ; semilogy(EsN0dB,Pe,'rd-' );
legend(' 理论计算值' , ' 仿真结果' );
xlabel('(Es/N0)/dB'),ylabel(' 误码率' ), title('DPSK 系统的误码率' )
通信系统仿真实验报告
姓名:郑智
班号:075131
学号:[1**********] 指导老师:王瑾
1. 设圆柱半径r=1.5,高h=3,求圆柱表面积和体积
程序:
r=1.5;
h=3;
s=pi*r*r*2+2*pi*r*h
a=pi*r*r*h
2. 求某自然数内的全部素数
程序:
n=input('enter n:');
j=1;
for i=1:n
if isprime(i)
x(j)=i;
j=j+1;
end
end
x
3. 输入3个数a 、b 、c ,要求按由小到大的顺序输出。
程序:
a=input('enter a:');
b=input('enter b:');
c=input('enter c:');
y = sort([a b c]);
disp(y);
4. 计算多项式y=x5-3x 4-8x 3+7x2+3x-5在[-4,5]区间的微分, 并作图.
程序:
x=linspace(-4,5,100);
p=[1 -3 -8 7 3 -5];
f=polyval(p,x);
differential=diff(f)./diff(x);
dx=x(2:length(x))
plot(dx,differential);
title(' 多项式方程的微分图'
);
5. 已知y=1-1/2+1/3-1/4+……-1/100,求y 的值。
程序:
n=1:100;
y=(-1).^(n-1)./n;
sum(y)
2-8 产生5阶随机方阵A ,其元素为[10,90]区间的随机整数,然后判断A 的元素是否能被3整除。
程序: %生成5阶随机方阵A 。
A=randi([10,90],5,5) % 判断A 的元素是否可以被3整除。
P=rem(A,3)==0%其中,rem(A,3)是矩阵A 的每个元素除以3的余数矩阵。此时,0被扩展为与A 同维数的零矩阵,P 是进行等于(==)比较的结果矩阵。
2-9 建立矩阵A ,然后找出大于4的元素的位置。
(1) 建立矩阵A 。
A=[4,-65,-54,0,6;56,0,67,-45,0]
(2) 找出大于4的元素的位置。
find(A>4)
% 建立矩阵A 。
A=[4,-65,-54,0,6;56,0,67,-45,0]
% 找出大于4的元素的位置。
find(A>4)
2-13 建立一个字符串向量,然后对该向量做如下处理:
(1) 取第1~5个字符组成的子字符串。
(2) 将字符串倒过来重新排列。
(3) 将字符串中的小写字母变成相应的大写字母,其余字符不变。
(4) 统计字符串中小写字母的个数。
a = 'TuRuJie'
a(1:5)
a(end:-1:1)
upper(a)
sum(a='a' )
5-1 在0≤x≤2 区间内,绘制曲线
y=2e-0.5xcos(4πx)
x=0:pi/100:2*pi;
y=2*exp(-0.5*x).*cos(4*pi*x);
plot(x,y);
5-5 采用图形保持,在同一坐标内绘制曲线y1=0.2e-0.5xcos(4πx) 和
y2=2e-0.5xcos(πx)。
x=0:pi/100:2*pi;
y1=0.2*exp(-0.5*x).*cos(4*pi*x);
plot(x,y1)
hold on
y2=2*exp(-0.5*x).*cos(pi*x);
plot(x,y2);
hold off
5-6 在同一坐标内,分别用不同线型和颜色绘制曲线y1=0.2e-0.5xcos(4πx) 和y2=2e-0.5xcos(πx),标记两曲线交叉点。
clear all ; %在同一坐标内,分别用不同线型和颜色绘制曲线y1=0.2e-0.5xcos(4πx) 和y2=2e-0.5xcos(πx) ,标记两曲线交叉点。
clc;
x=linspace(0,2*pi,1000);
y1=0.2*exp(-0.5.*x).*cos(4*pi*x);
y2=2*exp(-0.5.*x).*cos(pi*x);
k=find(abs(y1-y2)
x1=x(k);
y3=0.2*exp(-0.5.*x1).*cos(4*pi*x1);
plot(x,y1,x,y2,'r:',x1,y3, 'k.' );
5-13 分别以条形图、阶梯图、杆图和填充图形式绘制曲线y=2sin(x)。 x=0:pi/10:2*pi;
y=2*sin(x);
subplot(2,2,1);bar(x,y,'g' );
title('bar(x,y,''g'')');axis([0,7,-2,2]);
subplot(2,2,2);stairs(x,y,'b' );
title('stairs(x,y,''b'')');axis([0,7,-2,2]);
subplot(2,2,3);stem(x,y,'k' );
title('stem(x,y,''k'')');axis([0,7,-2,2]);
subplot(2,2,4);fill(x,y,'y' );
title('fill(x,y,''y'')');axis([0,7,-2,2]);
2.2设一个线性时不变系统的系统传递函数为H (f ) =j 2πf /(1+j 2πf ) ,通过Matlab 画出如下输入信号经过该系统时的输出信号波形及频谱。 (1)x (t ) =10sin 2πft
(2)x (t ) =10(sin2πft +sin 20πft +sin 40πft ) (3)x (t ) =⎨
clear;clc; T=1;
N_sample=128; dt=T/N_sample; t=0:dt:10*T-dt; f=5;
⎧10≤t
0其他⎩
y1=10*sin(2*pi*f*t);
y2=10*(sin(2*pi*f*t)+sin(20*pi*f*t)+sin(40*pi*f*t)); y3=[ones(1,N_sample),zeros(1,9*N_sample)];
[f1,sf1]=T2F(t,y1); [f2,sf2]=T2F(t,y2); [f3,sf3]=T2F(t,y3);
H1=1j*2*pi*f1./(1+1j*2*pi*f1); H2=1j*2*pi*f2./(1+1j*2*pi*f2); H3=1j*2*pi*f3./(1+1j*2*pi*f3); sf1=sf1.*H1; sf2=sf2.*H2; sf3=sf3.*H3;
[t1,y10]=F2T(f1,sf1); [t2,y20]=F2T(f2,sf2); [t3,y30]=F2T(f3,sf3);
figure(1) subplot(311) plot(t,y1); title(' 原始波形' ); subplot(312) plot(f1,sf1); title(' 频谱' ); subplot(313) plot(t1,y10); title(' 输出波形' );
figure(2) subplot(311) plot(t,y2);
title(' 原始波形' ); subplot(312) plot(f2,sf2); title(' 频谱' ); subplot(313) plot(t2,y20); title(' 输出波形' );
figure(3) subplot(311) plot(t,y3); title(' 原始波形' ); subplot(312) plot(f3,sf3); title(' 频谱' ); subplot(313) plot(t3,y30); title(' 输出波形' );
T2F 函数:
function [f,sf]=T2F(t,st) dt=t(2)-t(1); T=t(end); df=1/T; N=length(st);
f=-N/2*df:df:N/2*df-df; sf=fft(st);
sf=T/N*fftshift(sf);
F2T 函数:
function [t,st]=F2T(f,sf) df=f(2)-f(1);
Fmx=(f(end)-f(1)+df); dt=1/Fmx; N=length(sf); T=dt*N; t=0:dt:T-dt; sff=fftshift(sf); st=Fmx*ifft(sff);
原始波形
100
-1020
-2-80100
-10
012345频谱
678910
-60-40-200输出波形
20406080
[1**********]0
原始波形
500
-5020
-2-80500
-50
012345频谱
678910
-60-40-200输出波形
20406080
[1**********]0
原始波形
10.5
010
-1-8010
-1
012345频谱
678910
-60-40-200输出波形
20406080
[1**********]0
2.3设输入信号为s (t ) =g (t ) cos 20πt ,其中g (t ) =⎨
⎧10≤t
,带通系统响应幅度谱
0其他⎩
⎧-1
⎪
H (f ) =⎨1
⎪0⎩
f +≤5f -10≤5其他
,其相位为线性相位φ(f ) =4πf ,即
H (f ) =H (f ) e -j φ(f ) 通过Matlab 画出信号波形。 (1)用等效基带方式。 (2)用直接卷积方式。
(3)用频域相乘方式,再取傅立叶反变换方式。 (4)画出输出信号的幅度谱。
(5)求输出信号的功率(理论值与Matlab 计算对比)。 改变带通系统的宽带,观察输出信号波形的变化。
clear all ; clc; dt=0.01;
t=0:dt:5-dt;
gt=[ones(1,1/dt),zeros(1,4/dt)]; s1=gt.*cos(20*pi*t);
[f1 s1f]=T2F(t,s1);
s1_lowpass=hilbert(s1).*exp(-j*2*pi*10*t); [f2 s2f]=T2F(t,s1_lowpass);
h2f = zeros(1,length(s2f));
[a b]=find( abs(s1f)==max(abs(s1f)) ); %找到带通信号的中心频率 h2f(201-15:201+15)=1; h2f(301-15:301+15)=1;
h2f=h2f.*exp(-1j*4*pi*f2); %加入线性相位,
[t1 h1] = F2T(f2,h2f); %带通系统的冲激响应
h1_lowpass = hilbert(h1).*exp(-j*2*pi*10*t); %等效基带系统的冲激响应
figure(1) subplot(621); plot(t,s1);
xlabel('t' ); ylabel('s1(t)'); title(' 带通信号' );
subplot(623); plot(f1,abs(s1f));
xlabel('f' ); ylabel('|S1(f)|'); title(' 带通信号幅度谱' );
subplot(622)
plot(t,real(s1_lowpass)); xlabel('t' );ylabel('Re[s_l(t)]'); title(' 等效基带信号的实部' );
subplot(624) plot(f2,abs(s2f));
xlabel('f' );ylabel('|S_l(f)|');
title(' 等效基带信号的幅度谱' ); %画带通系统及其等效基带的图
subplot(625) plot(f2,abs(h2f));
xlabel('f' );ylabel('|H(f)|'); title(' 带通系统的传输响应幅度谱' );
subplot(627) plot(t1,h1);
xlabel('t' );ylabel('h(t)'); title(' 带通系统的冲激响应' );
subplot(626)
[f3 hlf]=T2F(t1,h1_lowpass); plot(f3,abs(hlf));
xlabel('f' );ylabel('|H_l(f)|'); title(' 带通系统的等效基带幅度谱' );
subplot(628)
plot(t1,h1_lowpass); xlabel('t' );ylabel('h_l(t)');
title(' 带通系统的等效基带冲激响应' ); %画出带通信号经过带通系统的响应 及 等效基带信号经过等效基带系统的响应
tt = 0:dt:t1(end)+t(end)+dt; yt = conv(s1,h1);
subplot(629) plot(tt,yt);
xlabel('t' );ylabel('y(t)');
title(' 带通信号与带通系统响应的卷积' )
ytl = conv(s1_lowpass,h1_lowpass).*exp(j*2*pi*10*tt);
subplot(6,2,10) plot(tt,real(yt));
xlabel('t' );ylabel('y_l(t)cos(20*pi*t'); title(' 等效基带与等效基带系统响应的卷积×中心频率载波' )
subplot(6,2,11) sff=s1f.*h2f; [t,st]=F2T(f1,sff); plot(t,st);
title(' 取傅立叶反变换方式' ) df=f1(2)-f1(1); E=sum(abs(sff).^2)*df
F2T 函数:
function [t,st]=F2T(f,sf) df=f(2)-f(1);
Fmx=(f(end)-f(1)+df); dt=1/Fmx; N=length(sf); T=dt*N; t=0:dt:T-dt;
sff=fftshift(sf); st=Fmx*ifft(sff);
带
通信号
R e [s l (t ) ]
s 1(t )
等效基带信号的实
部
t
带通信号幅度谱
t
等效基带信号的幅度
谱
|S 1(f ) |
f
带通系统的传输响应幅度谱
|S l (f ) |
f
带通系统的等效基带幅度谱
f
带通系统的冲激响
应
|H l (f ) |
|H (f ) |
f
带通系统的等效基带冲激响应
y l (t ) c o s (20*p i *t
t
带通信号与带通系统响应的卷积
h l (t )
h (t )
t
等效基带与等效基带系统响应的卷积×中心频率载波
0123
56t
取傅立叶反变换方式
478910
y (t )
01234
5t
678910
00.511.522.533.544.55
2.4信号x(t)定义为
⎧1-2≤t
x (t ) =⎨
1≤t
通过Matlab 画出该信号的幅度和相位谱。
clear all ; clc; T=1;
N_sample=128; dt=T/N_sample; t=-2:dt:5;
x=[ones(1,N_sample),abs(t(N_sample:3*N_sample)),ones(1,N_sample),zero
s(1,3*N_sample)];
[f,sf]=T2F(t,x); subplot(311) plot(t,x); title(' 原始波形' ); subplot(312) plot(f,angle(sf)); title(' 相位谱' ); subplot(313) plot(f,abs(sf)); title(' 幅度谱' );
T2F 函数:
function [f,sf]=T2F(t,st) dt=t(2)-t(1); T=t(end); df=1/T; N=length(st);
f=-N/2*df:df:N/2*df-df; sf=fft(st);
sf=T/N*fftshift(sf);
原始波形
1.5
1
0.5
0-2
5
-5-100
4
2
0-100-1012345相位谱-80-60-40-200幅度谱[1**********]-80-60-40-[1**********]100
3. 用matlab 产生一个频率为10Hz 、功率为2w 的余弦信源
m (t ),设载波频率为1KHz ,试画出:
(1)AM 信号(直流0.5V ),DSB-SC,SSB,VSB 调制信号;
(2)该调制信号的功率谱密度;
(3)相干解调后的信号波形。
%信源
close all ;
clear all ;
dt = 0.0001; %时间采样间隔
fm=10; %信源最高频率
fc=1000; %载波中心频率
T=0.5; %信号时长
t1 = 0:dt:T-dt;
mt = sqrt(4)*cos(2*pi*fm*t1); %信源
%N0 = 0.01; %白噪单边功率谱密度
%AM modulation
A=0.5;
s_am = (A+mt).*cos(2*pi*fc*t1);
B = 2*fm; %带通滤波器带宽
%noise = noise_nb(fc,B,N0,t); %窄带高斯噪声产生
%s_am = s_am + noise;
%%AM demodulation
figure(1)
subplot(311)
plot(t1,s_am);
hold on ;
plot(t1,A+mt,'r--' ); %标示AM 的包络
title('AM 调制信号及其包络' );
xlabel('t' );
figure(1)
rt1 = s_am.*cos(2*pi*fc*t1); %相干解调
rt1 = rt1-mean(rt1);
[f1,rf1] = T2F(t1,rt1);
[t1,rt1] = lpf(f1,rf1,2*fm); %低通滤波
subplot(312)
plot(t1,rt1);
hold on ;
plot(t1,mt/2,'r--' );
title(' 相干解调后的信号波形与输入信号的比较' );
xlabel('t' )
subplot(313)
[f1,sf]=T2F(t1,s_am);
psf = (abs(sf).^2)/T;
plot(f1,psf);
axis([-2*fc 2*fc 0 max(psf)]);
title('AM 信号功率谱' );
xlabel('f' );
%%DSB demodulation
figure(2)
s_dsb=mt.*cos(2*pi*fc*t1);
subplot(311)
plot(t1,s_dsb);
hold on ;
plot(t1,mt,'r--' ); %标示AM 的包络
title('DSB 调制信号及其包络' );
xlabel('t' );
rt2 = s_dsb.*cos(2*pi*fc*t1);
rt2 = rt2-mean(rt2);
[f2,rf2] = T2F(t1,rt2);
[t2,rt2] = lpf(f2,rf2,2*fm);
subplot(312)
plot(t2,rt2);
hold on ;
plot(t2,mt/2,'r--' );
title(' 相干解调后的信号波形与输入信号的比较' );
xlabel('t' )
subplot(313)
[f2,sf]=T2F(t2,s_dsb);
psf = (abs(sf).^2)/T;
plot(f2,psf);
axis([-2*fc 2*fc 0 max(psf)]);
title('DSB 信号功率谱' );
xlabel('f' );
%%SSB demodulation
figure(3)
s_ssb = real( hilbert(mt).*exp(j*2*pi*fc*t1) );
B=fm;
subplot(311)
plot(t1,s_ssb);
hold on ; %画出SSB 信号波形
plot(t1,mt,'r--' ); %标示mt 的波形
title('SSB 调制信号' );
xlabel('t' );
rt = s_ssb.*cos(2*pi*fc*t1);
rt = rt-mean(rt);
[f,rf] = T2F(t1,rt);
[t,rt] = lpf(f,rf,2*fm);
subplot(312)
plot(t,rt);
hold on ;
plot(t,mt/2,'r--' );
title(' 相干解调后的信号波形与输入信号的比较' );
xlabel('t' )
subplot(313)
[f,sf]=T2F(t,s_ssb);
psf = (abs(sf).^2)/T;
plot(f,psf);
axis([-2*fc 2*fc 0 max(psf)]);
title('SSB 信号功率谱' );
xlabel('f' );
%%VSB modulation
s_vsb = mt.*cos(2*pi*fc*t1);
B=1.2*fm;
[f,sf] = T2F(t1,s_vsb);
[t,s_vsb] = vsbpf(f,sf,0.2*fm,1.2*fm,fc);
figure(4)
subplot(311)
plot(t,s_vsb);
hold on ; %画出VSB 信号波形
plot(t,mt/4,'r--' ); %标示mt 的波形
title('VSB 调制信号' );
xlabel('t' );
rt = s_vsb.*cos(2*pi*fc*t1);
[f,rf] = T2F(t1,rt);
[t,rt] = lpf(f,rf,2*fm);
subplot(312)
plot(t,rt);
hold on ;
plot(t,mt/8,'r--' );
title(' 相干解调后的信号波形与输入信号的比较' );
xlabel('t' )
subplot(313)
[f,sf]=T2F(t,s_vsb);
psf = (abs(sf).^2)/T;
plot(f,psf);
axis([-2*fc 2*fc 0 max(psf)]);
title('VSB 信号功率谱' );
xlabel('f' );
AM 调制信号及其包络
5
-500.050.250.30.350.4
t
相干解调后的信号波形与输入信号的比较0.10.150.20.450.5
2
-200.050.10.150.20.250.3
t
AM 信号功率谱0.350.40.450.5
0.1
0.05
0-2000-1500-1000-5000
f [**************]
DSB 调制信号及其包络
2
-200.050.250.30.350.4
t
相干解调后的信号波形与输入信号的比较0.10.150.20.450.5
2
-200.050.10.150.250.3
t
DSB 信号功率谱0.20.350.40.450.5
0.1
0.05
0-2000-1500-1000-5000
f [**************]
SSB 调制信号
2
-200.050.250.30.350.4
t
相干解调后的信号波形与输入信号的比较0.10.150.20.450.5
2
-200.050.10.150.250.3
t
SSB 信号功率谱0.20.350.40.450.5
0.4
0.2
0-2000-1500-1000-5000
f [**************]
6.1设载波频率为20Hz ,信息速率为2 Baud,用Matlab 画出:
(1)QPSK 信号的波形
(2)QPSK 信号经过带宽为4Hz 的带通系统后的包络波形
%设载波频率为20Hz ,信息速率为2 Baud,用Matlab 画出:
%QPSK
close all ;
clear all ;
M=4;
Ts=2;
fc=20;%载波频率为20Hz
N_sample=16;
N_num=100;
dt=1/fc/N_sample;
t=0:dt:N_num*Ts/2-dt;
T=dt*length(t);
for PL=1:100%输入100段N_num个码字的波形,为了使功率谱密度看起来更加平滑 %可以取这100段信号功率谱密度的平均
d1=sign(randn(1,N_num));
d2=sign(randn(1,N_num));
gt=ones(1,fc*N_sample);
%QPSK调制
s1=sigexpand(d1,fc*N_sample);
s2=sigexpand(d2,fc*N_sample);
b1=conv(s1,gt);
b2=conv(s2,gt);
s1=b1(1:length(s1));
s2=b2(1:length(s2));
st_qpsk=s1.*cos(2*pi*fc*t)-s2.*sin(2*pi*fc*t);
%经过带通后
[f y1f]=T2F(t,st_qpsk);
[t y1]=bpf(f,y1f,fc-1/Ts,fc+1/Ts);
subplot(211)
plot(t,st_qpsk);xlabel('t' );ylabel('QPSK 波形' );
axis([5 15 -1.6 1.6]);
title('QPSK 波形' );
subplot(212)
plot(t,y1);xlabel('t' );ylabel('QPSK 波形' );
axis([5 15 -1.6 1.6]);
title(' 经过带通后的波形' );
end
QPSK 波形
1
Q P S K 波形0
-1
56781011
t
经过带通后的波形912131415
1
Q P S K 波形0
-1
5678910
t 1112131415
6.2写一个Matlab 程序实现一个二进制DPSK 通信系统的Monte Carlo仿真。设传输信号相位是θ=0°和θ=180°,θ=0°的相位变化对应于传输“0”,而θ=180°的相位变化对应于传输“1”。在不同的SNR 参数εb/N0值下,传输N=10000个比特作仿真。为了方便可将εb归一化为1,然后用σ^2=N0/2,SNR就是εb/N0=1/(2σ^2),这里σ^2是加信噪声分量的方差。所以SNR 可以通过给加信噪声分量的方差加权予以控制。画出测出的二进制DPSK 的误码率,并将它与理论差错概率作比较。
clear all ;
EsN0dB=3:0.5:10;
EsN0=10.^(EsN0dB/10);
Es=1;
N0=10.^(-EsN0dB/10);
sigma=sqrt(N0/2);
N_num=10000;
error=zeros(1,length(EsN0dB));
s_data=zeros(1,length(EsN0dB));
for k=1:length(EsN0dB)
error(k)=0;
s_data(k)=0;
while error(k)
d=(sign(randn(1,N_num))+1)/2; %随即产生10000个单极性码元 %绝对码转换为差分码(传号差分码) dpsk信号
for i=1:N_num
if i==1
b(1)=d(1);
else
b(i)=xor(d(i),b(i-1));
end
end
%DPSK信号 相位变化0用0表示,变化pi 用1表示 s_dpsk=sqrt(Es)*exp(j*pi*b);
%加入信道噪声的信号
r=s_dpsk+sigma(k)*(randn(1,length(d))+j*randn(1,length(d))); %判决
for m=1:2 %计算距离 m =1: 0;m=2 :pi
rd(m,:)=abs(r-sqrt(Es)*exp(j*pi*(m-1)));
end
for n=1:length(s_dpsk)
if rd(1,n)
dd(n)=0;
else
dd(n)=1;
end
end
% 差分码转换为绝对码
r(1)=dd(1);
for i=2:N_num
r(i)=xor(dd(i),dd(i-1)); end
%接收到的信号与原信号比较得到误码率 for p=1:N_num
if r(p)~=d(p)
error(k)=error(k)+1; end
end
s_data(k)=s_data(k)+N_num; end
end
%实际误码率
Pe=error./s_data;
%理论误码率
Pb=erfc(sqrt(EsN0));
figure
semilogy(EsN0dB,Pb); hold on ; semilogy(EsN0dB,Pe,'rd-' );
legend(' 理论计算值' , ' 仿真结果' );
xlabel('(Es/N0)/dB'),ylabel(' 误码率' ), title('DPSK 系统的误码率' )