function [ y, signal] = qpsk_function ( data_length, fs, fc, EbN0, interpolation_rate, Sample_position)
w_carrier = fc/ fs;
SNR = EbN0 + 10 * log10 ( 4 / interpolation_rate) ;
data_send = randi ( [ 0 , 1 ] , data_length, 1 ) ;
data_bio = 1 - 2 * data_send;
data_i = data_bio ( 1 : 2 : end ) ;
data_q = data_bio ( 2 : 2 : end ) ;
data_upsample_i = upsample ( data_i, interpolation_rate) ;
data_upsample_q = upsample ( data_q, interpolation_rate) ;
alpha = 0.35 ;
span = 6 ;
hrc1 = rcosdesign ( 0.35 , span, interpolation_rate, 'sqrt' ) ;
hrc = ones ( 1 , interpolation_rate) ;
baseband_i = conv ( data_upsample_i, hrc) ' ;
baseband_q = conv ( data_upsample_q, hrc) ' ;
carrier_i = cos ( 2 * pi * w_carrier* [ 0 : length ( baseband_i) - 1 ] ) ;
carrier_q = - sin ( 2 * pi * w_carrier* [ 0 : length ( baseband_q) - 1 ] ) ;
send_qpsk_i = baseband_i.* carrier_i;
send_qpsk_q = baseband_q.* carrier_q;
send_qpsk = send_qpsk_i + send_qpsk_q;
carrier = carrier_i + j * carrier_q;
recv = awgn ( send_qpsk, SNR, 'measured' ) ;
recv_carrier_i = carrier_i.* recv;
recv_carrier_q = carrier_q.* recv;
recv_bio_i = conv ( recv_carrier_i, hrc) ;
recv_bio_q = conv ( recv_carrier_q, hrc) ;
recv_bio_i = recv_bio_i ( length ( hrc) : end - length ( hrc) + 1 ) ;
recv_bio_q = recv_bio_q ( length ( hrc) : end - length ( hrc) + 1 ) ;
recv_data_i = downsample ( recv_bio_i, interpolation_rate, Sample_position) ;
recv_data_q = downsample ( recv_bio_q, interpolation_rate, Sample_position) ;
scatterplot ( recv_data_i+ 1j * recv_data_q) ;
demod_data = demodulatorQPSK ( recv_data_i, recv_data_q, data_length) ;
errors = sum ( data_send ~= demod_data) ;
BER = errors / data_length;
y= BER;
signal = send_qpsk;
function [ demodulatedBitArrayQPSK ] = demodulatorQPSK ( x, y, BIT_NUMBER)
demodulatedBitArrayQPSK = zeros ( BIT_NUMBER, 1 ) ;
for i = 1 : BIT_NUMBER/ 2
if x ( i ) < 0
if y ( i ) < 0
demodulatedBitArrayQPSK ( ( 2 * i ) - 1 ) = 1 ;
demodulatedBitArrayQPSK ( 2 * i ) = 1 ;
else
demodulatedBitArrayQPSK ( ( 2 * i ) - 1 ) = 1 ;
demodulatedBitArrayQPSK ( 2 * i ) = 0 ;
end
else
if y ( i ) < 0
demodulatedBitArrayQPSK ( ( 2 * i ) - 1 ) = 0 ;
demodulatedBitArrayQPSK ( 2 * i ) = 1 ;
else
demodulatedBitArrayQPSK ( ( 2 * i ) - 1 ) = 0 ;
demodulatedBitArrayQPSK ( 2 * i ) = 0 ;
end
end
end
end