MATLAB通信仿真与应用 实验四 通信系统仿真实验
2.掌握MATLAB中通信工具箱的函数命令。1.熟悉MATLAB通信工具箱。计算机、软件:MATLAB。实验四 通信系统仿真实验。
·
一、实验名称:
实验四 通信系统仿真实验
二、实验目的:
1.熟悉MATLAB通信工具箱。
2.掌握MATLAB中通信工具箱的函数命令。
三、实验原理及步骤:


四、实验时间
2024.12.23
五、实验仪器:
计算机、软件:MATLAB
六、实验结果:
1、命令
m函数创建
function [t, omg, ft, ift] = prefourier(trg, n, omgrg, k)
T = trg(2) - trg(1);
t = linspace(trg(1), trg(2) - T / n, n)';
OMG = omgrg(2) - omgrg(1);
omg = linspace(omgrg(1), omgrg(2) - OMG / k, k)';
ft = T / n * exp(-1j * kron(omg, t.'));
ift = OMG / 2 / pi / k * exp(1j * kron(t, omg.'));
end
主函数
clc
clear
[t, omg, ft, ift] = prefourier([0, 5], 1000, [-250, 250], 1000);
g = 3 * cos(10 * t) + 2 * cos(20 * t);% 定义基带信号g,由两个余弦信号组成
f = g.* cos(100 * t);% 对基带信号g进行调制得到信号f
g0 = f.* cos(100 * t);% 对信号f进行进一步操作得到g0
G0 = ft * g0;% 计算g0的傅里叶变换,得到G0
h = ( omg < 30 & omg > -30);
G1 = G0.* h;% 对G0应用低通滤波器,得到G1
g1 = ift * G1; % 对G1进行傅里叶逆变换得到时域信号g1
G = ft * g; % 计算g的傅里叶变换,得到G
% 计算f的傅里叶变换,得到F
F = ft * f;
% 绘制基带信号g的时域波形
subplot(4, 1, 1)
plot(t, g)
xlabel('t')
ylabel('g(t)')
title('30');
% 绘制调制信号f的时域波形
subplot(4, 1, 2)
plot(t, f)
xlabel('t')
ylabel('f(t)')
% 绘制信号g0的时域波形
subplot(4, 1, 3)
plot(t, g0)
xlabel('t')
ylabel('g0(t)')
% 绘制经过滤波后的时域信号g1的波形
subplot(4, 1, 4)
plot(t, g1)
xlabel('t')
ylabel('g1(t)')
figure
% 绘制基带信号g的频域特性
subplot(5, 1, 1)
plot( omg, G)
axis([-250 250 -2 8])
xlabel('w')
ylabel('G(w)')
title('30');
% 绘制调制信号f的频域特性
subplot(5, 1, 2)
plot( omg, F)
axis([-250 250 -2 4])
xlabel('w')
ylabel('F(w)')
% 绘制信号G0的频域特性
subplot(5, 1, 3)
plot( omg, G0)
axis([-250 250 -2 4])
xlabel('w')
ylabel('G0(w)')
% 绘制低通滤波器特性h的频域表示
subplot(5, 1, 4)
plot( omg, h)
axis([-250 250 -0.5 1.5])
xlabel('w')
ylabel('H(w)')
% 绘制经过滤波后的信号G1的频域特性
subplot(5, 1, 5)
plot( omg, G1)
axis([-250 250 -2 4])
xlabel('w')
ylabel('G1(w)')
效果截图

图 1
2、命令
clear all
close all
M = 4; % 设定调制阶数为4对应QPSK调制方式
EsNOdB = 3 : 0.5 : 10; %定义信噪比的取值范围
EsNO = 10.^(EsNOdB / 10); %将信噪比从分贝值转换为线性值
Es = 1; % 设置信号能量为1
NO = 10.^(-EsNOdB / 10); %根据信噪比分贝值计算噪声功率谱密度
sigma = sqrt(NO / 2); %计算噪声标准差
error = zeros(1, length(EsNOdB)); %初始化用于存储不同信噪比下误码数的向量
s_data = zeros(1, length(EsNOdB)); %初始化用于存储不同信噪比下传输符号数的向量
for k = 1 : length(EsNOdB)
error(k) = 0;
s_data(k) = 0;
while error(k) < 1000
d = ceil(rand(1, 10000) * M); %生成随机的数据符号序列,范围基于调制阶数M
s = sqrt(Es) * exp(1j * 2 * pi / M * (d - 1)); %将数据符号调制成QPSK复基带信号
r = s + sigma(k) * rand(1, length(d)) + 1j * randn(1, length(d)); %给调制信号添加信道噪声得到接收信号
for m = 1 : M
rd(m, :) = abs(r - sqrt(Es) * exp(1j * 2 * pi / M * (m - 1)));
end
for m = 1 : length(s)
dd(m) = find(rd(:, m) == min(rd(:, m)));
if dd(m) ~= d(m)
error(k) = error(k) + 1;
end
end
s_data(k) = s_data(k) + 10000;
end
end
Pe = error./ s_data; % 计算不同信噪比下的实际误码率
Ps = erfc(sqrt(EsNO) * sin(pi / M)); % 计算QPSK调制的理论误码率
semilogy(EsNOdB, Pe, 'b*');
hold on;
semilogy(EsNOdB, Ps, 'r--');
xlabel('Es/NO (dB)');
ylabel('Bit Error Rate');
title('30')
legend('仿真结果', '理论计算结果');
效果截图

图 2
- 命令
clear
close all
dx = 0.01;
x = -1 : dx : 1;
u = 255;
A = 87.6;
yu = sign(x).* log(1 + u * abs(x)) / log(1 + u); % u law相关计算,根据给定公式计算y(u)的值
for i = 1 : length(x) % A law相关计算,通过循环根据不同条件计算y(A)的值
if abs(x(i)) < 1 / A
ya(i) = A * x(i) / (1 + log(A));
else
ya(i) = sign(x(i)) * (1 + log(A * abs(x(i)))) / (1 + log(A));
end
end
figure(1)
plot(x, yu, 'k.:'); % 绘制u law对应的曲线,颜色为黑色,点线样式
axis([0 1 0 1]);
title('u law');
xlabel('x');
ylabel('y');
grid on;
hold on;
xx = [-1, -127 / 255, -63 / 255, -31 / 255, -15 / 255, -7 / 255, -3 / 255, -1 / 255, 1 / 255, 3 / 255,...
7 / 255, 15 / 255, 31 / 255, 63 / 255, 127 / 255, 1]; % 定义一组x坐标值
yy = [-1, -7 / 8, -6 / 8, -5 / 8, -4 / 8, -3 / 8, -2 / 8, -1 / 8, 1 / 8, 2 / 8, 3 / 8, 4 / 8, 5 / 8, 6 / 8, 7 / 8, 1];
% 定义一组y坐标值
plot(xx, yy, 'r'); % 绘制红色曲线
axis([0 1 0 1]);
hold on;
stem(xx, yy, 'b-.'); % 绘制蓝色点划线形式的离散序列
axis([0 1 0 1]);
legend('u律压缩特性','折线近似u律');
figure(2)
plot(x, ya, 'k.:'); % 绘制A law对应的曲线,黑色点线样式
axis([0 1 0 1]);
title('(30)A law');
xlabel('x');
ylabel('y');
grid on;
hold on;
xx = [-1, -1 / 2, -1 / 4, -1 / 8, -1 / 16, -1 / 32, -1 / 64, -1 / 128, 1 / 128, 1 / 64, 1 / 32, 1 / 16, 1 / 8,...
1 / 4, 1 / 2, 1]; % 定义一组x坐标值
yy = [-1, -7 / 8, -6 / 8, -5 / 8, -4 / 8, -3 / 8, -2 / 8, -1 / 8, 1 / 8, 2 / 8, 3 / 8, 4 / 8, 5 / 8, 6 / 8, 7 / 8, 1];
% 定义一组y坐标值
plot(xx, yy, 'r'); % 绘制红色曲线
axis([0 1 0 1]);
hold on; % 保持图形
stem(xx, yy, 'b-.'); % 绘制蓝色点划线形式的离散序列
axis([0 1 0 1])
legend('A律压缩特性','折线近似A律')
效果截图
图 3
更多推荐
所有评论(0)