AD9361软件无线电实验(3)DPSK调制 您所在的位置:网站首页 ad9361 AD9361软件无线电实验(3)DPSK调制

AD9361软件无线电实验(3)DPSK调制

2023-10-13 12:59| 来源: 网络整理| 查看: 265

前面两篇文章分享了我对数字基带信号与成型滤波的理解、测试、验证,本文将分享DPSK在AD9361上的实现。思路是这样的,首先在Matlab上验证DPSK调制后的频谱,然后在FPGA中采用伪随机序列作为原始数据,经上采样、成型滤波后送入AD9361,由AD9361完成IQ调制并最终发射出去。在本文中,最终的已调DPSK信号,其物理层速率是2Mbps,占用带宽为2.5MHz,物理层与占用带宽是联动的关系。

DPSK在Matlab中的实现

读入上一篇文章中生成的随机序列,进行4倍上采样,然后使用filter函数对上采样后的序列进行成型滤波(滤波器系数也是在上一篇文章中生产的),成型滤波后输出的数据与载波相乘得到 DPSK调制信号,最后绘制DPSK已调信号的频谱。Matlab代码如下:

clear;clc; ps=1*10^6; %码速率为1MHz Fs=4*10^6; %采样速率为4MHz fc=1*10^6; %载波频率为1MHz N=20000; %仿真数据的长度 coe_int=importdata('D:\Temp\matlab\coe_int.txt'); s=importdata('D:\Temp\matlab\rand_data.txt'); t=0:1/Fs:(N*Fs/ps-1)/Fs; %产生长度为N,频率为fs的时间序列 %以Fs频率采样 Ads=upsample(s',Fs/ps); rcos_Ads=filter(coe_int,1,Ads); %产生载频信号 f0=sin(2*pi*fc*t); %产生DPSK已调信号 dpsk=rcos_Ads.*f0; %绘制成形滤波后信号频谱、DPSK信号频谱、DPSK信号时域波形 m_dpsk=20*log10(abs(fft(dpsk,1024))); m_dpsk=m_dpsk-max(m_dpsk); %m_dpsk=mean(m_dpsk,1); %设置幅频响应的横坐标单位为MHz x_f=[0:(Fs/length(m_dpsk)):Fs/2];x_f=x_f/10^6; %只显示正频率部分的幅频响应 mdpsk=m_dpsk(1:length(x_f)); plot(x_f,mdpsk); legend('DPSK已调信号频谱'); xlabel('频率(MHz)');ylabel('幅度(dB)');grid on;

最终绘制的DPSK已调信号频谱如下图,可见,信号频谱被限制在1.25MHz左右,与预期是相符的。

DPSK使用Matlab仿真 FPGA生成伪随机数

这段代码用于在FPGA中生成伪随机数作为源,事实上FPGA中不可能真的生成随机数,只是这些数的周期很长而已。有一点需要注意的是,用于DPSK调制的数字序列必须具有随机性,否则频谱会出现单独的峰。伪随机数模块的时钟速率是2MHz。代码如下:

module pn2(clk,rst,data_out); input clk; input rst; output data_out; reg [7:1] c; //reg[15:0] cnt; always @(posedge clk) begin if (rst==0) begin c 星座映射

在我看来,星座映射就是个简单的组合逻辑,但是听着很高大上,所以教科书里面都这样写,在这个系列的第一篇文章中,已经说明了要采用-1 1这样的序列来替代0 1序列,所以需要把FPGA生成的随机的0 1序列变为随机的-1 1序列,在这里,我采用通常的二进制补码来表示-1,以便与其他模块对接。星座映射的代码如下:

module code_convert( input code_convert_clk, input code_convert_din, input code_convert_rst, output [7:0] dout ); reg pre_code; reg pre_code_temp; reg [7:0] code_convert_dout; always @(posedge code_convert_clk) begin if(code_convert_rst==0) pre_code_temp


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有