一、一些Matlab函数

二、2PSK调制解调,性能分析

1、2PSK调制

(1)图示

(2)Matlab代码

function [ s_t ,bb_t,bits] = psk2_module( nSym ,Rb,fs,fc,Ac )
%UNTITLED7 此处显示有关此函数的摘要
% 此处显示详细说明
%nSym = 300; % 信息长度
%Rb = 200; % 信息速率
%fs = 48e3; % 采样率
%fc = 4e3; % 载波频率
%Ac = 1; % 载波幅度
%s_t % 已调波形
%bb_t % 码型时域波形
%bb % 码型 %%
%产生信号
% 随机产生二进制信息
bits = randint(nSym,1);
% 产生不归零码
bb = 2 * bits - 1; %%
%产生码型
% 每个符号包含的样点数
sample_bit = fs / Rb;
% 时间
t = (0:sample_bit*nSym-1)'/fs;
% 产生不归零码的时域波形
bb_t = reshape(repmat(bb', sample_bit, 1), sample_bit*nSym, 1); %%
%调制
% 产生载波信号
c_t = Ac*cos(2*pi*fc*t);
% 调制
s_t = bb_t .* c_t; end

2、2PSK解调

(1)图示

(2)Matlab代码

function [ bits,bb_t] = psk2_remodule( Rb,fs,fc,s_t)
%UNTITLED11 此处显示有关此函数的摘要
% 此处显示详细说明
% Rb = 200; % 信息速率
% fs = 48e3; % 采样率
% fc = 4e3; % 载波频率
% s_t % 调制波形 % bit_s % 抽样判决之后
% bb_t % 抽样判决之前 r_t = s_t; % 每个符号包含的样点数
sample_bit = fs/Rb;
% 时间
t = (0:length(r_t)-1)'/fs; % 产生同频同相载波信号
c_t = cos(2*pi*fc*t); % FIR群延迟,也是阶数一半
group_delay = 50;
b = fir1(group_delay*2, Rb/(fs/2)); % 主瓣占带宽Rb,这里可以放宽
bb_t = filter(b,1, r_t .* c_t); % 混频并滤波 % 抽样点下标
idx_decision = round(1+group_delay+sample_bit/2):sample_bit:length(r_t);
% 取得抽样点
val_decision = bb_t(idx_decision); % 判决
bits = zeros(length(val_decision),1);
bits(val_decision > 0) = 1; end

3、一个demo

clc,clear;

nSym = 1000;    % 信息长度
Rb = 1e3; % 信息速率
fs = 48e3; % 采样率
fc = 5e3; % 载波频率
Ac = 1; % 载波幅度 %%
[s_t ,bb_t,bb] = psk2_module( nSym ,Rb,fs,fc,Ac );
t = (0 : length(s_t) - 1) / fs' ; %%
%绘制已调波形
figure();
plot(t,s_t);
title('2PSK时域波形');
xlabel('time(t)');
ylabel('y'); %绘制功率谱
powerF_draw(s_t,fs); %%
%发送端码型变换后的波形
figure();
subplot(2,1,1);
plot(t,bb_t);
axis([min(t),max(t),-1.2,1.2]);
title('发送端码型波形');
xlabel('time(t)');
ylabel('y'); %接收端抽样判决前的波形
subplot(2,1,2);
[bits,rbb_t] = psk2_remodule(Rb,fs,fc,s_t);
plot(t,rbb_t);
title('接收端码型波形');
xlabel('time(t)');
ylabel('y'); %%
%眼图
eyediagram(rbb_t,4*fs/Rb); %取四个Bit
title('无信道噪声'); %小噪声
s_pow = sum(s_t.^2) / length(s_t);
n_pow = 0.01 * s_pow;
n_t = bandlimit_noise(length(s_t),fs,fc,2*Rb,n_pow);
[bits_low_noise,rbb_t_low_noise] = psk2_remodule(Rb,fs,fc,s_t + n_t);
eyediagram(rbb_t_low_noise,4*fs/Rb);
title('小信道噪声'); %大噪声
n_pow = 0.5 * s_pow;
n_t = bandlimit_noise(length(s_t),fs,fc,2*Rb,n_pow);
[bits_high_noise,rbb_t_high_noise] = psk2_remodule(Rb,fs,fc,s_t + n_t);
eyediagram(rbb_t_high_noise,4*fs/Rb);
title('大信道噪声'); %%
%2PSK通信系统评估
snr_i = (-3:1:8)'; % SNR输入(dB) %计算噪声功率
n_pow = s_pow ./ (10.^(snr_i ./ 10)); %初始化储存
number = zeros(1,length(snr_i));
ratio = zeros(1,length(snr_i)); %计算SNR
for i=1:length(snr_i)
n_t = bandlimit_noise(length(s_t),fs,fc,2*Rb,n_pow(i));
[bits,rbb_t] = psk2_remodule(Rb,fs,fc,s_t + n_t);
[number(i),ratio(i)] = symerr(bits,bb(1:nSym-1));
end %绘图
figure();
plot(snr_i,ratio*100);
title('误码率曲线');
xlabel('snr_i(dB)');
ylabel('误码率(%)');

三、2DPSK调制解调

1、2DPSK调制

function [ s_t ,bb_t,bits] = dpsk2_module( nSym ,Rb,fs,fc,Ac )
%UNTITLED7 此处显示有关此函数的摘要
% 此处显示详细说明
%nSym = 300; % 信息长度
%Rb = 200; % 信息速率
%fs = 48e3; % 采样率
%fc = 4e3; % 载波频率
%Ac = 1; % 载波幅度
%s_t % 已调波形
%bb_t % 码型时域波形
%bits % 码型 %%
%产生信号
% 随机产生二进制信息
bits = randint(nSym,1); %产生差分码
bits_d = zeros(nSym+1,1);
for i=1:length(bits)
bits_d(i+1) = mod(bits_d(i) + bits(i),2);
end % 产生不归零码
bb = 2 * bits_d - 1; %%
%产生码型
% 每个符号包含的样点数
sample_bit = fs / Rb;
% 时间
t = (0:sample_bit*(nSym+1)-1)'/fs;
% 产生不归零码的时域波形
bb_t = reshape(repmat(bb', sample_bit, 1), sample_bit* (nSym+1), 1); %%
%调制
% 产生载波信号
c_t = Ac*cos(2*pi*fc*t);
% 调制
s_t = bb_t .* c_t; end

2、2DPSK解调

function [ bits,bb_t] = dpsk2_remodule( Rb,fs,fc,s_t)
%UNTITLED11 此处显示有关此函数的摘要
% 此处显示详细说明
% Rb = 200; % 信息速率
% fs = 48e3; % 采样率
% fc = 4e3; % 载波频率
% s_t % 调制波形 % bit_s % 抽样判决之后
% bb_t % 抽样判决之前 r_t = s_t; % 每个符号包含的样点数
sample_bit = fs/Rb;
% 时间
t = (0:length(r_t)-1)'/fs; % 产生同频同相载波信号
c_t = cos(2*pi*fc*t); % FIR群延迟,也是阶数一半
group_delay = 50;
b = fir1(group_delay*2, Rb/(fs/2)); % 主瓣占带宽Rb,这里可以放宽
bb_t = filter(b,1, r_t .* c_t); % 混频并滤波 % 抽样点下标
idx_decision = round(1+group_delay+sample_bit/2):sample_bit:length(r_t);
% 取得抽样点
val_decision = bb_t(idx_decision); % 判决
bits_d = zeros(length(val_decision),1);
bits_d(val_decision > 0) = 1;
bits = zeros(length(bits_d)-1,1);
for i=1:length(bits)
bits(i) = mod(bits_d(i) + bits_d(i+1),2);
end end

3、一个demo

clc,clear;

nSym = 1000;    % 信息长度
Rb = 1e3; % 信息速率
fs = 48e3; % 采样率
fc = 5e3; % 载波频率
Ac = 1; % 载波幅度 %% 产生2PSK信号
[s_t,bb_t,bb] = psk2_module( nSym ,Rb,fs,fc,Ac ); %% 产生2DPSK信号
[s_d_t,bb_d_t,bb_d] = dpsk2_module( nSym ,Rb,fs,fc,Ac ); %% 绘制发送端差分编码前后的波形
figure()
%发送端差分编码前离散序列
subplot(2,1,1);
stem(bb_d);
axis([-5,nSym+5,-1.2,1.2]);
title('发送端差分编码前离散序列');
xlabel('time(t)');
ylabel('y'); %发送端差分不归零编码后离散序列
subplot(2,1,2);
stem(bb_d_t(1:fs/Rb:length(bb_d_t)));
axis([-5,nSym+5,-1.2,1.2]);
title('发送端差分不归零编码后离散序列');
xlabel('time(t)');
ylabel('y'); [bits_d,rbb_d_t] = dpsk2_remodule(Rb,fs,fc,s_d_t); %% 2PSK通信系统评估
s_pow = sum(s_t.^2) / length(s_t);
snr_i = (-3:1:8)'; % SNR输入(dB)
%计算噪声功率
n_pow = s_pow ./ (10.^(snr_i ./ 10)); %初始化储存
number = zeros(1,length(snr_i));
ratio = zeros(1,length(snr_i)); %计算SNR
for i=1:length(snr_i)
n_t = bandlimit_noise(length(s_t),fs,fc,2*Rb,n_pow(i));
[bits,rbb_t] = psk2_remodule(Rb,fs,fc,s_t + n_t);
[number(i),ratio(i)] = symerr(bits,bb(1:nSym-1));
end %% 2DPSK通信系统评估
s_d_pow = sum(s_d_t.^2) / length(s_d_t);
snr_i = (-3:1:8)'; % SNR输入(dB) %计算噪声功率
n_d_pow = s_d_pow ./ (10.^(snr_i ./ 10)); %初始化储存
number_d = zeros(1,length(snr_i));
ratio_d = zeros(1,length(snr_i)); %计算SNR
for i=1:length(snr_i)
n_d_t = bandlimit_noise(length(s_d_t),fs,fc,2*Rb,n_d_pow(i));
[bits_d,rbb_d_t] = dpsk2_remodule(Rb,fs,fc,s_d_t + n_d_t);
[number_d(i),ratio_d(i)] = symerr(bits_d,bb_d(1:nSym-1));
end %绘图
figure()
hold on;
plot(snr_i,ratio*100,'b');
plot(snr_i,ratio_d*100,'r');
title('2PSK和2DPSK误码率曲线对比');
xlabel('snr_i(dB)');
ylabel('误码率(%)');
legend('2PSK','2DPSK');

通信原理实践(五)——2PSK 与2DPSK 通信系统的更多相关文章

  1. 通信原理实践(六)——基带传输

    一.基带传输引入 1.从数字带通传输说起 以上系统可以等价为: 这里"等价"的假设条件是 •信号通过滤波器不失真 •不存在码间串扰 意义:可以通过评估基带传输系统来获得数字带通传输 ...

  2. 通信原理实践(四)——模拟通信系统性能分析

    一.模拟通信系统性能分析 1.系统框图 2.信噪比定义 (1)输入信噪比: (2)输出信噪比: (3)调制制度增益: 3.模拟通信系统分析等价模型 即自己产生一个高斯白噪声,加入到调制信号,然后在送入 ...

  3. 通信原理实践(二)——幅度调制

    一.幅度调制,并画出时域和频域波形 1.代码如下: function [ p_n ] = AM_func( N,fs,fm,Am,fc,Ac,Ma ) %UNTITLED 此处显示有关此函数的摘要 % ...

  4. 通信原理实践(一)——音频信号处理

    一.信号的离散化 1.采样定理: –如果信号是带限的,并且采样频率fs超过信号最高频率的两倍,那么,原来的连续信号可以从采样样本中完全重建出来. 因此在仿真过程中,采样率(fs)是一个非常重要的参数. ...

  5. 通信原理实践(三)——FM调制

    一.FM调制 1.代码如下: clc,clear; fm = ; % 调制信号频率(Hz) Am = 0.5; % 调制信号幅度 fc = 5e3; % 载波频率(Hz) Ac = ; % 载波幅度 ...

  6. Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)

    转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...

  7. SSL 通信原理及Tomcat SSL 配置

    SSL 通信原理及Tomcat SSL 双向配置 目录1 参考资料 .................................................................. ...

  8. Java 下 SSL 通信原理及实例

    有关SSL的原理和介绍在网上已经有不少,对于Java下使用keytool生成证书,配置SSL通信的教程也非常多.但如果我们不能够亲自动手做一个SSL Sever和SSL Client,可能就永远也不能 ...

  9. Python Socket通信原理

    [Python之旅]第五篇(一):Python Socket通信原理   python Socket 通信理论 socket例子 摘要:  只要和网络服务涉及的,就离不开Socket以及Socket编 ...

随机推荐

  1. ansible操作远程服务器报Error: ansible requires the stdlib json or simplejson module, neither was found!

    通过ansible执行远程命令时报如下异常: Error: ansible requires the stdlib json or simplejson module, neither was fou ...

  2. 6. javacript高级程序设计-面向对象设计

    1. 面向对象设计 1.1 理解对象 1.1.1 属性类型 (1). 数据属性:相当于对象的字段,包含一个数据值的位置,在这个位置可以读取和写入值.数据属性中有4个描述其行为的特性: l [[Conf ...

  3. iScroll.js 用法参考 (share)

    分享是传播.学习知识最好的方法 以下这篇文章是iScroll.js官网的中文翻译,尽管自己英文不好,但觉得原作者们翻译的这个资料还是可以的,基本用法介绍清楚了.如果你英文比较好的话,可以看看官网的资料 ...

  4. 【hadoop2.6.0】利用JAVA API 实现数据上传

    原本的目的是想模拟一个流的上传过程,就是一边生成数据,一边存储数据,因为能用上HADOOP通常情况下原本数据的大小就大到本地硬盘存不下.这一般是通过把数据先一部分一部分的缓冲到本地的某个文件夹下,hd ...

  5. NIS域配置详解

    一.前期准备1.1 NIS 简介NIS,英文的全称是network information service,也叫yellow pages.在Linux中,NIS是一个基于RPC的client/serv ...

  6. 【XLL 文档翻译】【第2部分】C API 回调函数 Excel4, Excel12

    Excel4 和 Excel12 函数使得 DLL 可以调用 Excel 工作表函数.宏表函数.命令.XLL特定函数或命令.最近的一些 Excel 版本都支持 Excel12 函数.这两个函数支持下面 ...

  7. HTML标记语法总结

    一.HTML标记类型 1.单标记 语法:<标记名>,如:<img>.<br>.<hr> 2.双标记 语法:<标记名>…标记内容…</标 ...

  8. python基础——获取对象信息

    python基础——获取对象信息 当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type( ...

  9. PHP数据库操作

    PHP实现数据库的增删改查 <?php $conn=mysql_connect('localhost','root','root'); if(!$conn){ echo "connec ...

  10. C#学习笔记-----C#枚举中的位运算权限分配

    一.基础知识 什么是位运算? 用二进制来计算,1&2:这就是位运算,其实它是将0001与0010做位预算   得到的结果是 0011,也就是3  2.位预算有多少种?(我们就将几种我们权限中会 ...