数字下变频(DDC)_数字上变频(DUC)

news/2024/10/16 23:31:56/

文章目录

  • 数字下变频(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并行滤波

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

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


http://www.ppmy.cn/news/394959.html

相关文章

数字下变频(DDC)和数字上变频(DUC)

数字下变频(DDC) Digital Down Converters ,DDC的主要目的是经过数字混频将AD采集的中频(IF)数字信号频谱下变频到基带信号,然后完成抽取滤波恢复原始信号,数字下变频时采用数字信号技术来实现…

关于动态创建option 【copy from 姬光】

在处理表单的时候,经常会有这样的需求:给定一定的数据来生成某个select的option,或者更进一步,某些option或许预先选中或者有高亮显示。 下面我们就来温习一下几种option的创建方式。这个需求要求某些选项要预先有高亮显示&#x…

js动态添加options(转载)

JS动态添加Option的几种方式 在处理表单的时候,经常会有这样的需求:给定一定的数据来生成某个select的option,或者更进一步,某些option或许预先选中或者有高亮显示。 下面我们就来温习一下几种option的创建方式。这个需求要求某…

编程菜鸟看云计算、移动互联网和物联网

通过联机黑白棋看云计算、移动互联网和物联网 一、联机黑白棋 终于把通信的一个小项目——联机版的黑白棋做出来了~ 说来真是惭愧,本来在暑假结束的时候就应该去做的,但是~╮(╯▽╰)╭ 先来说说黑白棋吧: 胡老师说:不要在没做一件…

C# 从零开始编写一个修改“植物大战僵尸”阳光的内存辅助

相信很多朋友都喜欢玩游戏,那么大多数人都会选择开挂 虽然最近在做一个C#天谕模拟G(类小精灵) 目测账号已被 封要求5000天币解冻 不然等三天、当时差点没吓一跳500 软妹币 知道有很多人都开过小挂挂 但是开的时间久以后免 会萌生自己研发外挂的想法 那么我先简…

游戏服务器开发技术小结

转载请自觉标明原创出处 原文链接:http://gameislife.info/archives/category/游戏开发 游戏服务器开发技术小结 1 概述 本文从开发者的视角,浅析游戏服务器开发涉及到的几个技术层面,并说明这几个层面我们可以选择的解决方案。 一般地&a…

游戏开发流程

游戏服务器开发技术小结1 概述本文从开发者的视角,浅析游戏服务器开发涉及到的几个技术层面,并说明这几个层面我们可以选择的解决方案。 一般地,会把游戏服务器的架构划分如下三层:网络接入层、游戏逻辑层、数据存储层&#xff0…

面向亿万级用户的QQ一般做什么?——兴趣部落的 Web 同构直出分享

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:李强,腾讯web开发工程师商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。原文链接:http://wetest.qq.com/lab/view/348.html 一、什么是同构直…