www.gusucode.com > rf 工具箱matlab源码程序 > rf/+rfckt/@mixer/addmixspur.m
function spurdata = addmixspur(h, spurdata, zl, zs, z0, cktindex) %ADDMIXSPUR Add mixer spurs. % SPURDATA = ADDMIXSPUR(H, SPURDATA, ZL, ZS, Z0, CKTINDEX) adds the spurs % generated by mixer spur table. % % See also RFCKT.MIXER % Copyright 2003-2007 The MathWorks, Inc. narginchk(6,6); % Calculate new spurs if isa(h.MixerSpurData, 'rfdata.mixerspur') psignal = spurdata.Pin; frf = spurdata.Freq{cktindex+1-1}(1); flo = h.FLO; table = h.MixerSpurData.Data; [N, M] = size(h.MixerSpurData.Data); nfreq = length(spurdata.Freq{cktindex+1}); nspur = 0; if spurdata.TotalNMixers == 1 for n1=1:N n = n1-1; for m1=1:M m = m1-1; if ((n+m)<=min(N,M)) && (table(n1,m1) < 99) pspur = psignal - table(n1,m1); if (n==1) && (m==1) if strcmpi(h.MixerType,'Downconverter') fspur = frf + flo; idxspur = 'Spur: FRF+FLO'; else fspur = abs(frf - flo); idxspur = 'Spur: |FRF-FLO|'; end nspur = nspur + 1; spurdata.Pout{cktindex+1}(nfreq+nspur, 1) = pspur; spurdata.Freq{cktindex+1}(nfreq+nspur, 1) = fspur; spurdata.Indexes{cktindex+1}{nfreq+nspur, 1} = idxspur; spurdata.Pin(nspur, 1) = pspur; spurdata.Fin(nspur, 1) = fspur; spurdata.Idxin{nspur, 1} = idxspur; else fspur = abs(n*frf - m*flo); if m == 0 idxspur = sprintf('Spur: %dFRF', n); elseif n == 0 idxspur = sprintf('Spur: %dFLO', m); elseif m == 1 idxspur = sprintf('Spur: |%dFRF-FLO|', n); elseif n == 1 idxspur = sprintf('Spur: |FRF-%dFLO|', m); else idxspur = sprintf('Spur: |%dFRF-%dFLO|', n, m); end nspur = nspur + 1; spurdata.Pout{cktindex+1}(nfreq+nspur, 1) = pspur; spurdata.Freq{cktindex+1}(nfreq+nspur, 1) = fspur; spurdata.Indexes{cktindex+1}{nfreq+nspur, 1} = idxspur; spurdata.Pin(nspur, 1) = pspur; spurdata.Fin(nspur, 1) = fspur; spurdata.Idxin{nspur, 1} = idxspur; if ~(n==0) && ~(m==0) fspur = n*frf + m*flo; if m == 1 idxspur = sprintf('Spur: %dFRF+FLO', n); elseif n == 1 idxspur = sprintf('Spur: FRF+%dFLO', m); else idxspur = sprintf('Spur: %dFRF+%dFLO', n, m); end nspur = nspur + 1; spurdata.Pout{cktindex+1}(nfreq+nspur, 1) = pspur; spurdata.Freq{cktindex+1}(nfreq+nspur, 1) = fspur; spurdata.Indexes{cktindex+1}{nfreq+nspur, 1} = idxspur; spurdata.Pin(nspur, 1) = pspur; spurdata.Fin(nspur, 1) = fspur; spurdata.Idxin{nspur, 1} = idxspur; end end end end end else for n1=1:N n = n1-1; for m1=1:M m = m1-1; if ((n+m)<=min(N,M)) && (table(n1,m1) < 99) pspur = psignal - table(n1,m1); if (n==1) && (m==1) if strcmpi(h.MixerType,'Downconverter') fspur = frf + flo; idxspur = sprintf('Spur by mixer_%d: FRF+FLO', spurdata.NMixers); else fspur = abs(frf - flo); idxspur = sprintf('Spur by mixer_%d: |FRF-FLO|', spurdata.NMixers); end nspur = nspur + 1; spurdata.Pout{cktindex+1}(nfreq+nspur, 1) = pspur; spurdata.Freq{cktindex+1}(nfreq+nspur, 1) = fspur; spurdata.Indexes{cktindex+1}{nfreq+nspur, 1} = idxspur; spurdata.Pin(nspur, 1) = pspur; spurdata.Fin(nspur, 1) = fspur; spurdata.Idxin{nspur, 1} = idxspur; else fspur = abs(n*frf - m*flo); if m == 0 idxspur = sprintf('Spur by mixer_%d: %dFRF', spurdata.NMixers, n); elseif n == 0 idxspur = sprintf('Spur by mixer_%d: %dFLO', spurdata.NMixers, m); elseif m == 1 idxspur = sprintf('Spur by mixer_%d: |%dFRF-FLO|', spurdata.NMixers, n); elseif n == 1 idxspur = sprintf('Spur by mixer_%d: |FRF-%dFLO|', spurdata.NMixers, m); else idxspur = sprintf('Spur by mixer_%d: |%dFRF-%dFLO|', spurdata.NMixers, n, m); end nspur = nspur + 1; spurdata.Pout{cktindex+1}(nfreq+nspur, 1) = pspur; spurdata.Freq{cktindex+1}(nfreq+nspur, 1) = fspur; spurdata.Indexes{cktindex+1}{nfreq+nspur, 1} = idxspur; spurdata.Pin(nspur, 1) = pspur; spurdata.Fin(nspur, 1) = fspur; spurdata.Idxin{nspur, 1} = idxspur; if ~(n==0) && ~(m==0) fspur = n*frf + m*flo; if m == 1 idxspur = sprintf('Spur by mixer_%d: %dFRF+FLO', spurdata.NMixers, n); elseif n == 1 idxspur = sprintf('Spur by mixer_%d: FRF+%dFLO', spurdata.NMixers, m); else idxspur = sprintf('Spur by mixer_%d: %dFRF+%dFLO', spurdata.NMixers, n, m); end nspur = nspur + 1; spurdata.Pout{cktindex+1}(nfreq+nspur, 1) = pspur; spurdata.Freq{cktindex+1}(nfreq+nspur, 1) = fspur; spurdata.Indexes{cktindex+1}{nfreq+nspur, 1} = idxspur; spurdata.Pin(nspur, 1) = pspur; spurdata.Fin(nspur, 1) = fspur; spurdata.Idxin{nspur, 1} = idxspur; end end end end end end end