MATLAB 数字基带信号的传输

最近需要使用MATLAB构造一个psk信号,因此碰上了成型滤波这个概念。比较苦恼,大学的时候没有认真学习数字信号和通信原理,唯一的途径是百度,这里分享一下我的理解

主要用到了两个函数:rcosdesign、upfirdn

rrcFilter = rcosdesign(beta,span,sps,shape)
beta: 余弦滚降系数
span: 滤波器包含的符号数
sps: 每个符号所含的采样点数
shape: 用于选择(升余弦,平方根升余弦)
rrcFilter: 滤波器系数,这个函数就是滤波器的设计

txSig = upfirdn(modData, rrcFilter, sps);
modData: 输入信号
rrcFilter: 刚刚设计好的滤波器系数
sps: 单个符号采样点数

下面用MATLAB进行了一个简单的仿真,代码来源于官网
4psk的基带传输(在基带上的调制与解调,包含发送和接收两部分)

clear;close;clc;
%MATLAB数字基带信号的传输

%成型滤波器
rolloff = 0.25; % 升余弦滚降系数
span = 6;       % 抽头的个数,影响滤波器的阶数
sps = 10;        % 每个符号的采样点,即输出信号的采样率是 符号率*sps
rrcFilter = rcosdesign(rolloff, span, sps);%升余弦滤波器的系数,输入采样率1Hz,输出1*spsHz

%psk映射
M = 4;          % psk进制数
k = log2(M);    % 每个符号所含比特数
data_Bd=10000; %符号率
data_t=1;
data = randi([0 M-1], data_Bd*data_t, 1);%1s的符号
modData = pskmod(data, M, pi/4);

%成型滤波,每个符号的采样点为sps
txSig = upfirdn(modData, rrcFilter, sps);%为基带发送信号,采样率为1k*sps

%通过一个awgn信道
EbNo = 7;
snr = EbNo + 10*log10(k) - 10*log10(sps);
rxSig = awgn(txSig, snr, 'measured');

%接收端的处理
rxFilt = upfirdn(rxSig, rrcFilter, 1, sps);%匹配滤波
rxFilt = rxFilt(span+1:end-span);
hScatter = scatterplot(sqrt(sps)*rxSig(1:sps*500),sps,0,'g.');%此处的sps是抽取的意思,每次打印第sps个点
hold on
scatterplot(rxFilt(1:500),1,0,'kx',hScatter)
title('Received Signal, Before and After Filtering')
legend('Before Filtering','After Filtering')
axis([-3 3 -3 3]) 
hold off

data_receive=pskdemod(rxFilt, M, pi/4);%与发送的data相同

接收的信号星座图(匹配滤波前后对比)

data_receive与data一致;

总结:这个程序可以理解为:基带产生一个1秒的4psk数字信号,符号率为10k,经过成型滤波后的信号采样率为100k,直接发送,在信道中接收后,经过匹配滤波,就是之前发送的4psk信号;

此处我仍然存在的疑问是:如果我要采用频带传输,把信号加载到100M的载波上,应该如何添加呢?我基带产生的是复数数据,如何去调制载波?

头大.jpg

CSDN博客搬运 文章被收录于专栏

CSDN博客搬运

全部评论
楼主解决了吗,有没有更详细的代码了,跪求
点赞 回复 分享
发布于 2022-04-18 13:03

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务