附一段实现代码,刚接触通信可以从最简单的bpsk入门熟悉调制解调过程。
%BPSK收发系统
clc;clear;close all;
%%可调参数
interpolation_rate =256; %内插系数
data_length =2048; %测试数据长度
w_carrier = 0.25; %载波数字频率
SNR = 20; %信噪比
Sample_position = 0; %最佳采样点
%%发送端
data_send = randi([0,1],data_length,1); %0/1序列
data_bio = 1-2*data_send; %对极序列(1映射为-1,0映射为1)
%data_bio = 2*data_send-1; %对极序列(1映射为1,0映射为-1)
data_upsample = upsample(data_bio,interpolation_rate); %内插
% hrc=rcosfir(1,[-3,3],interpolation_rate,1,'sqrt')
hrc = rcosdesign(0.5,6, interpolation_rate, 'normal');%根升余弦滤波器
% hrc2 = ones(1,interpolation_rate); %方形滤波器
baseband = conv(data_upsample,hrc)'; %成型
% baseband = conv(data_upsample,hrc2)'; %成型
carrier = cos(2*pi*w_carrier*[1:length(baseband)]); %载波
send_bpsk = baseband.*carrier; %BPSK调制
figure;
plot(abs(fft(send_bpsk)));
%%信道
% recv = awgn(send_bpsk,SNR,'measured'); %加性高斯白
%
% %%接收
% recv_carrier = carrier.*recv; %乘以本地载波
% recv_bio = conv(hrc,recv_carrier); %匹配滤波器
% % recv_bio = conv(hrc2,recv_carrier); %匹配滤波器
%
% recv_data = downsample(recv_bio,interpolation_rate,Sample_position);
%
% scatterplot(recv_data(interpolation_rate*2:end-interpolation_rate*2))
% figure;pwelch(send_bpsk);