基于FPGA数字混频器的设计

1 混频原理

混频即两个不同频率之间的混合,得到第三个频率。数字混频器的设计也是FPGA数字信号处理中基础入门的设计之一,混频便是两个信号相乘得它们的和频率和差频率。数字混频在通信的调制、解调、DUC(数字上变频)、DDC(数字下变频)等系统中广泛应用。通常把其中一个信号称为本振信号(local oscillator),另一个信号称为混频器的输入信号。

2 设计目标

在采样频率为44.1KHZ下通过DDS产生2KHZ的本振信号和3KHZ的外部输入信号。对两个信号分别进行相加处理和相乘处理。使用matlab分析信号频域和时域的变化。

3 matlab设计验证

clear all

close all

clc

FS = 44100;%采样率

fc = 2000; %本振信号 2khz

fe = 3000; %外部输入信号 3khz

N = 1024;%1024点一个正玄周期

Q = 32; %量化32bit

t =0:2*pi/FS:2*pi*N/FS;

sin_osc =sin(t*fc);

sin_e =sin(t*fe);

sin_mult = sin_osc.*sin_e;

sin_add = sin_osc+sin_e;

f_osc =fft(sin_osc,N);

f_osc=20*log(abs(f_osc))/log(10); %换算成dBW单位

ft=[0:(FS/N):FS/2]; %转换横坐标以Hz为单位

f_osc=f_osc(1:length(ft));

f_e =fft(sin_e,N);

f_e=20*log(abs(f_e))/log(10); %换算成dBW单位

f_e=f_e(1:length(ft));

f_add =fft(sin_add,N);

f_add=20*log(abs(f_add))/log(10); %换算成dBW单位

f_add=f_add(1:length(ft));

f_mult =fft(sin_mult,N);

f_mult=20*log(abs(f_mult))/log(10); %换算成dBW单位

f_mult=f_mult(1:length(ft));

figure,

hold on

subplot(221),plot(t(1:128),sin_osc(1:128),'-');

legend('sinosc');title('2K HZ');

subplot(222),plot(t(1:128),sin_e(1:128),'-');

legend('sine');title('3K HZ');

subplot(223),plot(t(1:128),sin_add(1:128),'-');

legend('sinadd');title('add ');

subplot(224),plot(t(1:128),sin_mult(1:128),'-');

legend('sinmult');title('mult ');

grid;

hold off

figure,

hold on

subplot(221);plot(ft,f_osc);

xlabel('频率(Hz)','fontsize',8); ylabel('功率(dBW)','fontsize',8);

title('信号频谱图 2KHZ','fontsize',8);legend('sinosc');

subplot(222);plot(ft,f_e);

xlabel('频率(Hz)','fontsize',8); ylabel('功率(dBW)','fontsize',8);

title('信号频谱图3KHZ','fontsize',8);legend('sine');

subplot(223);plot(ft,f_mult);

xlabel('频率(Hz)','fontsize',8); ylabel('功率(dBW)','fontsize',8);

title('信号频谱图1KHZ 和 6','fontsize',8);legend('sinmult');

subplot(224);plot(ft,f_add);

xlabel('频率(Hz)','fontsize',8); ylabel('功率(dBW)','fontsize',8);

title('信号频谱图2KHZ 和 3KHZ','fontsize',8);legend('sinadd');

hold off

图1 matlab时域波形

如上图1所示,图1左上1为2khz本振信号sin波,图1右上2为3khz外部输入sin波,图1左下1为2khz+3khz时域波形,图1右下1为2KHZ*3KHZ时域波形。

图2 信号频域分析

如上图2所示,左下1为两个信号相乘所得频域图形,分析可知2KHZ*3KHZ得到了1KHZ和6KHZ,右下1为两个信号相加所得频域图像,分析可知2khz+3khz得到了2khz 和 3khz。

4 FPGA的程序设计

1) 相加模块设计

`timescale 1ps/1ps

module digital_add(

input mclk,//45.1584MHZ

input reset_n,

input signed[31:0] pcm_in1,

input signed[31:0] pcm_in2,

output signed[31:0] pcm_out

);

localparam LAST_CYCLE = 1023;

reg [9:0] i;

reg signed [32:0] pcm_r;

assign pcm_out = pcm_r[32:1];

always @(posedge mclk or negedge reset_n) begin

if(!reset_n) begin

i<= 0;

pcm_r <= 33'b0;

end

else begin

i <= i + 1;

if(i == 0) pcm_r <= pcm_in1 + pcm_in2;//add

end

end

endmodule

相加会产生位扩展。2)相乘模块设计

timescale 1ps/1ps

module digital_mult(

input mclk,//45.1584MHZ

input reset_n,

input signed[31:0] pcm_in1,

input signed[31:0] pcm_in2,

output signed[31:0] pcm_out

);

localparam LAST_CYCLE = 1023;

reg [9:0] i;

reg signed [63:0] pcm_r;

assign pcm_out = pcm_r[63:32];

always @(posedge mclk or negedge reset_n) begin

if(!reset_n) begin

i<= 0;

pcm_r <= 0;

end

else begin

i <= i + 1;

if(i == 0) pcm_r <= pcm_in1*pcm_in2;//mult

end

end

endmodule

图3 数字混频器的modelsim时域波形

观察图3 可知matlab仿真基本和FPGA时域波形一致,设计成功。接下来对FPGA设计处理的数据进行分析。

图4 FPGA产生的2khz 和3khz时域和频域波形

图5 混频后时域和频域分析

由图4和图5与图1和图2对比,FPGA设计成功。

DSP往期

更多精彩推荐,请关注我们

万水千山总是情,点个 “在看” 行不行!!!

混频器 matlab,基于FPGA数字混频器的设计相关推荐

  1. 基于FPGA数字时钟的设计(附源码)

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注"FPGA技术江湖"微信公众号,在"闯荡江湖"."行侠仗义"栏里获取其 ...

  2. MATLAB与FPGA数字信号处理(数字滤波器设计)、数字IC、无线通信、图像处理、信道编码系列

    FPCA.数字IC笔试题系列 不容错过的FPGA/数字IC秋招笔试面试汇总帖(2022届) 1. FPGA.数字IC系列(1)--乐鑫科技2021数字IC提前批笔试 2. FPGA.数字IC系列(2) ...

  3. 基于matlab的gui设计与实现,毕业设计基于MATLAB GUI的数字图像处理的设计与实现(V2.1)...

    <[毕业设计]基于MATLAB GUI的数字图像处理的设计与实现.doc>由会员分享,可在线阅读全文,更多相关<毕业设计基于MATLAB GUI的数字图像处理的设计与实现(V2.1) ...

  4. 基于fpga的fir滤波器设计,通过matlab代码设计滤波器参数,最终通过fpga实现

    基于fpga的fir滤波器设计,通过matlab代码设计滤波器参数,最终通过fpga实现,modelsim仿真,最后在开发板上实现,两路adc采集的掺杂高频信号经过低通滤波器之后,由dac输出,由si ...

  5. 基于FPGA的电子计算器设计(下)

    今天给大侠带来基于FPGA的电子计算器设计,由于篇幅较长,分三篇.今天带来第三篇,下篇,话不多说,上货. 导读 本篇介绍了一个简单计算器的设计,基于 FPGA 硬件描述语言 Verilog HDL,系 ...

  6. 基于FPGA的LSTM加速器设计(MNIST数据集为例)

    摘要 本文以MNIST手写数字识别任务为例,使用FPGA搭建了一个LSTM网络加速器,并选取MNIST数据集中的10张图片,通过vivado软件进行仿真验证.实验结果表明,本文设计的基于FPGA的LS ...

  7. 基于FPGA的电子计算器设计(上)

    今天给大侠带来基于FPGA的电子计算器设计,由于篇幅较长,分三篇.今天带来第一篇,上篇,话不多说,上货. 导读 本篇介绍了一个简单计算器的设计,基于 FPGA 硬件描述语言 Verilog HDL,系 ...

  8. 【FPGA实例】基于FPGA的DDS信号发生器设计

    原文链接来源:www.runoob.com 基于FPGA的DDS信号发生器设计 DDS 原理 ------DDS(直接频率合成) 技术是根据奈奎斯特抽样定理及数字处理技术,把一系列的模拟信号进行不失真 ...

  9. 基于FPGA的HDMI输出接口设计

    基于FPGA的HDMI输出接口设计 HDMI接口简述 HDMI协议简述 HDMI接口设计 HDMI代码 总结 HDMI接口简述 HDMI接口是现在特别常用的音视频接口,另一个常用的视频流接口是VGA接 ...

  10. 基于FPGA的IIR滤波器设计

    基于FPGA的IIR滤波器设计,使用VHDL语言. 本设计是毕设,包括论文 下面是论文目录截图: 各模块VHDL程序 时序控制模块程序 library ieee; use ieee.std_logic ...

最新文章

  1. Swift的Guard语句
  2. 目录config.php怎么修改域名,config.php · wlphp/基于宝塔面板api给站点新增删除域名接口 - Gitee.com...
  3. tableau可视化数据分析60讲(十三)-tableau常用可视化视图(条形图折线图饼图)
  4. COM与.NET调用DCOM组件
  5. JVM插码之六:jacoco插码及问题“$jacocodata 属性 Method not found: is$jacocoData”
  6. 河马 webshell扫描器对linux服务器进行安全扫描
  7. linux怎样以root用户运行,如何在Linux机器中以root用户身份运行Elastic...
  8. java中的lombok_如何在Java中使用Lombok删除样板设置器吸气剂
  9. rfid 标签内存_RFID有源与无源的区别与联系
  10. 百度贴吧 2017 前贴子无法访问;网易腾讯游戏获批;苹果反垄断案败诉 | 极客头条...
  11. Hive中数据的导入与导出
  12. 犯罪与健康的统计关系
  13. CSND博客☞盘码之路开始
  14. arcgis 中北京1954 高斯克吕格投影说明
  15. Tcp滑动窗口协议简介
  16. beego/logs模块的使用
  17. 一位女程序员兼俩小子妈咪的人生历程(1)
  18. 使用frp配置内网穿透
  19. K8S部署Traefik与Ingress、IngressRoute——筑梦之路
  20. 如何用Matlab画一个数学动态GIF

热门文章

  1. 信息安全实验:实现一个fake-wifi
  2. 2019年高考数学解题技巧如何分配时间最合理
  3. 页面中多次使用TWEEN.update()的坑
  4. runaction 旋转_使用cc.tween(缓动系统)代替runAction
  5. 微信视频聊天记录怎么录制
  6. Django模板渲染错误
  7. 三进制计算机比二进制快,三进制会取代二进制计算机吗?
  8. EffNet图像分类--分类精子图片优化!
  9. 机器学习--归纳总结
  10. Blender图解教程:手把手教你独立游戏开发必备的极简式贴图法