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

📄 analyze_ddc.m

📁 This is GMS down upper converter and down converter in simulink. you may understand the structure in
💻 M
📖 第 1 页 / 共 2 页
字号:
%% Clear variables
if ClearVars, clear ycic_ddc_norm sg_ycic_tdm sg_ycic_tdm_chan failed ii ch; end

%% Analyze raw CFIR output
if exist('sg_yc_ddc_raw')
    load results/yc_ddc1.mat
    sg_yc1_start = min(find(sg_yc_ddc_raw(:,2)==1));
    yc1_start    = 2;  % Trim padded zero
    
    %% Chop preceding zeroes and tail, decimate and combine real/imag
    sg_yc1_temp = [];
    for ii=sg_yc1_start:2*clk_os*m_cic*m_cfir/n_ch:size(sg_yc_ddc_raw,1)-1
        sg_yc1_temp = [ sg_yc1_temp ; sg_yc_ddc_raw(ii,1)+j*sg_yc_ddc_raw(ii+clk_os*m_cic*m_cfir/n_ch,1) ];
    end

    %% Split CIC dout into channels and analyze
    sg_yc1_chan = zeros(ceil(length(sg_yc1_temp)/n_carr),n_carr);
    sg_yc1_temp = [ sg_yc1_temp ; zeros(numel(sg_yc1_chan)-length(sg_yc1_temp),1) ];
    for ii=1:n_carr
        sg_yc1_chan(:,ii) = sg_yc1_temp(ii:n_carr:end);
    end
    clear sg_yc1_temp;
    sg_yc1_chan = sg_yc1_chan(1:end-1,:);   % Drop end row, may hold filler zeros

    if ShowPlots>=0
        for ii=1:n_carr
            figure;  plot(real(yc_ddc1(yc1_start:yc1_start-1+size(sg_yc1_chan(1:end,ii),1),ii)));
            hold on; plot(real(sg_yc1_chan(:,ii)),'r:'); hold off;
            figure;  plot(imag(yc_ddc1(yc1_start:yc1_start-1+size(sg_yc1_chan(1:end,ii),1),ii)));
            hold on; plot(imag(sg_yc1_chan(:,ii)),'r:'); hold off;
        end
    end

%     %% Check samples match
%     failed=0;
%     display('CFIR RAW OUTPUT CHECK :');
%     for ch=1:n_carr
%         i_mismatches = 0; q_mismatches = 0;
%         display(sprintf('Checking Carrier %d',ch));
%         for ii=1:size(sg_yc1_chan,1)
%             if real(yc_ddc1(ii+yc1_start-1,ch)) ~= real(sg_yc1_chan(ii,ch))
%                 if (i_mismatches+q_mismatches)<50
%                     display(sprintf('I value mismatch on Channel %d at position %d',ch,ii));
%                 end
%                 i_mismatches = i_mismatches+1;
%             end
%             if imag(yc_ddc1(ii+yc1_start-1,ch)) ~= imag(sg_yc1_chan(ii,ch))
%                 if (i_mismatches+q_mismatches)<50
%                     display(sprintf('Q value mismatch on Channel %d at position %d',ch,ii));
%                 end
%                 q_mismatches = q_mismatches+1;
%             end
%         end
%         display(sprintf('Carrier %d: I mismatches = %d',ch,i_mismatches));
%         display(sprintf('Carrier %d: Q mismatches = %d',ch,q_mismatches));
%         display(sprintf('Carrier %d: Total mismatches = %d',ch,i_mismatches+q_mismatches));
%         if (i_mismatches+q_mismatches)>0
%             failed=1;
%         end
%     end
%     if failed==1
%         error('Raw output from CFIR does not match Matlab model raw CFIR output!')
%     else
%         display(sprintf('Matched raw CFIR output to Matlab model raw CFIR output! [Samples=%d]',size(sg_yc1_chan,1)))
%     end
end
%% Clear variables
if ClearVars, clear yc_ddc1 sg_yc_ddc_raw sg_yc1_chan failed ii ch; end

%% Analyze CFIR output
if exist('sg_yc_ddc')
    load results/yc_ddc.mat
    sg_yc_start = min(find(sg_yc_ddc(:,2)==1));
    yc_start    = 2;  % Trim padded zero
    
    %% Chop preceding zeroes and tail, decimate and combine real/imag
    sg_yc_temp = [];
    for ii=sg_yc_start:2*clk_os*m_cic*m_cfir/n_ch:size(sg_yc_ddc,1)-clk_os*m_cic*m_cfir/n_ch
        sg_yc_temp = [ sg_yc_temp ; sg_yc_ddc(ii,1)+j*sg_yc_ddc(ii+clk_os*m_cic*m_cfir/n_ch,1) ];
    end

    %% Split CIC dout into channels and analyze
    sg_yc_chan = zeros(ceil(length(sg_yc_temp)/n_carr),n_carr);
    sg_yc_temp = [ sg_yc_temp ; zeros(numel(sg_yc_chan)-length(sg_yc_temp),1) ];
    for ii=1:n_carr
        sg_yc_chan(:,ii) = sg_yc_temp(ii:n_carr:end);
    end
    clear sg_yc_temp;
    sg_yc_chan = sg_yc_chan(1:end-1,:);   % Drop end row, may hold filler zeros

    if ShowPlots>=0
        for ii=1:n_carr
            figure;  plot(real(yc_ddc(yc_start:yc_start-1+size(sg_yc_chan(1:end,ii),1),ii)));
            hold on; plot(real(sg_yc_chan(:,ii)),'r:'); hold off;
            figure;  plot(imag(yc_ddc(yc_start:yc_start-1+size(sg_yc_chan(1:end,ii),1),ii)));
            hold on; plot(imag(sg_yc_chan(:,ii)),'r:'); hold off;
        end
    end

%     %% Check samples match
%     failed=0;
%     display('CFIR OUTPUT CHECK :');
%     for ch=1:n_carr
%         i_mismatches = 0; q_mismatches = 0;
%         display(sprintf('Checking Carrier %d',ch));
%         for ii=1:size(sg_yc_chan,1)
%             if real(yc_ddc(ii+yc_start-1,ch)) ~= real(sg_yc_chan(ii,ch))
%                 if (i_mismatches+q_mismatches)<50
%                     display(sprintf('I value mismatch on Channel %d at position %d',ch,ii));
%                 end
%                 i_mismatches = i_mismatches+1;
%             end
%             if imag(yc_ddc(ii+yc_start-1,ch)) ~= imag(sg_yc_chan(ii,ch))
%                 if (i_mismatches+q_mismatches)<50
%                     display(sprintf('Q value mismatch on Channel %d at position %d',ch,ii));
%                 end
%                 q_mismatches = q_mismatches+1;
%             end
%         end
%         display(sprintf('Carrier %d: I mismatches = %d',ch,i_mismatches));
%         display(sprintf('Carrier %d: Q mismatches = %d',ch,q_mismatches));
%         display(sprintf('Carrier %d: Total mismatches = %d',ch,i_mismatches+q_mismatches));
%         if (i_mismatches+q_mismatches)>0
%             failed=1;
%         end
%     end
%     if failed==1
%         error('Output from CFIR does not match Matlab model CFIR output!')
%     else
%         display(sprintf('Matched CFIR output to Matlab model CFIR output! [Samples=%d]',size(sg_yc_chan,1)))
%     end
end
%% Clear variables
if ClearVars, clear yc_ddc sg_yc_ddc sg_yc_chan failed ii ch; end

%% Analyze PFIR output
if exist('sg_yp_ddc')
    load results/yp_ddc.mat
    sg_yp_start = min(find(sg_yp_ddc(:,3)==1));
    yp_start    = 2;  % Trim padded zero
    
    %% Chop preceding zeroes and tail, decimate and combine real/imag
    sg_yp_temp = [];
    for ii=sg_yp_start:2*clk_os*m_cic*m_cfir*m_pfir/n_ch:size(sg_yp_ddc,1)-clk_os*m_cic*m_cfir*m_pfir/n_ch
        sg_yp_temp = [ sg_yp_temp ; sg_yp_ddc(ii,1)+j*sg_yp_ddc(ii+clk_os*m_cic*m_cfir*m_pfir/n_ch,1) ];
    end

    %% Split CIC dout into channels and analyze
    sg_yp_chan = zeros(ceil(length(sg_yp_temp)/n_carr),n_carr);
    sg_yp_temp = [ sg_yp_temp ; zeros(numel(sg_yp_chan)-length(sg_yp_temp),1) ];
    for ii=1:n_carr
        sg_yp_chan(:,ii) = sg_yp_temp(ii:n_carr:end);
    end
    clear sg_yp_temp;
    sg_yp_chan = sg_yp_chan(1:end-1,:);   % Drop end row, may hold filler zeros

    if ShowPlots>=0
        for ii=1:n_carr
            figure;  plot(real(yp_ddc(yp_start:yp_start-1+size(sg_yp_chan(1:end,ii),1),ii)));
            hold on; plot(real(sg_yp_chan(:,ii)),'r:'); hold off;
            figure;  plot(imag(yp_ddc(yp_start:yp_start-1+size(sg_yp_chan(1:end,ii),1),ii)));
            hold on; plot(imag(sg_yp_chan(:,ii)),'r:'); hold off;
        end
    end

%     %% Check samples match
%     failed=0;
%     display('PFIR OUTPUT CHECK :');
%     for ch=1:n_carr
%         i_mismatches = 0; q_mismatches = 0;
%         display(sprintf('Checking Carrier %d',ch));
%         for ii=1:size(sg_yp_chan,1)
%             if real(yp_ddc(ii+yp_start-1,ch)) ~= real(sg_yp_chan(ii,ch))
%                 if (i_mismatches+q_mismatches)<50
%                     display(sprintf('I value mismatch on Channel %d at position %d',ch,ii));
%                 end
%                 i_mismatches = i_mismatches+1;
%             end
%             if imag(yp_ddc(ii+yp_start-1,ch)) ~= imag(sg_yp_chan(ii,ch))
%                 if (i_mismatches+q_mismatches)<50
%                     display(sprintf('Q value mismatch on Channel %d at position %d',ch,ii));
%                 end
%                 q_mismatches = q_mismatches+1;
%             end
%         end
%         display(sprintf('Carrier %d: I mismatches = %d',ch,i_mismatches));
%         display(sprintf('Carrier %d: Q mismatches = %d',ch,q_mismatches));
%         display(sprintf('Carrier %d: Total mismatches = %d',ch,i_mismatches+q_mismatches));
%         if (i_mismatches+q_mismatches)>0
%             failed=1;
%         end
%     end
%     if failed==1
%         error('Output from PFIR does not match Matlab model PFIR output!')
%     else
%         display(sprintf('Matched PFIR output to Matlab model PFIR output! [Samples=%d]',size(sg_yp_chan,1)))
%     end
end
%% Clear variables
if ClearVars, clear yp_ddc sg_yp_ddc sg_yp_chan failed ii ch; end

%% Analyze Scaler output
if exist('sg_scaler_ddc')
    load results/scaled_yp_ddc.mat
    sg_scaler_start = min(find(sg_scaler_ddc(:,3)==1));
    scaled_yp_start    = 2;  % Trim padded zero
    
    %% Chop preceding zeroes and tail, decimate and combine real/imag
    sg_scaler_temp = [];
    for ii=sg_scaler_start:2:size(sg_scaler_ddc,1)-1
        sg_scaler_temp = [ sg_scaler_temp ; sg_scaler_ddc(ii,1)+j*sg_scaler_ddc(ii+1,1) ];
    end

    %% Split CIC dout into channels and analyze
    sg_scaler_chan = zeros(ceil(length(sg_scaler_temp)/n_carr),n_carr);
    sg_scaler_temp = [ sg_scaler_temp ; zeros(numel(sg_scaler_chan)-length(sg_scaler_temp),1) ];
    for ii=1:n_carr
        sg_scaler_chan(:,ii) = sg_scaler_temp(ii:n_carr:end);
    end
    clear sg_scaler_temp;
    sg_scaler_chan = sg_scaler_chan(1:end-1,:);   % Drop end row, may hold filler zeros

    if ShowPlots>=0
        for ii=1:n_carr
            figure;  plot(real(scaled_yp_ddc(scaled_yp_start:scaled_yp_start-1+size(sg_scaler_chan(1:end,ii),1),ii)));
            hold on; plot(real(sg_scaler_chan(:,ii)),'r:'); hold off;
            figure;  plot(imag(scaled_yp_ddc(scaled_yp_start:scaled_yp_start-1+size(sg_scaler_chan(1:end,ii),1),ii)));
            hold on; plot(imag(sg_scaler_chan(:,ii)),'r:'); hold off;
        end
    end

%     %% Check samples match
%     failed=0;
%     display('SCALER OUTPUT CHECK :');
%     for ch=1:n_carr
%         i_mismatches = 0; q_mismatches = 0;
%         display(sprintf('Checking Carrier %d',ch));
%         for ii=1:size(sg_scaler_chan,1)
%             if real(scaled_yp_ddc(ii+scaled_yp_start-1,ch)) ~= real(sg_scaler_chan(ii,ch))
%                 if (i_mismatches+q_mismatches)<50
%                     display(sprintf('I value mismatch on Channel %d at position %d',ch,ii));
%                 end
%                 i_mismatches = i_mismatches+1;
%             end
%             if imag(scaled_yp_ddc(ii+scaled_yp_start-1,ch)) ~= imag(sg_scaler_chan(ii,ch))
%                 if (i_mismatches+q_mismatches)<50
%                     display(sprintf('Q value mismatch on Channel %d at position %d',ch,ii));
%                 end
%                 q_mismatches = q_mismatches+1;
%             end
%         end
%         display(sprintf('Carrier %d: I mismatches = %d',ch,i_mismatches));
%         display(sprintf('Carrier %d: Q mismatches = %d',ch,q_mismatches));
%         display(sprintf('Carrier %d: Total mismatches = %d',ch,i_mismatches+q_mismatches));
%         if (i_mismatches+q_mismatches)>0
%             failed=1;
%         end
%     end
%     if failed==1
%         error('Output from Scaler does not match Matlab model Scaler output!')
%     else
%         display(sprintf('Matched Scaler output to Matlab model Scaler output! [Samples=%d]',size(sg_scaler_chan,1)))
%     end
end
%% Clear variables
if ClearVars, clear scaled_yp_ddc sg_scaler_ddc sg_scaler_chan failed ii ch; end

%% Analyze TDDM output
if exist('sg_scaler_ddc')
    load results/scaled_yp_ddc.mat
    sg_scaler_start = min(find(sg_scaler_ddc(:,3)==1));
    scaled_yp_start    = 2;  % Trim padded zero
    
    %% Chop preceding zeroes and tail, decimate and combine real/imag
    sg_scaler_temp = [];
    for ii=sg_scaler_start:2:size(sg_scaler_ddc,1)-1
        sg_scaler_temp = [ sg_scaler_temp ; sg_scaler_ddc(ii,1)+j*sg_scaler_ddc(ii+1,1) ];
    end

    %% Split CIC dout into channels and analyze
    sg_scaler_chan = zeros(ceil(length(sg_scaler_temp)/n_carr),n_carr);
    sg_scaler_temp = [ sg_scaler_temp ; zeros(numel(sg_scaler_chan)-length(sg_scaler_temp),1) ];
    for ii=1:n_carr
        sg_scaler_chan(:,ii) = sg_scaler_temp(ii:n_carr:end);
    end
    clear sg_scaler_temp;
    sg_scaler_chan = sg_scaler_chan(1:end-1,:);   % Drop end row, may hold filler zeros

    if ShowPlots>=0
        for ii=1:n_carr
            figure;  plot(real(scaled_yp_ddc(scaled_yp_start:scaled_yp_start-1+size(sg_scaler_chan(1:end,ii),1),ii)));
            hold on; plot(real(sg_scaler_chan(:,ii)),'r:'); hold off;
            figure;  plot(imag(scaled_yp_ddc(scaled_yp_start:scaled_yp_start-1+size(sg_scaler_chan(1:end,ii),1),ii)));
            hold on; plot(imag(sg_scaler_chan(:,ii)),'r:'); hold off;
        end
    end

%     %% Check samples match
%     failed=0;
%     display('SCALER OUTPUT CHECK :');
%     for ch=1:n_carr
%         i_mismatches = 0; q_mismatches = 0;
%         display(sprintf('Checking Carrier %d',ch));
%         for ii=1:size(sg_scaler_chan,1)
%             if real(scaled_yp_ddc(ii+scaled_yp_start-1,ch)) ~= real(sg_scaler_chan(ii,ch))
%                 if (i_mismatches+q_mismatches)<50
%                     display(sprintf('I value mismatch on Channel %d at position %d',ch,ii));
%                 end
%                 i_mismatches = i_mismatches+1;
%             end
%             if imag(scaled_yp_ddc(ii+scaled_yp_start-1,ch)) ~= imag(sg_scaler_chan(ii,ch))
%                 if (i_mismatches+q_mismatches)<50
%                     display(sprintf('Q value mismatch on Channel %d at position %d',ch,ii));
%                 end
%                 q_mismatches = q_mismatches+1;
%             end
%         end
%         display(sprintf('Carrier %d: I mismatches = %d',ch,i_mismatches));
%         display(sprintf('Carrier %d: Q mismatches = %d',ch,q_mismatches));
%         display(sprintf('Carrier %d: Total mismatches = %d',ch,i_mismatches+q_mismatches));
%         if (i_mismatches+q_mismatches)>0
%             failed=1;
%         end
%     end
%     if failed==1
%         error('Output from Scaler does not match Matlab model Scaler output!')
%     else
%         display(sprintf('Matched Scaler output to Matlab model Scaler output! [Samples=%d]',size(sg_scaler_chan,1)))
%     end
end
%% Clear variables
if ClearVars, clear scaled_yp_ddc sg_scaler_ddc sg_scaler_chan failed ii ch; end

⌨️ 快捷键说明

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