基于matlab的简单数字下变频器的设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字下变频器的基本结构:
NCO:产生正余弦序列,即 I/Q 两路信号。 CIC 滤波器,适用于系统中的第一级抽取和进行大的抽取因子的抽取工作,并降低速率。 FIR 滤波器,完成对整个信道的整形滤波。 DDC 主要有三种实现途径:采用专用芯片、自制专用芯片、基于 DSP 或 FPGA 等通用芯片。
NCO 采用的直接数字频率合成技术(DDS)是一种实用的频率合成技术,DDS 由相位概念出 发直接合成所需波形的一种新的频率合成技术。DDS 合成技术采用了简便和有效的查表法。
运用 matlab 进行 NCO 的仿真:
程序: t=0:0.001*10^(-6):10^-6; I=110*cos(7*(10^7)*t-0.5*pi); subplot(2,1,1);plot(t,I);grid on; Q=110*sin(7*(10^7)*t+0.5*pi); subplot(2,1,2);plot(t,Q);grid on; 信号的频率为 11.2MHz CIC 滤波器: CIC 滤波器, 即级联积分梳状滤波器, 具有结构简单, 便于处理, 运算速度快等特点。CIC 滤波器的积分器H1(Z) 是不稳定系统, 如果不采取措施, 它们级联后会出现溢出现象。另外,
11000
1001
0.809
11010
1010 1011 1100 1101 1110 1111
0.866 0.914 0.951 0.978 0.994 1.000
Matlab程序: %fout: Output frequency %Fs: Sample frequency %Bits: Number of bits of the LUT %endtime: Expected simulation endtime %y: Output sine wave %t: Output time
三、matlab 验证与解释
利用 DDS 技术生成信号源;
将各相位所对应的幅值 A 按二进制编码并存入 ROM 中。1 周期内共有 60 等分,由于正
弦波对为奇对称,对和为偶对称,因此 ROM 中只需存储~范围内的幅值码。若以=计算,在 0~pi/2 之间共有 15 等分,其幅值在 ROM 中共占 16 个地址单元。因为=16,所以可按 4 位地
H1(e
jω
)
=
1
−
1 e−
jω
1 =
e− jω / 2 • (e jω / 2 − e− jω / 2 )
− j • e jω / 2 =
2 • sin(ω ) 2
e j (ω −π ) / 2 =
ω 2 • sin( )
2
H1(z),H2(z)的matlab程序代码: w=0:pi/100:2*pi;
由于ADC 在中频进行采样,采样速率有可能很高,而混频后得到的数据率和采样速率是一致 的,后级的FIR 滤波器根本无法达到这个处理速率,因此先通过CIC(级联积分梳状)和HB (半带)滤波抽取器进行大的抽取,使数据率快速降下来,再由FIR 进行滤波。CIC 滤波器 的系数都为1,因此实现非常简单,只有加减运算,没有乘法运算,硬件实现时可达到很高 的处理速率,很适合作抽取系统中的第一级抽取和进行大的抽取因子的工作。但由于CIC 滤 波器的过渡带和阻带衰减特性不是很好,通常需要采用五级CIC 级联的方法加大过渡带和阻 带的衰减,抽取因子为1~32。HB 滤波器由于其系数几乎一半为零,滤波时运算量减少一半, 因此被作为第二级低通滤波和抽取。HB 的抽取因子固定为2,特别适合采样率降低一半的要 求。通过CIC 和HB 滤波抽取后,基带信号由最初的高数据率被降到较低的速率,适于后级 FIR 处理。FIR 滤波器的主要用途是对整个信道进行整形滤波,需要的时候还可以作为匹配 滤波器使用。
结果:
FIR 滤波器 设计方法以直接逼近所需离散时间系统的频率响应为基础,主要是选择有限长度的 h(n),尽 可能逼近传输函数。线性相位 FIR 滤波器单位冲激响应 h(n)的设计常用等纹波法、窗函数法 或频率抽样法。 窗函数法是指定连续的理想频率响应,然后用积分方法求出理想滤波器的单位抽样响应。容 易做到线性相位、稳定,可以设计各种特殊类型的滤波器,设计方法简单。但是幅频指标不 理想,不易控制边缘频率。其中采用汉宁(hanning)窗设计的滤波器,主瓣和旁瓣有大约 50dB 的差距,并且过渡带宽、通带波动比较小,而且其旁瓣下降比较快,基本满足设计要求。 Matlab 程序: Window=hanning(31); b=fir1(30,0.4,Window); freqz(b,1) 汉宁窗(Hanning Window) 调用格式:w=hanning(n) ,根据长度 n 产生一个汉宁窗 w。 基于窗函数的 FIR 滤波器设计 利用 MATLAB 提供的函数 firl 来实现 调用格式:firl (n,Wn,’ftype’,Window),n 为阶数、Wn 是截止频率(如果输入是形如[W1 W2]的矢量时,本函数将设计带通滤波器,其通带为 W1<ω<W2)、ftype 是滤波器的类型(低 通-省略该参数、高通-ftype=high、带阻-ftype=stop)、Window 是窗函数。
function [y, t]=dds_matlab(fout, Fs, Bits, endtime) t=2*pi*(0:2^Bits-1)/2^Bits; LUT=sin(t); subplot(2,1,1) plot(t, LUT) figure(1); grid on
t=0:1/Fs:endtime; N=length(t); n=1; y=zeros(1, N); IND=zeros(1, N); % Input Frequency Word k=floor(fout/Fs*2^Bits); index=0;
HB0 0
0
-1000
-50
-2000
-100
-3000
0
0.5
1
0
0.5
1
HB4 100
HB4 0
0 -2000
-100 -4000
-200
-300
-6000
0
0.5
1
0
0.5
1
HB 滤波器的实例调用:
Matlab 程序:
fs = 16e3; % 采样频率
n = 0:5119; % 采样点数
x = sin(2* pi*1e3/fs* n);
CIC的冲击响应的Z变换为:
D −1
∑ H (z) = h(n)iz−n
n=0
1− z−D = 1− z−1
=
1
1 −z
−1
i(1
−
z
−D
)
= H1(z)iH2 (z)
其中H1(Z)为
H1
(
z)
=
1 1− z−1
,H2(Z)为
。
H2(z) =1− z−D
分析H1(Z)和H2(Z) 从结构上可以看出H1(Z)其实就是一个积分器。 通过Z变换和傅立叶变换的关系可得两式的傅立叶变换
HB半带滤波器: 半带滤波器是一种基于抽取和内插原理的滤波器,它是一种特殊的低通 FIR(有限冲激响应) 数字滤波器——一种抽因子为 2 的抽取滤波器,这种滤波器由于通带和阻带相对于二分之一 Nyquist 频率对称,因而有近一半的滤波器系数为 O。由于系数为 0 的部分在运算的过程中 不需要消耗运算量,所以运算量减少了一半,使实际滤波过程中的运算量大幅度减少。因此 计算的效率高,实时性比较强,有利于滤波运算的实时实现,在多速率信号处理中有着特别 重要的地位,并且得到了广泛的应用 。
址吗对数据 ROM 进行寻址。
地址码
幅度(满度值为 1)
幅值编码
0000
0.000
00000
0001
0.105
00011
0010
0.207
00111
0011
0.309
01010
0100
0.406
01101
0101wk.baidu.com
0.500
10000
0110
0.588
10011
0111
0.669
10101
1000
0.743
%输入原始信号
b = firhalfband(18,0.00245,'dev'); % 获得设计的半带滤波器抽头系数
impz(b);
% 半带滤波器的冲击响应
h = mfilt.firdecim(2,b);
figure
y_fi = filter(h,x);
x = double(x);
y = double(y_fi);
y = y/max(abs(y));
stem(n(1:44)/fs,x(1:44),'r');
xlabel('时间(sec)');
ylabel('输入信号');
hold on
figure
stem(n(1:2:44)/fs,y(5:26),'filled');
xlabel('信号值');
ylabel('时间(sec)');
滤波器级数过多还会引起高频失真现象。为了获得较大的阻带衰减, 降低混叠影响, 在信号 带宽一定的条件下,应尽可能的采用小的抽取因子或增大采样率fs , 后者意味着CIC 抽取 滤波器一般要用在抽取系统的第一级(输入采样率最高)。 CIC的冲击响应:
⎧1 , 0 ≤ n ≤ D -1 h(n) = ⎨⎩0 , 其他
H2 ( jω) = 1− e− jωD
=
e−
jωD / 2
•
2
⎡ ⎢ ⎣
e
jωD / 2
− e− 2
jωD / 2
⎤ ⎥ ⎦
= 2 j • e− jωD / 2 • sin(ωD ) 2
= 2 • e j(π −ωD)/ 2 • sin(ω D ) 2
H1=exp(j*(w-pi)/2)./(2.*sin(w/2)); H2=2.*exp(j*(pi-w*10)/2).*sin(w*10/2); subplot(2,2,1); plot(w/pi,abs(H1));axis([0,2,-10,40]);grid; subplot(2,2,2); plot(w/pi,angle(H1)); axis([0,2,-pi,pi]);grid; subplot(2,2,3);plot(w/pi,abs(H2));axis([0,2,min(abs(H2)),max(abs(H2))]);grid; subplot(2,2,4); plot(w/pi,angle(H2)); axis([0,2,-pi,pi]);grid;
HB 滤波器非常多的用于实现 D=2 M 倍的抽取,计算效率比普通 FIR 效率高出近一倍,时间也
H(e jw ) = 1− H (e j(π −ω) )
更快。HB 性质:
H (e jπ / 2 ) = 0.5
由 matlab 的 HB 滤波器程序可以得到 HB 滤波器幅频特性、相频特性:
HB0 50
一、课程设计问题的提出:
试设计一数字下变频器,并用 matlab 仿真;
二、解决问题的原理、技术方案以及 matlab 验证:
数字下变频器的原理说明:
数字下变频器(DDC)是接收机 A/D 变换后,首先要完成的处理工作,一般的 DDC 由本地 振荡器(NCO)、混频器、低通滤波器和抽取器组成.主要作用:其一是把中频信号变为零中频 信号;其二是降低采样率。从频谱上看,数字下变频将 A/D 采样后信号从中频变换,到基带。 这样的处理由两步完成:首先是将输入信号与正交载波相乘,然后进行数字滤波滤除不需要 的频率分量。NCO,混频器,数字滤波器速率要等于采样率,采样率低于 600MHz,很难实 时的在 FPGA 中进行处理。
H1(z),H2(z)的响应图像如图所示:
N阶CIC抽取滤波器的频幅响应:
H (e jω ) = H1(e jω ) • H 2(e jω )
sin(ωD )
=
2 • e jω (1−D)/ 2
sin(ω )
2
= D • Sa(ω D ) • Sa−1(ω ) • e jω(1−D)/2
2
2
Matlab程序: wstep = pi/100; w=0 : wstep : 2*pi; H=10*sin(w*10/2)./(10.*sin(w/2)).*exp(j*w*(1-10)/2); subplot(1,2,1); plot(w/pi,abs(H));axis([0,2,min(abs(H))-10,max(abs(H))+10]);grid; subplot(1,2,2); plot(w/pi,angle(H)); axis([0,2,-pi,pi]);grid; 当然,由于CIC梳妆滤波器在滤波上所采用的采样频率过大,因而需要进行多级的采样,以 保证信号的准确程度。
while n<=N IND(n)=index; index=index+k; index=mod(index, 2^Bits); n=n+1; end IND=IND+1; y=LUT(IND); subplot(2,1,2) plot(t,y) figure(1); axis([0 endtime -1.2 1.2]);
11100 11101 11110 11111 11111 11111
grid on 实例调用: dds_matlab(100,1000,5,1)
为了是频率达到要求的10MHz左右,且体现DDS技术的特性,取输入值: dds_matlab(10000000,100000000,7,0.000001)
NCO:产生正余弦序列,即 I/Q 两路信号。 CIC 滤波器,适用于系统中的第一级抽取和进行大的抽取因子的抽取工作,并降低速率。 FIR 滤波器,完成对整个信道的整形滤波。 DDC 主要有三种实现途径:采用专用芯片、自制专用芯片、基于 DSP 或 FPGA 等通用芯片。
NCO 采用的直接数字频率合成技术(DDS)是一种实用的频率合成技术,DDS 由相位概念出 发直接合成所需波形的一种新的频率合成技术。DDS 合成技术采用了简便和有效的查表法。
运用 matlab 进行 NCO 的仿真:
程序: t=0:0.001*10^(-6):10^-6; I=110*cos(7*(10^7)*t-0.5*pi); subplot(2,1,1);plot(t,I);grid on; Q=110*sin(7*(10^7)*t+0.5*pi); subplot(2,1,2);plot(t,Q);grid on; 信号的频率为 11.2MHz CIC 滤波器: CIC 滤波器, 即级联积分梳状滤波器, 具有结构简单, 便于处理, 运算速度快等特点。CIC 滤波器的积分器H1(Z) 是不稳定系统, 如果不采取措施, 它们级联后会出现溢出现象。另外,
11000
1001
0.809
11010
1010 1011 1100 1101 1110 1111
0.866 0.914 0.951 0.978 0.994 1.000
Matlab程序: %fout: Output frequency %Fs: Sample frequency %Bits: Number of bits of the LUT %endtime: Expected simulation endtime %y: Output sine wave %t: Output time
三、matlab 验证与解释
利用 DDS 技术生成信号源;
将各相位所对应的幅值 A 按二进制编码并存入 ROM 中。1 周期内共有 60 等分,由于正
弦波对为奇对称,对和为偶对称,因此 ROM 中只需存储~范围内的幅值码。若以=计算,在 0~pi/2 之间共有 15 等分,其幅值在 ROM 中共占 16 个地址单元。因为=16,所以可按 4 位地
H1(e
jω
)
=
1
−
1 e−
jω
1 =
e− jω / 2 • (e jω / 2 − e− jω / 2 )
− j • e jω / 2 =
2 • sin(ω ) 2
e j (ω −π ) / 2 =
ω 2 • sin( )
2
H1(z),H2(z)的matlab程序代码: w=0:pi/100:2*pi;
由于ADC 在中频进行采样,采样速率有可能很高,而混频后得到的数据率和采样速率是一致 的,后级的FIR 滤波器根本无法达到这个处理速率,因此先通过CIC(级联积分梳状)和HB (半带)滤波抽取器进行大的抽取,使数据率快速降下来,再由FIR 进行滤波。CIC 滤波器 的系数都为1,因此实现非常简单,只有加减运算,没有乘法运算,硬件实现时可达到很高 的处理速率,很适合作抽取系统中的第一级抽取和进行大的抽取因子的工作。但由于CIC 滤 波器的过渡带和阻带衰减特性不是很好,通常需要采用五级CIC 级联的方法加大过渡带和阻 带的衰减,抽取因子为1~32。HB 滤波器由于其系数几乎一半为零,滤波时运算量减少一半, 因此被作为第二级低通滤波和抽取。HB 的抽取因子固定为2,特别适合采样率降低一半的要 求。通过CIC 和HB 滤波抽取后,基带信号由最初的高数据率被降到较低的速率,适于后级 FIR 处理。FIR 滤波器的主要用途是对整个信道进行整形滤波,需要的时候还可以作为匹配 滤波器使用。
结果:
FIR 滤波器 设计方法以直接逼近所需离散时间系统的频率响应为基础,主要是选择有限长度的 h(n),尽 可能逼近传输函数。线性相位 FIR 滤波器单位冲激响应 h(n)的设计常用等纹波法、窗函数法 或频率抽样法。 窗函数法是指定连续的理想频率响应,然后用积分方法求出理想滤波器的单位抽样响应。容 易做到线性相位、稳定,可以设计各种特殊类型的滤波器,设计方法简单。但是幅频指标不 理想,不易控制边缘频率。其中采用汉宁(hanning)窗设计的滤波器,主瓣和旁瓣有大约 50dB 的差距,并且过渡带宽、通带波动比较小,而且其旁瓣下降比较快,基本满足设计要求。 Matlab 程序: Window=hanning(31); b=fir1(30,0.4,Window); freqz(b,1) 汉宁窗(Hanning Window) 调用格式:w=hanning(n) ,根据长度 n 产生一个汉宁窗 w。 基于窗函数的 FIR 滤波器设计 利用 MATLAB 提供的函数 firl 来实现 调用格式:firl (n,Wn,’ftype’,Window),n 为阶数、Wn 是截止频率(如果输入是形如[W1 W2]的矢量时,本函数将设计带通滤波器,其通带为 W1<ω<W2)、ftype 是滤波器的类型(低 通-省略该参数、高通-ftype=high、带阻-ftype=stop)、Window 是窗函数。
function [y, t]=dds_matlab(fout, Fs, Bits, endtime) t=2*pi*(0:2^Bits-1)/2^Bits; LUT=sin(t); subplot(2,1,1) plot(t, LUT) figure(1); grid on
t=0:1/Fs:endtime; N=length(t); n=1; y=zeros(1, N); IND=zeros(1, N); % Input Frequency Word k=floor(fout/Fs*2^Bits); index=0;
HB0 0
0
-1000
-50
-2000
-100
-3000
0
0.5
1
0
0.5
1
HB4 100
HB4 0
0 -2000
-100 -4000
-200
-300
-6000
0
0.5
1
0
0.5
1
HB 滤波器的实例调用:
Matlab 程序:
fs = 16e3; % 采样频率
n = 0:5119; % 采样点数
x = sin(2* pi*1e3/fs* n);
CIC的冲击响应的Z变换为:
D −1
∑ H (z) = h(n)iz−n
n=0
1− z−D = 1− z−1
=
1
1 −z
−1
i(1
−
z
−D
)
= H1(z)iH2 (z)
其中H1(Z)为
H1
(
z)
=
1 1− z−1
,H2(Z)为
。
H2(z) =1− z−D
分析H1(Z)和H2(Z) 从结构上可以看出H1(Z)其实就是一个积分器。 通过Z变换和傅立叶变换的关系可得两式的傅立叶变换
HB半带滤波器: 半带滤波器是一种基于抽取和内插原理的滤波器,它是一种特殊的低通 FIR(有限冲激响应) 数字滤波器——一种抽因子为 2 的抽取滤波器,这种滤波器由于通带和阻带相对于二分之一 Nyquist 频率对称,因而有近一半的滤波器系数为 O。由于系数为 0 的部分在运算的过程中 不需要消耗运算量,所以运算量减少了一半,使实际滤波过程中的运算量大幅度减少。因此 计算的效率高,实时性比较强,有利于滤波运算的实时实现,在多速率信号处理中有着特别 重要的地位,并且得到了广泛的应用 。
址吗对数据 ROM 进行寻址。
地址码
幅度(满度值为 1)
幅值编码
0000
0.000
00000
0001
0.105
00011
0010
0.207
00111
0011
0.309
01010
0100
0.406
01101
0101wk.baidu.com
0.500
10000
0110
0.588
10011
0111
0.669
10101
1000
0.743
%输入原始信号
b = firhalfband(18,0.00245,'dev'); % 获得设计的半带滤波器抽头系数
impz(b);
% 半带滤波器的冲击响应
h = mfilt.firdecim(2,b);
figure
y_fi = filter(h,x);
x = double(x);
y = double(y_fi);
y = y/max(abs(y));
stem(n(1:44)/fs,x(1:44),'r');
xlabel('时间(sec)');
ylabel('输入信号');
hold on
figure
stem(n(1:2:44)/fs,y(5:26),'filled');
xlabel('信号值');
ylabel('时间(sec)');
滤波器级数过多还会引起高频失真现象。为了获得较大的阻带衰减, 降低混叠影响, 在信号 带宽一定的条件下,应尽可能的采用小的抽取因子或增大采样率fs , 后者意味着CIC 抽取 滤波器一般要用在抽取系统的第一级(输入采样率最高)。 CIC的冲击响应:
⎧1 , 0 ≤ n ≤ D -1 h(n) = ⎨⎩0 , 其他
H2 ( jω) = 1− e− jωD
=
e−
jωD / 2
•
2
⎡ ⎢ ⎣
e
jωD / 2
− e− 2
jωD / 2
⎤ ⎥ ⎦
= 2 j • e− jωD / 2 • sin(ωD ) 2
= 2 • e j(π −ωD)/ 2 • sin(ω D ) 2
H1=exp(j*(w-pi)/2)./(2.*sin(w/2)); H2=2.*exp(j*(pi-w*10)/2).*sin(w*10/2); subplot(2,2,1); plot(w/pi,abs(H1));axis([0,2,-10,40]);grid; subplot(2,2,2); plot(w/pi,angle(H1)); axis([0,2,-pi,pi]);grid; subplot(2,2,3);plot(w/pi,abs(H2));axis([0,2,min(abs(H2)),max(abs(H2))]);grid; subplot(2,2,4); plot(w/pi,angle(H2)); axis([0,2,-pi,pi]);grid;
HB 滤波器非常多的用于实现 D=2 M 倍的抽取,计算效率比普通 FIR 效率高出近一倍,时间也
H(e jw ) = 1− H (e j(π −ω) )
更快。HB 性质:
H (e jπ / 2 ) = 0.5
由 matlab 的 HB 滤波器程序可以得到 HB 滤波器幅频特性、相频特性:
HB0 50
一、课程设计问题的提出:
试设计一数字下变频器,并用 matlab 仿真;
二、解决问题的原理、技术方案以及 matlab 验证:
数字下变频器的原理说明:
数字下变频器(DDC)是接收机 A/D 变换后,首先要完成的处理工作,一般的 DDC 由本地 振荡器(NCO)、混频器、低通滤波器和抽取器组成.主要作用:其一是把中频信号变为零中频 信号;其二是降低采样率。从频谱上看,数字下变频将 A/D 采样后信号从中频变换,到基带。 这样的处理由两步完成:首先是将输入信号与正交载波相乘,然后进行数字滤波滤除不需要 的频率分量。NCO,混频器,数字滤波器速率要等于采样率,采样率低于 600MHz,很难实 时的在 FPGA 中进行处理。
H1(z),H2(z)的响应图像如图所示:
N阶CIC抽取滤波器的频幅响应:
H (e jω ) = H1(e jω ) • H 2(e jω )
sin(ωD )
=
2 • e jω (1−D)/ 2
sin(ω )
2
= D • Sa(ω D ) • Sa−1(ω ) • e jω(1−D)/2
2
2
Matlab程序: wstep = pi/100; w=0 : wstep : 2*pi; H=10*sin(w*10/2)./(10.*sin(w/2)).*exp(j*w*(1-10)/2); subplot(1,2,1); plot(w/pi,abs(H));axis([0,2,min(abs(H))-10,max(abs(H))+10]);grid; subplot(1,2,2); plot(w/pi,angle(H)); axis([0,2,-pi,pi]);grid; 当然,由于CIC梳妆滤波器在滤波上所采用的采样频率过大,因而需要进行多级的采样,以 保证信号的准确程度。
while n<=N IND(n)=index; index=index+k; index=mod(index, 2^Bits); n=n+1; end IND=IND+1; y=LUT(IND); subplot(2,1,2) plot(t,y) figure(1); axis([0 endtime -1.2 1.2]);
11100 11101 11110 11111 11111 11111
grid on 实例调用: dds_matlab(100,1000,5,1)
为了是频率达到要求的10MHz左右,且体现DDS技术的特性,取输入值: dds_matlab(10000000,100000000,7,0.000001)