• 大小: 10KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: Matlab
  • 标签: DDC  

资源简介

用MATLAB语言实现DDC功能,包括混频,滤波,抽取等功能。运行无误。

资源截图

代码片段和文件信息

%数字下变频仿真程序
%数字下变频的主要作用有两点:

%一、对A/D采样后的高频/中频信号序列进行频谱搬移(通过与数控振荡器产生的数字本振信号序列进行相乘下变频到基频)。
%二、对基频上高采样率的信号序列进行抽取,多采样率变换,降低数字信号序列密度。
                          
%%%%%实际的数字下变频在对高频/中频信号序列进行A/D采样之前为了防止发生频率混叠,要进行预滤波处理。
%%%%在对基频上高采样率的信号序列进行抽取之前,要通过CIC滤波,HB滤波,FIR滤波,以防止抽取时发生频谱混叠。
                         
                        
clear all;
close all;
fsamp=96e6;        %fsamp=96MHz 输入采样频率为96MHz
Ts=1/fsamp;        %Ts为fsamp的倒数 即输入采样间隔Ts
band=30e6;         %预设的采样带宽为30MHz
Tp=60e-6;          %预设的采样时间周期Tp为60us
N=Tp*fsamp;        %N为输入采样频率与采样时间周期之积。表示在采样时间周期Tp内,以fsamp的采样率采样可以得到的采样点数   N = 5760
u=band/Tp;         %u为带宽除以时宽。表示在单位时间间隔内的频带宽度。也即这30M的带宽分布在Tp=60us的时间周期上,单位时间的频带宽度
t=-Tp/2:Tp/N:Tp/2-Tp/N;       %t取点从-Tp/2开始以Tp/N为步进值增加到Tp/2-Tp/N。

f0=70e6;           %输入的已调频信号载波频率为70MHz
xs=cos(2*pi*(f0*t+0.5*u*t.^2));        %输入的已调频信号经fsamp=96MHz带通采样后的输出。相当于A/D转换后的数字信号序列
S0=fft(xsN);      %S0是对A/D转换后的数字信号序列进行N点fft的结果;
S1=abs(S0);        %S1是对s0求模的结果;
S2=(S1);
S2=awgn(S210);    %在S2的频谱中加入10db的高斯白噪声
f=0:fsamp/N:fsamp-fsamp/N;       %f的取点由0开始以fsamp/N为步进值直到fsamp-fsamp/N结束
figure(1);         %画出载频为70MHz有用信号带宽为30MHz的带通信号序列频谱
plot(f/1e620*log10(S2/max(S2)));           %横轴以MHz为单位,纵轴以dB形式,其中S2/max(S2)表示输出该带通信号序列相对幅度大小,对它取对数后的结果就是dB的形式了。
title(‘载频为70MHz有用信号带宽为30MHz的带通信号序列频谱‘);
xlabel(‘frequency(MHz)‘);                   %从频谱图中可以看出信号序列频谱有(11MHz,41MHz)和(55MHz,85MHz)两部分。
ylabel(‘Magnitude(dB)‘);                    %这是因为经fsamp=94MHz带通采样时,在fsamp/2=48MHz处发生了频谱折叠,原来信号序列频谱(55M,85M)折叠到(11MHz,41MHz)了。
grid on                                     %这两部分频谱形状一致,没有发生频谱混叠。这里的带通采样速率fsamp=96MHz是通过计算得出来的。
                                            %具体计算式如下:fsamp>=4f0/(2n+1) 且fsamp>=2B。这里f0指信号序列中心频率,B指信号序列带宽 n取正整数。
 
%NCO数控振荡器模块%
for t=1:N
    t1=(t-1)*Ts;
    ncoi_c(t)=cos(2*pi*f0*t1);             %产生频率为f0的cos数控本振(I路),这里产生数控本振的时间间隔与A/D采样间隔相同,便于序列后续相乘。
end
 
for t=1:N
    t1=(t-1)*Ts;
    ncoq_c(t)=sin(2*pi*f0*t1);            %产生频率为f0的sin数控本振(Q路),这里产生数控本振的时间间隔与A/D采样间隔相同,便于序列后续相乘。
end
ncoi=awgn(ncoi_c80);         %对产生的I路本振序列加入80dB的高斯白噪声
ncoq=awgn(ncoq_c80);         %对产生的Q路本振序列加入80dB的高斯白噪声
 
f=0:fsamp/N:fsamp-fsamp/N;    %f取点从0开始以fsamp/N为步进值直到fsamp-fsamp/N结束
u1=abs(fft(ncoi));            %对加入高斯白噪声的I路本振信号序列进行FFT后取模
u2=abs(fft(ncoq));            %对加入高斯白噪声的Q路本振信号序列进行FFT后取模
figure(2);                    %画出加入高斯白噪声后的数控振荡器I路信号频谱
plot(f/1e620*log10(u1/max(u1)));%横轴以MHz为单位,纵轴是dB形式
title(‘加入高斯白噪声的数控振荡器I路信号频谱‘);
xlabel(‘frequency(MHz)‘);
ylabel(‘Magnitude(dB)‘);
grid on
figure(3);                     %画出加入高斯白噪声后的数控振荡器Q路信号频谱
plot(f/1e620*log10(u2/max(u2)));%横轴以MHz为单位,纵轴是dB形式
title(‘加入高斯白噪声的数控振荡器Q路信号频谱‘);
xlabel(‘frequency(MHz)‘);
ylabel(‘Magnitude(dB)‘);
grid on
 
for n=1:1:N
    ysi(n)=xs(n)*ncoi(n);%A/D带通采样后信号序列与数字本振I路信号序列混频相乘(下变频)
    ysq(n)=xs(n)*ncoq(n);%A/D带通采样后信号序列与数字本振Q路信号序列混频相乘(下变频)
end
 
u1=abs(fft(ysi));%对I路下变频后序列进行FFT,取模后结果送到u1
u2=abs(fft(ysq));%对Q路下变频后序列进行FFT,取模后结果送到u2
f=0:fsamp/N:fsamp-fsamp/N;%f取点从0开始,以fsamp/N为步进值直到fsamp-fsamp

评论

共有 条评论