%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% All rights reserved by Krishna Pillai, http://www.dsplog.com
% The file may not be re-distributed without explicit authorization
% from Krishna Pillai.
% Checked for proper operation with Octave Version 3.0.0
% Author        : Krishna Pillai
% Email         : krishna@dsplog.com
% Version       : 1.0
% Date          : 8th March 2009
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Script for showing the spectral plot in the presence of I-Q imbalance 

clear

fsc = 0.625; % subcarrier frequency
fs  = 20;    % sampling frequency
fc  = 2.5;   % carrier frequency
N   = 64;    % fft order
t   = [0:1/fs:3.2]; % time
t   = t(1:end-1);

% iq imbalance parameters
phiDegree = 5; % phase imbalance in degrees
alpha	  = 0.25;% amplitude imbalance

% transmit signal
x = exp(j*2*pi*fsc*t); 

% carrier signal
cNoIQ   = exp(j*2*pi*fc*t); % without IQ imbalance
cWithIQ = cos(2*pi*fc*t) + j*(1+alpha)*sin(2*pi*fc*t + phiDegree*pi/180); % with IQ imbalance

% up-conversion
yNoIQ   = real(x.*cNoIQ); 
yWithIQ = real(x.*cWithIQ) ;

% downconversion
cRx           = exp(-j*2*pi*fc*t); 
xHatSC_NoIQ   = (yNoIQ.*cRx);
xHatSC_WithIQ = (yWithIQ.*cRx);

% spectrum plots
xHatSC_NoIQ_F   = fft(xHatSC_NoIQ,N)/N;
xHatSC_WithIQ_F = fft(xHatSC_WithIQ,N)/N;

close all
figure
plot([-N/2:N/2-1]*fs/N,(abs(fftshift(xHatSC_NoIQ_F))),'b', 'LineWidth', 2);
hold on
plot([-N/2:N/2-1]*fs/N,(abs(fftshift(xHatSC_WithIQ_F))),'m', 'LineWidth', 2);
legend( 'no IQ imbalance', 'with IQ imbalance');
axis([-2 2 0 1]) ;
xlabel('frequency, MHz');
ylabel('amplitude');
title('Spectrum of received signal - with/without transmit iq imbalance');
grid on










