一、引言
本文章给出水声通信完整的BPSK频带仿真系统。包括带宽B的设置,采样率以及过采样率之间的关系。设置了码元速率Rb以及码元的过采样率sps,之间的关系。最后包括上采样以及从基带在频带的调制,滤波恢复等步骤。
二、基带与频带的不同点
其实基带部分是不经过载波调制的如下图理解
2.1基带调制
2.2、频带调制
1.发射端
2.接收端
基带没有 上采样,成型滤波,载波调制的部分 本质就是01 01码的判决。
频带不同,设计载波调制以及,低通滤波等等。具体的不同大家也可以根据代码来看,这里只给出基带的代码,频带代码需要的话联系我的闲鱼账号(小买卖不易,请大家理解知识产权)。
三、代码
3.1 基带BPSK代码(这里还带了卷积码编码,其实本质就是再随机信号之间加了一层信道编码)
%% 卷积码BPSK调制 维特比译码软应判决
clc;
close all;
clear all;
%%
N = 100000; %信息比特个数为N
EbNo =-5:10; %码元信噪比
M = 2; %BPSK调制
L = 3; %卷积码约束长度
trel = poly2trellis(L,[7,5]); %网格图
tblen = 18; %Viterbi回溯长度
msg=randi([0 1],N,1); %生成N个随机码
msg1 = convenc(msg,trel); %卷积码编码
%% BPSK Modulation
bpskmod= 1 - 2* msg1;%(BPSK映射 0变为1 1变为-1)
p_bpskmod=sum(abs(bpskmod).^2)/numel(bpskmod);%bpsk码元能量
K = log2(M); % coded bits per symbol
R = 1/2; %code rate, information bits per coded bit
infoBitsPerSymbol = K * R;
%%
% % AWGN信道
%%鍣0娣诲姞
for i = 1:length(EbNo)
EsNo_dB = EbNo(i)+ 10*log10(infoBitsPerSymbol);% 信道编码因为码率引起3dB的衰落
EsNo_Lin = 10^(EsNo_dB/10);
Es = 1; % PSK or other constellation(e.g. QAM) with unit average symbol energy
No = Es /EsNo_Lin;
var= sqrt(No/2); % 有声功率计算标准差
%
for j=1:length(msg1)
G_noise(j)=var*randn ; %生成长度与卷积码相同长度的的噪声
end
bpsk_Gnoise=bpskmod+G_noise';
%BPSK解调 硬判决
bpskdemod1 = bpsk_Gnoise; % 楂樻柉纭垽鍐?
bpskdemod1(bpskdemod1>-0) = 0;
bpskdemod1(bpskdemod1<0) = 1;
%---璇爜鐜?
%维特比译码器
bpskdemod_hard1= vitdec(bpskdemod1,trel,tblen,'cont','hard'); %硬判决输入
[err1 ber1(i)] = biterr(bpskdemod_hard1(tblen+1:end),msg(1:end-tblen)); %计算BER
bpskdemod_hard1= vitdec( bpsk_Gnoise,trel,tblen,'cont','unquant'); %软符号输入
[err1 ber2(i)] = biterr(bpskdemod_hard1(tblen+1:end),msg(1:end-tblen)); %计算BER
end
%% 画图
figure();
semilogy(EbNo,ber1,"-kd",EbNo,ber2,"-r+");
axis([-5 10 10^-5 10^0 ]);
legend("Gausssian Hard Decision","Soft Decision",'FontSize',14,'FontName','Times New Roman')
set(gcf,'Position',[20 100 700 500]);
set(gcf,'Color','w');
xlabel('Eb/(NG+NI)(dB)','FontSize',1,'FontName','Times New Roman');
ylabel('BER','FontSize',30,'FontName','Times New Roman');set(gca,'YDir','normal')
set(gca,'FontSize',20);
set(gca,'linewidth',2);
title('Hard Decison under MAIN(different A) and Gaussian ','FontSize',15,'FontName','Times New Roman');
3.2频带BPSK结果
代码可以联系闲鱼,这里只放部分代码用于讲解
fs = 100e3; %采样频率
dt=1/fs;
fc=30e3; %载波频率
num_R =10000; %码元个数
T=0.001; %码元周期
sps=fs*T; %码元采样个数
Rb=1/T;
Frame=10%;帧数
% 系统初始化
N_bit = num_R;
msg = randi([0,1],1,N_bit);
Rb表示码元速率,也是信息速率, T为码元周期,fc为载波频率,采样频率为100kHz,这里教大家在怎么计算这些参数的,首先Rb=1000bit/s, 表示一秒传输1000个比特,但是采样频率为100k,也就是说一秒采1e5个点, 因为一个码元就采了100个点,这个明白了吧 fs*Rb=100。刚好100个点也是1ms也就是一个码元周期T
下面放出基带BPSK的频谱图
从上图第三行图,可以看出基带频谱中心为0hz, 而且频带宽度为1khz,这个1kHz是怎么来的呢 ,其实跟大家讲 1k就是等于Rb 码元宽度。 为什么呢 ,大家如果有学过信号与系统就知道,码元是一个门限函数,他的傅里叶变换到频谱是一个sa函数,因此会出现很多边带,但是由于滚降滤波只留下了主峰,因此就形成了上图的第三行。
第四行就是乘以载波调制了,频谱搬移到了30kHz左右。
四、代码获取
闲鱼请搜索 科研Beatles