基于FPGA的AM调制解调:包含ModelSim仿真、Quartus 18.1与Vivado ...

发布时间:2026/5/20 6:43:56

基于FPGA的AM调制解调:包含ModelSim仿真、Quartus 18.1与Vivado ... 基于fpga的AM调制解调有modlsim仿真以及quartus18.1和vivado2017.4的工程文件使用matlab设计解调需要的滤波器fir才采用verilog实现没有调用ip。 相关仿真如下图所示如果板子有adc和dac支持上板。AM调制解调在通信系统里就像老司机必备的生存技能。咱们今天用FPGA整活这个经典方案全程不调IP核从Matlab滤波器设计到Verilog手撸FIR最后还能真刀真枪上板实测。先看发射端架构敲黑板重点来了。载波直接用DDS生成Verilog代码里这个相位累加器你品always (posedge clk) begin phase_acc phase_acc 32d42949673; //1MHz载波50MHz时钟 end累加值每时钟周期加(2^32 * fout)/fclk这种定点运算比浮点香多了。调制部分更暴力——直接把基带信号和载波相乘assign am_wave (carrier * (12d2048 baseband)) 11; //基带DC偏移调幅这里基带信号要加个直流偏移避免过调幅移位操作相当于定点数规格化比直接截位更稳。接收端最骚的操作在解调。Matlab的fdatool生成FIR系数注意导出时要做定点量化h fir1(63, 0.1); % 10%截止频率 h_quant round(h * 32767); %16位量化生成的系数直接喂给Verilog实现的FIR滤波器。手写FIR核心是这个画风always (posedge clk) begin //移位寄存器更新 delay_line {delay_line[62:0], am_signal}; //乘累加操作 for(int i0; i64; ii1) begin product[i] $signed(delay_line[i]) * coeff[i]; end sum 0; for(int j0; j64; jj1) begin sum sum product[j]; end filtered sum 15; //数据对齐 end这个并行结构虽然吃资源但时序表现比串行实现强太多。注意右移15位对应Matlab的32767量化系数信号对齐的坑踩过的人都懂。基于fpga的AM调制解调有modlsim仿真以及quartus18.1和vivado2017.4的工程文件使用matlab设计解调需要的滤波器fir才采用verilog实现没有调用ip。 相关仿真如下图所示如果板子有adc和dac支持上板。ModelSim仿真时发现个鬼故事——当基带信号频率接近载波1/10时解调波形会抽搐。后来发现是FIR过渡带没设计好回Matlab把滤波器阶数从64提到128阶立马稳如老狗。上板实测环节AD/DA配置要注意这个骚操作assign dac_data am_wave[23:8]; //16位有效位提取 always (posedge adc_clk) begin demod_in {adc_data, 8b0}; //左移8位提升计算精度 end数据位宽处理不当会导致信噪比血崩实测有效位损失超过3位时解调信号直接妈见打。最后说个保命技巧在Vivado里用XPMCLOCKGEN替代PLL不同板卡移植时能少掉头发。Quartus用户当我没说Altera的IP核脾气你们懂的。完整工程已传GitHub自取时记得star老铁们的三连是更新的动力

相关新闻