文章目录

  • 数字下变频(DDC)
  • 数字上变频(DUC)
  • FIR并行滤波

数字下变频(DDC)

有几点需要注意,

  • 混频之后,抽取之前,需要设计抗混叠滤波器
  • 考虑到硬件实现,滤波器的设计要合理(阶数、系数结构等)
%% 清空一切
clc;clear all;close all;%% 信号参数设置
FS = 3000;
TS = 1/FS;
N  = 8192;
f  = 500;
t  = (0:N-1)*TS;FS_2 = FS/2;
FS_4 = FS/4;
N_2  = N/2;SIG_AMP = 100;
COEF_WIDTH = 16;%%
SIM_SEL = 2;%% 生成中频信号
sig_if  = cos(2*pi*f*t);
figure;
subplot(211);
freq = (0:N-1)/N*FS;
plot(freq,20*log10(abs(fft(sig_if))));
title('原始信号频谱图(ffthift之前)');
subplot(212);
freq = (0:N-1)/N*FS-FS/2;
plot(freq,20*log10(abs(fftshift(fft(sig_if)))));
title('原始信号频谱图(ffthift之后)');%% 设计半带滤波器(一半系数为0,便于节省硬件资源)
load filter_coef.mat;
h = floor(2^(COEF_WIDTH-1)*0.9*filter_coef);
fvtool(h);%%
% ===============================================================
% 混频混到零中频后处理(暂不考虑抽取)
% ===============================================================
% part_1 混频到零中频
if SIM_SEL == 1NCO_i     = cos(2*pi*f*t);NCO_q     = -sin(2*pi*f*t);sig_i_zif = sig_if.*NCO_i;sig_q_zif = sig_if.*NCO_q;figure;subplot(211);freq = (0:N-1)/N*FS-FS/2;plot(freq,20*log10(abs(fft(sig_i_zif+1i*sig_q_zif))));title('混频到零中频的频谱图(ffthift之前)');subplot(212);freq = (0:N-1)/N*FS-FS/2;plot(freq,20*log10(abs(fftshift(fft(sig_i_zif+1i*sig_q_zif)))));title('混频到零中频的频谱图(ffthift之后)');% part_2 低通滤波sig_i = conv(h,sig_i_zif);sig_i = sig_i(1,1:N);sig_q = conv(h,sig_q_zif);sig_q = sig_q(1,1:N);figure;freq = (0:N-1)/N*FS_2-FS/2;plot(freq,20*log10(abs(fftshift(fft(sig_i+1i*sig_q)))));
end% ===============================================================
% 使用0.25*FS进行混频(滤波后再进行抽取,防止频谱混叠)
% ===============================================================
if SIM_SEL == 2% part_1 使用0.25*FS进行混频NCO_i     = cos(2*pi*FS_4*t);NCO_q     = -sin(2*pi*FS_4*t);sig_i_mif = sig_if.*NCO_i;sig_q_mif = sig_if.*NCO_q;figure;subplot(211);freq = (0:N-1)/N*FS;plot(freq,20*log10(abs(fft(sig_i_mif+1i*sig_q_mif))));title('混频 后的频谱图(ffthift之前)');subplot(212);freq = (0:N-1)/N*FS-FS/2;plot(freq,20*log10(abs(fftshift(fft(sig_i_mif+1i*sig_q_mif)))));title('混频 后的频谱图(ffthift之后)');% part_2 低通滤波    sig_i = conv(h,sig_i_mif);sig_i = sig_i(1,1:N);sig_q = conv(h,sig_q_mif);sig_q = sig_q(1,1:N);figure;subplot(211);freq = (0:N-1)/N*FS;plot(freq,20*log10(abs(fft(sig_i+1i*sig_q))));title('混频-滤波 后的频谱图(ffthift之前)');subplot(212);freq = (0:N-1)/N*FS-FS_2;plot(freq,20*log10(abs(fftshift(fft(sig_i+1i*sig_q)))));title('混频-滤波 后的频谱图(ffthift之前)');% part_3 2倍抽取sig_i_d2 = sig_i(1,1:2:end);sig_q_d2 = sig_q(1,1:2:end);figure;subplot(211);freq = (0:N_2-1)/N_2*FS_2;plot(freq,20*log10(abs(fft(sig_i_d2+1i*sig_q_d2))));title('混频-滤波-抽取 后的频谱图(ffthift之前)');subplot(212);freq = (0:N_2-1)/N_2*FS_2-FS_4;plot(freq,20*log10(abs(fftshift(fft(sig_i_d2+1i*sig_q_d2)))));title('混频-滤波-抽取 后的频谱图(ffthift之后)');
end% ===============================================================
% 使用0.25*FS进行混频(混频后进行两倍抽取)
% 这一部分的仿真标明,在混频之后马上就进行混频是错误的,很可能造成混叠
% 以采样率为3000M,输入信号为500M为例,以0.25*FS进行混频,
% 混频后两个频率分别为-250M(对应2750M),-1250M(对应1750M),
% 两个频点都大于0.5*FS,直接进行2倍抽取会造成信号混叠,之后再进行滤波也
% 得不到错误的结果
% ===============================================================
if SIM_SEL == 3fprintf('这是一个反例,混频后马上进行抽取是错误的!\n')% part_1 使用0.25*FS进行混频NCO_i     = cos(2*pi*FS_4*t);NCO_q     = -sin(2*pi*FS_4*t);sig_i_mif = sig_if.*NCO_i;sig_q_mif = sig_if.*NCO_q;sig_i_mif_d2 = sig_i_mif(1,1:2:end);sig_q_mif_d2 = sig_q_mif(1,2:2:end);figure;subplot(211);freq = (0:N_2-1)/N_2*FS_2;plot(freq,20*log10(abs(fft(sig_i_mif_d2+1i*sig_q_mif_d2))));title('混频后两倍抽取的频谱图(ffthift之前)');subplot(212);freq = (0:N_2-1)/N_2*FS_2-FS_2/2;plot(freq,20*log10(abs(fftshift(fft(sig_i_mif_d2+1i*sig_q_mif_d2)))));title('混频后两倍抽取的频谱图(ffthift之后)');% part_2 低通滤波sig_i = conv(h,sig_i_mif_d2);sig_i = sig_i(1,1:N_2);sig_q = conv(h,sig_q_mif_d2);sig_q = sig_q(1,1:N_2);figure;freq = (0:N_2-1)/N_2*FS_2-FS_2/2;plot(freq,20*log10(abs(fftshift(fft(sig_i+1i*sig_q)))));
end

运行效果如下图,

数字上变频(DUC)

%% 清空一切
clc;clear all;close all;%% 信号参数设置
FS = 1500;
TS = 1/FS;
N  = 4096;
f  = 300;
t  = (0:N-1)*TS;N_X2  = N*2;
FS_2  = FS/2;
FS_X2 = FS*2;
t_x2 = (0:N_X2-1)*TS;SIG_AMP = 100;
COEF_WIDTH = 16;%%
SIM_SEL = 2;%% 生成IQ信号
sig_i = cos(2*pi*f*t);
sig_q = sin(2*pi*f*t);
figure;
subplot(211);
freq = (0:N-1)/N*FS;
plot(freq,20*log10(abs(fft(sig_i + 1i*sig_q))));
title('IQ信号频谱图(ffthift之前)');
subplot(212);
freq = (0:N-1)/N*FS-FS/2;
plot(freq,20*log10(abs(fftshift(fft(sig_i + 1i*sig_q)))));
title('IQ信号频谱图(ffthift之后)');%% 设计半带滤波器(一半系数为0,便于节省硬件资源)
load filter_coef.mat;
h = floor(2^(COEF_WIDTH-1)*0.9*filter_coef);
% fvtool(h);% ===============================================================
%
% ===============================================================
if SIM_SEL == 2% part_1 2倍插值sig_i_m2 = zeros(1,N_X2);sig_q_m2 = zeros(1,N_X2);sig_i_m2(1,1:2:end) = sig_i;sig_q_m2(1,1:2:end) = sig_q;figure;subplot(211);freq = (0:N_X2-1)/N_X2*FS_X2;plot(freq,20*log10(abs(fft(sig_i_m2+1i*sig_q_m2))));title('插值 后的频谱图(ffthift之前)');subplot(212);freq = (0:N_X2-1)/N_X2*FS_X2-FS;plot(freq,20*log10(abs(fftshift(fft(sig_i_m2+1i*sig_q_m2)))));title('插值 后的频谱图(ffthift之后)');% part_2 低通滤波  sig_i_lpf = conv(h,sig_i_m2);sig_i_lpf = sig_i_lpf(1,1:N_X2);sig_q_lpf = conv(h,sig_q_m2);sig_q_lpf = sig_q_lpf(1,1:N_X2);figure;subplot(211);freq = (0:N_X2-1)/N_X2*FS_X2;plot(freq,20*log10(abs(fft(sig_i_lpf+1i*sig_q_lpf))));title('插值-滤波 后的频谱图(ffthift之前)');subplot(212);freq = (0:N_X2-1)/N_X2*FS_X2-FS;plot(freq,20*log10(abs(fftshift(fft(sig_i_lpf+1i*sig_q_lpf)))));title('插值-滤波 后的频谱图(ffthift之前)');% part_3 使用0.25*FS_X2进行混频NCO_i     = cos(2*pi*FS_2*t_x2);NCO_q     = -sin(2*pi*FS_2*t_x2);sig_i_mif = sig_i_lpf.*NCO_i;sig_q_mif = sig_q_lpf.*NCO_q;figure;subplot(211);freq = (0:N_X2-1)/N_X2*FS_X2;plot(freq,20*log10(abs(fft(sig_i_mif+1i*sig_q_mif))));title('混频 后的频谱图(ffthift之前)');subplot(212);freq = (0:N_X2-1)/N_X2*FS_X2-FS;plot(freq,20*log10(abs(fftshift(fft(sig_i_mif+1i*sig_q_mif)))));title('混频 后的频谱图(ffthift之后)');
end

运行效果如下图,

FIR并行滤波

在下图中,由于滤波器的位置已经放在抽取之后了(这意味着无法获得因为抽取而导致的数据率下降的优势),而直接实现结构多相滤波结构滤波器阶数并没有发生变化,因此两种设计方式的资源消耗量是一样的。
不过,考虑到多相滤波结构能够将一个大的滤波器分解成多个小的滤波器,比较适合模块复用

一般多相滤波用在多速率转换的场合,能够减小数据率。对于下采样而言,一般是先抽取再滤波;对于上采样而言,一般是先滤波后插值。

数字下变频(DDC)_数字上变频(DUC)相关推荐

  1. 通信应用中数字上变频DUC与数字下变频DDC详细原理(带图)

    目录 关于上下变频的仿真: 数字插值滤波与数字正交上变频的仿真与实验----基于高速DAC芯片 数字正交下变频与数字滤波抽取的仿真与实验----基于高速ADC芯片 1.DUC与DDC的应用场景来源[2 ...

  2. js 数字递增递减_数字推理满分技巧 !不是干货,请批我!

    公众号:兼得公考 数字推理不是广东的特色考点,但广东的数字推理是比较有"特色"的,他的特色就是简单,特别是2019年的数字推理.但我们不能因为某一两年考得简单而简单地学,为了让大家 ...

  3. 数字货币交易所_数字货币交易所开发运营的盈利模式

    数字货币从不看好变成了一年2400亿美金的交易额,数字货币交易所也从 几家变成了500家,而且数量还在不断的增长.那到底数字货币交易所到底有什 么魔力,让众多资本趋之若鹜,数字货币交易所的盈利模式是什 ...

  4. 东南大学数字信号处理实验_数字与信号处理实验1 离散时间信号分析

    实验一 离散时间信号分析 一.实验目的 掌握两个序列的相加.相乘.移位.反褶.卷积等基本运算. 二.实验原理 1.序列的基本概念 离散时间信号在数学上可用时间序列来表示,其中代表序列的第n个数字,n代 ...

  5. java 数字 下划线_数字文字中的下划线– Java 7功能

    java 数字 下划线 One of the Java 7 features is underscores in numeric literals. You can place underscores ...

  6. 1一9数字行书写法_数字1-9的标准写法-1~9的书写格式

    数字 1-9 的标准写法 要求:用田字格本书写,数字 1 - 9 书写时占左边格. 1 :从日字格的右上角附近起笔,画斜线到左下角附近. 2 :起笔碰左线,然后向上向右碰线,略成半圆,斜线到左下角,碰 ...

  7. vue 数字动画递增_数字滚动动画效果 vue组件化

    主要思路是利用css属性writing-mode:vertical-lr:通过设定最大字符长度,补零,去循环,然后添加style translate和transition来完成想要的效果: 子组件根据 ...

  8. 数字旅游解决方案_数字标牌将助力打造新中国服务经济 吸引更精准受众创造更多机遇...

    根据福布斯的预测,截至2019年底,中国的零售市场价值将超过5.6万亿美元:而到2020年,中国将跃身成为全球最大的零售市场.与此同时,在旅游业方面,到2020年,预计每年将有近1.3亿游客到访中国, ...

  9. arduino数字时钟元件_数字元器件基础

    arduino数字时钟元件 In this tutorial we will learn about the basics of Digital computers. We will cover In ...

最新文章

  1. linux 下根据cpp文件快速书写头文件
  2. opencv 图像 抠图 算法_我讨厌这个绿油油的头像!我用opencv换一下背景
  3. MySQL Group Replication 介绍
  4. 算法设计之—直接 遍历/穷举法、贪心算法、动态规划、回溯法、EM方法
  5. vue-router 响应路由参数的变化
  6. LeetCode 505. 迷宫 II(BFS / Dijkstra 最短路径)
  7. 2022年数据库云管平台白皮书
  8. C# 事务提交(非数据库)
  9. 随便说说removeFromSuperview方法
  10. linux怎么装vnc插件,linux下安装基于GNOME的VNC连接工具Vinagre
  11. 用美图秀秀给人像P上西装,并改成纯色背景
  12. html批量打印保存到pdf,网页批量打印成PDF,并按条件合并成大PDF、生成页码
  13. STM32F401标准固件库配置
  14. 不解决产能低下的问题,直供模式也拯救不了小米
  15. Tesla_T4加速卡详细参数
  16. 需要了解的常用Webpack插件配置-loader加载器
  17. 一种基于最大吸收功率的卫星太阳能电池板安装方案
  18. 大数据知识框架体系总结梳理
  19. (三)市场调查大赛系列——抽样调查的误差分析和质量控制
  20. Ubuntu ROS 安装

热门文章

  1. 崮德好文连载 - 活该你是工程师(个人如何成长?)
  2. java 字符流图片_java 字节流、字符流(复制图片、复制文本)
  3. vue使用lodop打印插件
  4. 数据挖掘实战:电力窃漏电用户自动识别
  5. php 用户认证,用户认证-php初级教程手册,php程序员教程网
  6. @JsonSerialize注解 对double保留两位小数
  7. 【Android】Launcher3 app列表桌面图标按安装时间排序app图标
  8. 微信小程序-云函数-获取用户输入信息并上传到后台数据库
  9. 配置echarts下载图片分辨率,以及报错解决
  10. 父进程产生一系列子进程,每个子进程打印自己的PID然后退出,父进程最后打印PID