⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matlab仿真ddc程序.txt

📁 用6阶CIC实现
💻 TXT
字号:

function ddc_main_c;
     clc
     clear
     %输入信号
     N=38400*18;
     ys=randn(1,N)+j*randn(1,N);  
         
% CIC     
      cic_m = 1; 
      cic_ratio = 4;                                   % Interpolation factor 
      cic_stage = 6;
      
% RRC FIR 成型滤波器
   
      forcePFIRnum = 64; 
      pfir_alpha = .22;             
      pfir_oversample_factor = 2;   
      pfir_ratio = 1;                     
      pfir_Passbd = .1;             
      pfir_Stopbd = -90;            
      pfir_Fp = 2.05e6;             
      pfir_Fs = 2.5e6;              
      pfir_windowtype = 4;           
      PFIRcoef_bits = 18;                 
  % CFIR 
      numCFIRtaps = 32;              
      cfir_Passbd = .1;              
      cfir_Stopbd = -90;             
      cfir_Fp = 2.1e6;                 
      cfir_Fs = 4.9e6;               
      cfir_ratio = 2;              
      CFIRcoef_bits = 18;           
      clock_rate = 61.44e6;
        
     CFIRClk = 15.36e6;                 
     PFIRClk = 7.68e6;                   
     symbol_rate = 3.84e6;
   
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   % 计算CIC 系数 
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    numConv = cic_stage - 1; 
    %boxtaps1 = ones(((cic_ratio-1) * cic_m), 1);
    boxtaps = [1,1,1,zeros(1,10)]';
    a = boxtaps;
    for n = 1 : numConv
       a = conv(a, boxtaps);
    end   
    CICtaps = a;
    CICtaps = CICtaps/sum(CICtaps);
   
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   % cfir coefficients    
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    
    CFIRtaps=[-4.3378e-005,-0.00030659,-0.00073532,-0.0002154,0.0022624,0.0035708,-0.0022471,-0.011223,-0.005056,0.020402,0.027417,-0.020653,-0.074136,-0.014301,0.18948,0.3856,0.3856,0.18948,-0.014301,-0.074136,-0.020653,0.027417,0.020402,-0.005056,-0.011223,-0.0022471,0.0035708,0.0022624,-0.0002154,-0.00073532,-0.00030659,-4.3378e-005];
    CFIRtaps = CFIRtaps/sum(CFIRtaps);
     
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   %CFIR coefficients 
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   flen = length(CFIRtaps);  
   X(1: flen) = 1: 1: flen;
   figure(1);
   plot(X, CFIRtaps,'.b');
   titletext = sprintf('CFIR filter, %d taps', flen);
   title( titletext);
   zoom on;
   
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   % PFIR coefficients 
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   PFIRtaps =  [1.3755e-005,-3.6532e-005,-3.6687e-007,-3.4754e-005,1.4136e-005,0.00013723,-7.0815e-005,-0.0002004,0.00012791,0.00014732,-7.2394e-005,3.0015e-005,-0.00021621,-0.00021917,0.00072527,0.00023771,-0.0011567,-2.8379e-005,0.00087779,-4.1044e-005,0.0009272,-0.0011116,-0.0049059,0.0054664,0.011119,-0.016119,-0.018777,0.038547,0.026313,-0.089119,-0.031845,0.31239,0.53375,0.31192,-0.031748,-0.088715,0.026154,0.038255,-0.018606,-0.015947,0.010984,0.0053909,-0.0048303,-0.0010927,0.00090985,-4.0206e-005,0.00085834,-2.77e-005,-0.0011269,0.00023114,0.00070382,-0.00021224,-0.00020894,2.8939e-005,-6.9637e-005,0.00014136,0.00012241,-0.00019127,-6.7392e-005,0.00013019,1.3366e-005,-3.2744e-005,-3.4431e-007,-3.4139e-005];
   PFIRtaps =  PFIRtaps/sum(PFIRtaps); 
       
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   % plot PFIR filter results
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   flen = length(PFIRtaps);  
   X(1: flen) = 1: 1: flen;
   figure(2);
   plot(X, PFIRtaps,'.b');
   titletext = sprintf('PFIR filter, %d taps', flen);
   title( titletext);
   zoom on;
   
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   % CIC 滤波,抽取
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   ys = filter(CICtaps,1,ys);
   ys = downsample(ys,cic_ratio);
    
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   % CFIR 滤波,抽取
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
   ys = filter(CFIRtaps,1,ys);
   ys = downsample(ys,2);
   figure(3);
   titletext = sprintf('h(x) = CFIR* CIC');
   %dectaps = scalereal( dectaps, FIRmax); % scalereal?
   FFT64KNoFig( ys,CFIRClk, titletext);  % function FFT64KNoFig( d, FClk, titletext)
   zoom on;                                   
   
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   % PFIR 滤波,抽取
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
   ys = filter(PFIRtaps,1,ys);
   ys = downsample(ys,2);
   figure(4);
   titletext = sprintf('h(x) = PFIR * CFIR* CIC' );
   FFT64KNoFig( ys,PFIRClk, titletext); 
   zoom on; 
return; 


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
function FFT64KNoFig( d, FClk, titletext)  % FFT64KNoFig( dectaps, CFIRClk, titletext); 
   FFTsize = 65536;                         % 2^16
   lend = length(d);                        % 系数长度
   b(1: FFTsize) = 0;                       % zero fill the array
   b(1: lend) = d(1: lend);                 % 赋值

   F= fft(b, FFTsize);                      % FFT h(t)
   F= F(1: FFTsize/2);                       % We only need the first half of the FFT

   Xmax = FClk/2;                           %第1 Nequist区域
   X= linspace(0, Xmax, FFTsize/2);         %产生从 0-Xmax的 FFTsize/2 个点,

   F= F + (realmin + realmin*i);            % This prevents log(0) warnings
   FF= 20*log10(abs(F));                    % Compute log of magnitude

   maxFF = max(FF);
   FF = FF - maxFF;                         % dBc 

   plot(X, FF);
   title( titletext);
   axis( [0 Xmax (max(FF)-120) max(FF)]); grid;            % Plot the data
return; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -