%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 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 : 05 June 2008 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Simple Matlab example of binary Frequency Shift Keying using % coherent demodulation clear N = 10^5 % number of bits or symbols T = 8; % symbol duration t = [0:1/T:0.99]; % sampling instants tR = kron(ones(1,N),t); % repeating the sampling instants Eb_N0_dB = [0:11]; % multiple Eb/N0 values for ii = 1:length(Eb_N0_dB) % generating the bits ip = rand(1,N)>0.5; % generating 0,1 with equal probability freqM = ip+1; % converting the bits into frequency, bit0 -> frequency of 1, bit1 -> frequency of 2 freqR = kron(freqM,ones(1,T)); % repeating x = (sqrt(2)/sqrt(T))*cos(2*pi*freqR.*tR); %generating the FSK modulated signal % noise n = 1/sqrt(2)*[randn(1,N*T) + j*randn(1,N*T)]; % white gaussian noise, 0dB variance % coherent receiver y = x + 10^(-Eb_N0_dB(ii)/20)*n; % additive white gaussian noise op1 = conv(y, sqrt(2/T)*cos(2*pi*1*t)); % correlating with frequency 1 op2 = conv(y, sqrt(2/T)*cos(2*pi*2*t)); % correlating with frequency 2 % demodulation ipHat = [real(op1(T+1:T:end)) < real(op2(T+1:T:end))]; % nErr(ii) = size(find([ip - ipHat]),2); % counting the number of errors end simBer = nErr/N; theoryBer = 0.5*erfc(sqrt((10.^(Eb_N0_dB/10))/2)); %theoretical BER close all figure semilogy(Eb_N0_dB,theoryBer,'b-'); hold on semilogy(Eb_N0_dB,simBer,'mx-'); axis([0 11 10^-4 0.5]) grid on legend('theory:fsk-coh', 'sim:fsk-coh'); xlabel('Eb/No, dB') ylabel('Bit Error Rate') title('Bit error probability curve')