代码
1 | %% 基本参数M=240; % 产生码元数L=100; % 每个码元采样次数fc=50e3; % 载波频率50kHz% flocal = 50010; % 接收端的本地载波频率flocal = 50100; % 模拟接收端载波频率不同步的情况Rb =10e3; % 码元速率Ts=1/Rb; % 码元的持续时间dt=Ts/L; % 采样间隔TotalT=M*Ts; % 总时间t=0:dt:TotalT-dt; % 时间Fs=L*Rb; % 采样频率C1 = 2^(-4); % costas环滤波器系数c1C2 = C1 * 2^(-3); % costas环滤波器系数c2%% 产生信号源wave=randi([0,1],1,M); % 随机产生信号%帧头oxcc,23时24分25秒的一个数据包,最后一字节为校验和%wave=[1 1 0 0 1 1 0 0 0 0 0 1 0 1 1 1 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0 1 0 0];wave=2*wave-1; % 单极性变双极性fz=ones(1,L); % 定义复制的次数L,L为每码元的采样点数x1=wave(fz,:); % 将原来wave的第一行复制L次,称为L*M的矩阵baseband=reshape(x1,1,L*M); % 产生双极性不归零矩形脉冲波形,将刚得到的L*M矩阵,按列重新排列形成1*(L*M)的矩阵%% I、Q路码元% I路码元是基带码元的奇数位置码元,Q路码元是基带码元的偶数位置码元I=[]; Q=[];for i=1:M if mod(i, 2)~=0 I = [I, wave(i)]; else Q = [Q, wave(i)]; endendfz2 = ones(1,2*L);x2 = I(fz2,:); % 将原来I的第一行复制2L次,成为2L*(M/2)的矩阵I_signal = reshape(x2,1,L*M);% 将刚得到的L*(M/2)矩阵,按列重新排列形成1*(L*M)的矩阵x3 = Q(fz2,:); % 将原来Q的第一行复制2L次,称为2L*(M/2)的矩阵Q_signal = reshape(x3,1,L*M);% 将刚得到的L*(M/2)矩阵,按列重新排列形成1*(L*M)的矩阵%% 成形滤波% 通过Filter Designer生成了40阶(41个抽头系数)的升余弦平方根滤波器rcosfilter% 采样频率为Fs,截止频率为Rb/2Q_filtered = filter(rcosfilter,Q_signal); %Q路成形滤波I_filtered = filter(rcosfilter,I_signal); %I路成形滤波Q_filtered = double(Q_filtered);I_filtered = double(I_filtered);%% QPSK调制carry_cos=cos(2*pi*fc*t); % 载波1psk1=I_filtered.*carry_cos; % PSK1的调制carry_sin=sin(2*pi*fc*t); % 载波2psk2=Q_filtered.*carry_sin; % PSK1的调制qpsk=psk1+psk2; % QPSK的实现%% 信号经过高斯白噪声信道%qpsk_n = qpsk; %不加噪qpsk_n=awgn(qpsk,20); % 信号qpsk中加入白噪声,信噪比为SNR=20dB%% 解调部分err_phase = zeros(1,length(t));phase_ctrl= zeros(1,length(t));carry_cos_local = zeros(1, length(t));carry_sin_local = zeros(1, length(t));demo_I = zeros(1, length(t));demo_Q = zeros(1, length(t));filtered_I = zeros(1, length(t));filtered_Q = zeros(1, length(t));pd_I = zeros(1, length(t));pd_Q = zeros(1, length(t));inv_Q = zeros(1, length(t));inv_I = zeros(1, length(t));%% 载波同步与下变频for i = 1:length(t) |
波形
- 本文作者: Moerjie
- 本文链接: https://moerjie.github.io/56e87df08913/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!