IMRR(镜像抑制比)计算和仿真 (2)

本文通过MATLAB代码展示了如何进行镜像抑制比(IMRR)的计算和仿真。作者首先介绍了仿真背景,然后提供了详细的MATLAB代码实现,包括信号生成、IQ不平衡模拟和IMRR的估计、理论计算以及近似计算。仿真结果显示理论计算与估计结果高度一致,证实了代码的有效性。最后,给出了不同增益和相位不平衡下IMRR的二维仿真结果。
摘要由CSDN通过智能技术生成

目录

1. 前言       

2. 代码(matlab)

3.代码补充说明

4. 仿真结果


1. 前言       

         接着上一篇(IMRR(镜像抑制比)计算和仿真 (1)),我们将做一个简单的matlab仿真,看看仿真结果与上述理论推导结果是否会保持一致。

2. 代码(matlab)

% 改编自:http://www.dsplog.com/2013/01/31/imrr-transmit-iq-gain-phase-imbalance/

clear; close all; clc

debug = 1; % Enable the debug mode to visualize the spectrum, etc.

N    = 256; % Simulation data block length
Fsig = 20;  % Modulation signal frequency, i.e, the frequency of Complex sinusoid
gammadB_array = [-3:.1:3]; % Q/I amplitude difference in unit of dB
phiDeg_array  = [-6:.2:6]; % Q/I phase difference in unit of degree
[~, gammadB_zeroIdx ] = min(abs((gammadB_array-0)));
[~, phiDeg_zeroIdx  ] = min(abs((phiDeg_array-0)));

if(debug == 1)
    gammadB_array = -3;
    phiDeg_array  = -6;
end

for (ii = 1:length(gammadB_array))
    for (jj = 1:length(phiDeg_array))
        gammadB    = gammadB_array(ii); 
        phiDeg     = phiDeg_array(jj);
        gammaLin   = 10^(gammadB/20); % Convert dB to linear domain
        phiRad     = phiDeg*pi/180;   % Convert degree to radian, because sin/cos accept rad as input
        alphaLin   = gammaLin -1 ;
        
        % transmitted signal
        xt        = exp(sqrt(-1)*2*pi*Fsig*[0:N-1]/N); % Complex sinusoid
        % received signal with IQ imbalance, after quadrature demodulation
        xht_re    = real(xt) - gammaLin*sin(phiRad)*imag(xt);
        xht_im    = gammaLin*cos(phiRad/2)*imag(xt);
        xht       = complex(xht_re,xht_im);  % "h" mean hat.
        
        if(debug)
            fvtool(xt); title('Transmitter baseband signal spectrum');
            fvtool(xht);title('Receiverer baseband signal spectrum');
        end
        
        % Take fft() to find the +Fsig(desired signal) and -Fsig(image due to I/Q mismatch) components
        yF        = fft(xht,N);
        y_pfm     = yF(Fsig+1);
        y_nfm     = yF(N-Fsig+1);
        
        est_imrr_lin    = (abs(y_pfm)./abs(y_nfm))^2;
        theory_imrr_lin = (gammaLin^2 + 1  + 2*gammaLin*cos(phiRad))/(gammaLin^2 + 1  - 2*gammaLin*cos(phiRad));
        approx_imrr_lin = 4/(alphaLin^2 + phiRad^2);
        
        est_imrr_dB(ii,jj)    = 10*log10(est_imrr_lin);
        theory_imrr_dB(ii,jj) = 10*log10(theory_imrr_lin);
        approx_imrr_dB(ii,jj) = 10*log10(approx_imrr_lin);
    end
end

figure;
plot(gammadB_array,theory_imrr_dB(:,phiDeg_zeroIdx),'bs-'); hold on
plot(gammadB_array,est_imrr_dB(:,phiDeg_zeroIdx),'md-');
plot(gammadB_array,approx_imrr_dB(:,phiDeg_zeroIdx),'gx-');
xlabel('gain imbalance, dB'); ylabel('image rejection, dB'); grid on;
legend('theory','estimated','approx')
title('Image Rejection Ratio with gain imbalance alone');
axis([-3 3 10 50]);

figure;
plot(phiDeg_array,theory_imrr_dB(gammadB_zeroIdx,:),'bs-'); hold on
plot(phiDeg_array,est_imrr_dB(gammadB_zeroIdx,:),'md-');
plot(phiDeg_array,approx_imrr_dB(gammadB_zeroIdx,:),'gx-');
xlabel('phase imbalance, degree'); ylabel('image rejection, dB'); grid on;
legend('theory','estimated','approx')
title('Image Rejection Ratio with phase imbalance alone');
axis([-6 6 10 50]);

figure;
[x,y] = meshgrid(gammadB_array,phiDeg_array);
mesh(x,y,est_imrr_dB); title('IMRR vs {gammadB, phiDeg}');
axis([-3 3 -6 6 10 60]);

3.代码补充说明

        本仿真中采取了简单(偷懒)的做法。

        N取256是为了方便做FFT分析,这样在Fsig取整数时在频谱中信号分量和镜像分量会正好占一个FFT输出样点(也称bin),不会发生频谱泄露。这样根据FFT变换结果取对应bin的值就可以直接得到信号分量和镜像分量的频域幅度,并进而可以计算得出IMRR。

        如果N不是2^k,Fsig也不是设置为整数,那么FFT变换中会出现频谱泄漏,信号和镜像都会扩散到FFT输出的bin上去,这是就不能只取一个bin的值来计算信号和镜像的功率了。读者可以自行设计实验进行验证。

        在更一般性的仿真中,有两种方法可以估计信号和镜像的功率。

  1. 如上一篇(链接)所述,在时域进行滤波分别提取出信号和镜像并分别计算功率
  2. 经过FFT变换后,取以Fig和-Fig近似对应的bin为中心的一段区间内的bin的总功率分别作为信号和镜像的功率,读者可以自行设计实验进行尝试

        代码中还有一个debug开关,将debug设置为1时,只执行某一组(gamma, phi)的设定的仿真(可以修改)并输出频谱图以方便直接确认程序运行是否正常。

4. 仿真结果

        运行以上程序可以得到以下输出,可以确认仿真结果与理论计算结果非常吻合。当然这只是一个简单的仿真,有很多因素没有考虑进来,但是从提供定性的参考结果的角度来看是充分可行的。

  

 

 

        上一篇: IMRR(镜像抑制比)计算和仿真 (1)

Spectre仿真镜像抑制是一种用于处理集成电路中的故障的技术。由于随着集成电路尺寸的不断减小,故障和故障率变得越来越常见,因此需要采取措施来有效地抑制这些故障。 Spectre仿真镜像抑制技术通过创建一对镜像模型来诊断和抑制故障。这对镜像模型由一个主模型和一个镜像模型组成,它们在物理尺寸和电气特性上是相似的。主模型是正常的工作模型,而镜像模型是对主模型的一种精确复制。镜像模型与主模型完全相同,包括其中的故障。 通过进行故障注入和检测,Spectre仿真镜像抑制技术可以实现故障的诊断和抑制。故障注入是将故障引入主模型中的过程,而故障检测是通过比较主模型和镜像模型输出的差异来识别故障。通过对差异进行分析和比较,可以确定是否存在故障以及其类型和位置。 Spectre仿真镜像抑制技术具有以下优点:首先,它能够在复杂和密集集成电路中有效地诊断和抑制故障。其次,它可以提高电路的可靠性和稳定性,减少故障对电路性能和功能的影响。此外,Spectre仿真镜像抑制技术还可以帮助设计工程师了解和解决故障的原因,从而改进电路设计和制造流程。 综上所述,Spectre仿真镜像抑制技术是一种有效的故障诊断和抑制方法。通过使用镜像模型和差异分析,可以帮助提高集成电路的可靠性和稳定性,并改进电路设计和制造过程。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笨牛慢耕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值