数字基带传输-搭建实用的 2PSK 通信系统

旧巷老猫 提交于 2019-12-19 10:57:07

通信原理实验五:数字基带系统
所花时间:3.5h

一、题目:
搭建一个实用的 2PSK 通信系统,要求其码元速率 1kHz,载波频率 5kHz,信 号带宽不超过 1.5kHz,并采用相干接收机对信号进行解调。

  1. 选择合适的传输波形,并确定收发滤波器的参数。
  2. 绘制发送信号波形及功率谱,以及无噪声条件下判决前的眼图。
  3. 在 AWGN 信道下对以上系统进行仿真,获得其误码率曲线(SNR=-3dB…8dB)。

二、题目解析
带通传输系统的系统模型:
可以看作基带传输系统+调制解调过程
2PSK传输系统模型
因为之前的实验中已经完成了基带传输系统的仿真,2PSK的传输只需增加上调制解调过程即可,但有一些小细节需要注意。

三、需注意的细节
1、fs的选取:此时的fs>fc+B/2,则即一个码元长度采样点数应当改变

2、抽样判决点
因为滤波器一定会有系统延时,带通传输系统的系统模型有三个滤波器,所以初始采样点必须加上三个系统延时

decision_idx = (1+(flt_delay+flt_delay+group_delay)):sa_per_sym:length(r_match_t); 

group_delay——解调时的系统延时
2个flt_delay——2个根升余弦滤波器的系统延时

四、完整的代码

clear all;
close all;
clc;
%2PSK成型滤波器调制解调和误码率分析

%%
RB = 1e3;
fc = 5e3;
B  = 1.5e3;
rolloff = B/RB - 1;
sa_per_sym = 20;% 即一个码元长度有多少个采样点 % 采样率
N = 10000;% 比特数据长度
fs = RB  * sa_per_sym;

% 设计根升余弦滤波器,阶数为span*sa_per_sym, % 滤波器延迟为 span*sa_per_sym/2 个样点
span = 20;
flt_b = rcosdesign(rolloff, span, sa_per_sym, 'sqrt'); 
flt_delay = span*sa_per_sym/2;

% 发送filter
bits = randi(2,N,1); % 信源产生随机
bb_ori = -2*bits + 3; % 码型变换(注意是一个bit对应一个点)
bb_pulse = upsample(bb_ori, sa_per_sym); % 插0获得冲激序列 
m_t = filter(flt_b, 1, bb_pulse); % 冲激序列通过成形滤波器获得发送波形

%调制
t = (0:N*sa_per_sym-1)'/fs;
c_t = cos(2*pi*fc*t);
s_t = m_t .*c_t;
pow_s = 1/sa_per_sym/2; % 频带发送信号的功率

%接收-无噪声
recv_t = s_t;
[remod_t,remod_bits,group_delay] = BPSK_remodulate(recv_t,RB,fc,fs,N);%解调
r_match_t = filter(flt_b, 1, remod_t); % 匹配滤波器

%抽样判决

decision_idx = (1+(flt_delay+flt_delay+group_delay)):sa_per_sym:length(r_match_t); 
%群延时:3个滤波器:2个根升余弦滤波器和一个LPF的群延时

r_sampled = r_match_t(decision_idx);
recv_bits = zeros(length(r_sampled),1);
%判决
recv_bits(r_sampled < 0) = 1;

%误码率计算
[number,ratio] = symerr(bits(1:length(recv_bits)) -1,recv_bits);



%%
%绘制发射信号时域波形、功率谱及接收信号眼图。
figure(1),plot((0:length(s_t)-1)/RB/sa_per_sym,s_t);axis([0,0.1,-0.6,0.6]);title('发射信号时域波形');
P = abs(fft(s_t)).^2;
figure(2),plot(P);title('功率谱');axis([0,8e4,0,6e5]);
eyediagram(r_match_t,4*sa_per_sym),title('rolloff = 0.5无噪声判决前的眼图');

%%
%在 AWGN 信道下仿真
SNR=(-3:1:8)';
N = length(s_t);
SimuRat = zeros(length(SNR),1);
for i = 1:length(SNR)
    snr = SNR(i); 
    n_pow = pow_s/10^(0.1*snr);
    n_t = bandlimit_noise(N,fs,fc,B,n_pow);
    r_t = n_t + s_t;                                 %信号+信道的噪声
    
    %接收-噪声
    [remod_t,remod_bits,group_delay] = BPSK_remodulate(r_t,RB,fc,fs,N/sa_per_sym);%解调
    r_match_t = filter(flt_b, 1, remod_t); % 匹配滤波器

    %抽样判决

    decision_idx = (1+(flt_delay+flt_delay+group_delay)):sa_per_sym:length(r_match_t); 
    %群延时:3个滤波器:2个根升余弦滤波器和一个LPF的群延时

    r_sampled = r_match_t(decision_idx);
    recv_bits = zeros(length(r_sampled),1);
    %判决
    recv_bits(r_sampled < 0) = 1;

    %误码率计算
    [number,ratio] = symerr(bits(1:length(recv_bits)) -1,recv_bits);
    SimuRat(i) = ratio; 
clear all;
close all;
clc;
%2PSK成型滤波器调制解调和误码率分析

%%
RB = 1e3;
fc = 5e3;
B  = 1.5e3;
rolloff = B/RB - 1;
sa_per_sym = 20;% 即一个码元长度有多少个采样点 % 采样率
N = 10000;% 比特数据长度
fs = RB  * sa_per_sym;

% 设计根升余弦滤波器,阶数为span*sa_per_sym, % 滤波器延迟为 span*sa_per_sym/2 个样点
span = 20;
flt_b = rcosdesign(rolloff, span, sa_per_sym, 'sqrt'); 
flt_delay = span*sa_per_sym/2;

% 发送filter
bits = randi(2,N,1); % 信源产生随机
bb_ori = -2*bits + 3; % 码型变换(注意是一个bit对应一个点)
bb_pulse = upsample(bb_ori, sa_per_sym); % 插0获得冲激序列 
m_t = filter(flt_b, 1, bb_pulse); % 冲激序列通过成形滤波器获得发送波形

%调制
t = (0:N*sa_per_sym-1)'/fs;
c_t = cos(2*pi*fc*t);
s_t = m_t .*c_t;
pow_s = 1/sa_per_sym/2; % 频带发送信号的功率

%接收-无噪声
recv_t = s_t;
[remod_t,remod_bits,group_delay] = BPSK_remodulate(recv_t,RB,fc,fs,N);%解调
r_match_t = filter(flt_b, 1, remod_t); % 匹配滤波器

%抽样判决

decision_idx = (1+(flt_delay+flt_delay+group_delay)):sa_per_sym:length(r_match_t); 
%群延时:3个滤波器:2个根升余弦滤波器和一个LPF的群延时

r_sampled = r_match_t(decision_idx);
recv_bits = zeros(length(r_sampled),1);
%判决
recv_bits(r_sampled < 0) = 1;

%误码率计算
[number,ratio] = symerr(bits(1:length(recv_bits)) -1,recv_bits);



%%
%绘制发射信号时域波形、功率谱及接收信号眼图。
figure(1),plot((0:length(s_t)-1)/RB/sa_per_sym,s_t);axis([0,0.1,-0.6,0.6]);title('发射信号时域波形');
P = abs(fft(s_t)).^2;
figure(2),plot(P);title('功率谱');axis([0,8e4,0,6e5]);
eyediagram(r_match_t,4*sa_per_sym),title('rolloff = 0.5无噪声判决前的眼图');

%%
%在 AWGN 信道下仿真
SNR=(-3:1:8)';
N = length(s_t);
SimuRat = zeros(length(SNR),1);
for i = 1:length(SNR)
    snr = SNR(i); 
    n_pow = pow_s/10^(0.1*snr);
    n_t = bandlimit_noise(N,fs,fc,B,n_pow);
    r_t = n_t + s_t;                                 %信号+信道的噪声
    
    %接收-噪声
    [remod_t,remod_bits,group_delay] = BPSK_remodulate(r_t,RB,fc,fs,N/sa_per_sym);%解调
    r_match_t = filter(flt_b, 1, remod_t); % 匹配滤波器

    %抽样判决

    decision_idx = (1+(flt_delay+flt_delay+group_delay)):sa_per_sym:length(r_match_t); 
    %群延时:3个滤波器:2个根升余弦滤波器和一个LPF的群延时

    r_sampled = r_match_t(decision_idx);
    recv_bits = zeros(length(r_sampled),1);
    %判决
    recv_bits(r_sampled < 0) = 1;

    %误码率计算
    [number,ratio] = symerr(bits(1:length(recv_bits)) -1,recv_bits);
    SimuRat(i) = ratio; ```

function n_t = bandlimit_noise(N,fs,fc,B,n_pow)
% 产生特定功率的带限高斯白噪声
% 输入: N - 产生的噪声的长度
% fs - 仿真采样率
% fc - 带限噪声中心频率
% B - 带限噪声的带宽
% n_pow - 带限噪声的功率
% 输出: n_t - 带限噪声

%带通滤波器
filter_b_L = 4000;
filter_b = fir1(filter_b_L, [(fc-B/2)/(fs/2), (fc+B/2)/(fs/2)]);

n_fullband_pow = n_pow/(B/(fs/2));
noise_t = sqrt(n_fullband_pow)*randn(N+filter_b_L,1);
n_t = filter(filter_b,1,noise_t);
n_t = n_t(end-N+1:end);

end


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!