DDC原理及设计实现

目录

1.基础介绍

2.下变频原理

3.下变频实现仿真

4.完整matlab工程代码


1.基础介绍

数字下变频为软件无线电中数字接收机实现中的关键技术,下变频的目的是为了降低信号的载波频率或是直接去除载波频率得到基带信号。

数字下变频可以通过单通道实信号处理实现,也可以通过双通道复信号处理实现,如下图:

实信号:

 复信号:

单通道实处理时输出的基带信号频谱采样率若不合适则会出现混叠而失真,并且还需要额外的滤波器滤除混频产生的其他频率而双通道复处理时却不会,从而可以完整地保留相关信息,也可提高频带的利用率,所以正交双通道下变频模式被广泛地应用于雷达、遥测、通信、导航等众多接收系统中。

自然界的物理可实现信号x(t)都是实信号,而实信号的频谱具有共轭对称(复共轭:实部相等-偶函数,虚部为相反数-奇函数)性,即满足:

即表示实信号的正负频率幅度分量是对称的,而其相位分量正好相反。故而一个实信号,只需其正频部分或负频部分就能完全加以描述,不丢失任何信息,也不会产生虚假信号。

因此我们实际中的信号都为实信号,若要实现双通道复信号下变频,则需将原实信号变为正交复信号,常用方法有希尔伯特变换Hilbert、正交混频:

 

由上图可知,希尔伯特变换是根据实信号,计算出一个与其正交的信号出来作为复信号的虚部,原信号作为实部,得到复信号;第二种方法使用两个正交的本振信号cos(wt),sin(wt),用原信号与其混频,再用滤波器保留混频所产生的某段频率分量,得到复信号的实部与虚部。

2.下变频原理

由第一章节可知两种下变频方法,单通道实信号下变频,双通道复信号下变频,

其原理都为三角函数的原理。

单通道实信号下变频:

设信号x(t)为:

则z(t)为:

 

根据三角函数的积化和差公式:

上式z(t)等于:

 

加上低通滤波后滤除和频部分【】得到y(t):

即实现了频率从Wc搬移到Wc-W处。由上式可以看出单通道混频后会产生差频部分,和频部分,由于实际信号x(t)的频谱高频部分不会完全抑制到等于0,因此混频之后和频部分可能因为采样率不满足采样定理,导致高频部分失真叠加到有效信号中。

双通道复信号下变频:

设信号x(t)为:

 

 

正交本振信号s(t)为:

输出信号y(t)为:

由三角函数的和角公式和差角公式:

得到y(t):

上式即完成了频率从Wc搬移到Wc-W处。

3.下变频实现仿真

1、设计信号频率为2M采样率为20MSPS的原始数字实信号S;

2、将实信号进行单通道下变频到1MHz,根据上章节中的原理可知,需要一个1MHz的余弦信号进行混频,混频后会产生一个包含1MHz和3MHz的信号,对高频部分使用低通滤波器滤除便能得到一个1MHz的信号,从而完成下变频得到下变频后的实信号SL;【低通滤波器设置如下图:】

3、将原始实信号做希尔伯特变换,产生复信号F;

4、对复信号f进行双通道正交下变频,根据上章节中的原理可知,需要一个1MHz的复信号coswt-sinwt*j进行正交混频,最后得到下变频后的复信号FL1;

5、根据第一章节原理,对实信号进行正交混频同时进行下变频,用实信号乘以1M余弦信号并滤波得到实部,同时用实信号乘以1M正弦信号并滤波得到虚部,产生一个正交的复信号FL2;

6、观察S,SL,FL1,FL2的频谱,SL,FL1,FL2都完成了下变频的要求:

4.完整matlab工程代码

文件1:ddc_sim.m

%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
close all;
clc;
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
N=8192;%信号样点个数
Fx=2E6;%余弦实信号频率
Fs=20E6;%采样率20MSPS
s = zeros(1,N);
for i = 1:1:N %生成离散余弦原始实信号
    time=i/Fs;
    s(i)=sin(2*pi*Fx*time);
end
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
f_label = zeros(1,N);%将采样点换算频域横坐标轴--频率
for i = 1:N
    f_label(i) = i*Fs/N;
end
subplot(4,1,1);
plot(f_label,abs(fft(s)),'b');grid;%观察原始实信号的频谱
title('原始实信号的频谱');

%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
%实现单通道实信号下变频
Lo0 = 1E6;%1MHz的余弦混频本振信号
L0 = zeros(1,N);
for i = 1:1:N %生成离散余弦本振信号
    time=i/Fs;
    L0(i)=sin(2*pi*Lo0*time);
end
%进行单通道实信号下变频
z0 = zeros(1,N);
for i = 1:1:N %进行原始信号s和本振信号L0进行混频
   z0(i) = s(i)*L0(i);
end
ddc_fir_h = ddc_fir;%filter
SL = filter(ddc_fir_h,z0);%将混频后的信号通过APP设计的滤波器函数

subplot(4,1,2);
plot(f_label,abs(fft(SL)),'b');grid;%观察下变频后信号的频谱
title('单通道实信号下变频后的频谱');
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
%使用hilbert变换对原始实信号变为复信号
s1=hilbert(s);
Lo1 = 1E6;%1MHz的混频本振复数信号
L1r = zeros(1,N);%复数信号的实部
L1m = zeros(1,N);%复数信号的虚部
L1 = zeros(1,N);
for i = 1:1:N %生成离散余弦本振信号
    time=i/Fs;
    L1r(i)=cos(2*pi*Lo1*time);
    L1m(i)=-sin(2*pi*Lo1*time);
    L1(i)=complex(L1r(i),L1m(i));
end
%进行双通道复信号下变频
FL1 = zeros(1,N);
for i = 1:1:N %进行原始复信号s1和本振信号L1进行正交混频
   FL1(i) = s1(i)*L1(i);
end

subplot(4,1,3);
plot(f_label,abs(fft(FL1)),'b');grid;%观察下变频后信号的频谱
title('双通道复信号下变频后的频谱');
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
%使用正交混频对原始实信号变为复信号

Lo2 = 1E6;%1MHz的混频本振复数信号
L2r = zeros(1,N);%复数信号的实部
L2m = zeros(1,N);%复数信号的虚部
for i = 1:1:N %生成离散余弦本振信号
    time=i/Fs;
    L2r(i)=cos(2*pi*Lo2*time);
    L2m(i)=-sin(2*pi*Lo2*time);
end
%进行双通道正交信号下变频
FL2r = zeros(1,N);
FL2m = zeros(1,N);
for i = 1:1:N %进行原始复信号s和本振信号L1的实部和虚部进行混频
   FL2r(i) = s(i)*L2r(i);
   FL2m(i) = s(i)*L2m(i);
end
%双通道分别进行滤波
FL2rr = filter(ddc_fir_h,FL2r);
FL2mm = filter(ddc_fir_h,FL2m);
%生成正交复信号
FL2=complex(FL2rr,FL2mm);

subplot(4,1,4);
plot(f_label,abs(fft(FL2)),'b');grid;%观察下变频后信号的频谱
title('双通道正交下变频后的频谱');

///
文件2:ddc_fir.m

function Hd = ddc_fir
%DDC_FIR Returns a discrete-time filter object.

% MATLAB Code
% Generated by MATLAB(R) 9.7 and Signal Processing Toolbox 8.3.
% Generated on: 17-Sep-2021 09:52:29

% Equiripple Lowpass filter designed using the FIRPM function.

% All frequency values are in kHz.
Fs = 20000;  % Sampling Frequency

Fpass = 1100;            % Passband Frequency
Fstop = 1800;            % Stopband Frequency
Dpass = 0.057501127785;  % Passband Ripple
Dstop = 0.0001;          % Stopband Attenuation
dens  = 20;              % Density Factor

% Calculate the order from the parameters using FIRPMORD.
[N, Fo, Ao, W] = firpmord([Fpass, Fstop]/(Fs/2), [1 0], [Dpass, Dstop]);

% Calculate the coefficients using the FIRPM function.
b  = firpm(N, Fo, Ao, W, {dens});
Hd = dfilt.dffir(b);

% [EOF]
 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DDC(Digital Down Converter)是一种数字下变频器,用于将高频信号转换为低频信号。在Verilog中实现DDC需要使用合适的算法和数据结构来进行数字信号处理。 以下是一个简单的Verilog代码示例,实现DDC的功能: ```verilog module ddc( input clk, // 输入时钟信号 input [15:0] in_real, // 输入实部信号 input [15:0] in_imag, // 输入虚部信号 input [15:0] cos_phase, // 余弦相位 input [15:0] sin_phase, // 正弦相位 output reg [15:0] out_real, // 输出实部信号 output reg [15:0] out_imag // 输出虚部信号 ); reg signed [31:0] accumulator_real; reg signed [31:0] accumulator_imag; reg signed [31:0] product_real; reg signed [31:0] product_imag; always @(posedge clk) begin product_real = in_real * cos_phase - in_imag * sin_phase; product_imag = in_real * sin_phase + in_imag * cos_phase; accumulator_real = accumulator_real + product_real; accumulator_imag = accumulator_imag + product_imag; out_real = accumulator_real[31:16]; out_imag = accumulator_imag[31:16]; end endmodule ``` 这个Verilog模块接受输入的实部信号(in_real)和虚部信号(in_imag),以及余弦相位(cos_phase)和正弦相位(sin_phase)。通过乘法和累加操作,将输入信号进行数字下变频处理,并输出实部信号(out_real)和虚部信号(out_imag)。 请注意,这只是一个简单的示例代码,实际应用中可能需要考虑更复杂的情况,例如更多的输入信号和更精确的计算。此外,具体的DDC算法和数据结构可以根据应用的需求进行优化和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积文致远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值