⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 script_16psk_gray_mapping_bit_error_rate.m

📁 Matlab code for 16 psk mapping that is gray coded
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 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		: 17 May 2008% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Bit Error Rate for 16-PSK modulation using Gray modulation mappingclearN = 10^5; % number of symbolsM = 16;   % constellation sizek = log2(M); % bits per symbolthetaMpsk = [0:M-1]*2*pi/M; % reference phase valuesEb_N0_dB  = [0:25]; % multiple Es/N0 valuesEs_N0_dB  = Eb_N0_dB + 10*log10(k);% Mapping for binary <--> Gray code conversionref = [0:M-1];map = bitxor(ref,floor(ref/2));[tt ind] = sort(map);                                ipPhaseHat = zeros(1,N);for ii = 1:length(Eb_N0_dB)        % symbol generation    % ------------------    ipBit = rand(1,N*k,1)>0.5; % random 1's and 0's    bin2DecMatrix = ones(N,1)*(2.^[(k-1):-1:0]) ; % conversion from binary to decimal    ipBitReshape =  reshape(ipBit,k,N).'; % grouping to N symbols having k bits each    ipGray = [sum(ipBitReshape.*bin2DecMatrix,2)].'; % decimal to binary        % Gray coded constellation mapping    ipDec = ind(ipGray+1)-1; % bit group to constellation point     ipPhase = ipDec*2*pi/M; % conversion to phase     ip = exp(j*ipPhase);  % modulation     s = ip;         % noise    % -----    n = 1/sqrt(2)*[randn(1,N) + j*randn(1,N)]; % white guassian noise, 0dB variance         y = s + 10^(-Es_N0_dB(ii)/20)*n; % additive white gaussian noise    % demodulation    % ------------    % finding the phase from [-pi to +pi]    opPhase = angle(y);     % unwrapping the phase i.e. phase less than 0 are     % added 2pi    opPhase(find(opPhase<0)) = opPhase(find(opPhase<0)) + 2*pi;    % rounding the received phase to the closest constellation    ipPhaseHat = 2*pi/M*round(opPhase/(2*pi/M))	;    % as there is phase ambiguity for phase = 0 and 2*pi,    % changing all phases reported as 2*pi to 0.    % this is to enable comparison with the transmitted phase    ipPhaseHat(find(ipPhaseHat==2*pi)) = 0;    ipDecHat = round(ipPhaseHat*M/(2*pi));     % Decimal to Gray code conversion    ipGrayHat = map(ipDecHat+1); % converting to decimal     ipBinHat = dec2bin(ipGrayHat,k) ; % decimal to binary    % converting binary string to number    ipBinHat = ipBinHat.';    ipBinHat = ipBinHat(1:end).';    ipBinHat = str2num(ipBinHat).' ;        % counting errors    nBitErr(ii) = size(find([ipBit- ipBinHat]),2); % couting the number of errorsend simBer = nBitErr/(N*k);theoryBer = (1/k)*erfc(sqrt(k*10.^(Eb_N0_dB/10))*sin(pi/M));close all; figuresemilogy(Eb_N0_dB,theoryBer,'bs-','LineWidth',2);hold onsemilogy(Eb_N0_dB,simBer,'mx-','LineWidth',2);axis([0 20 10^-5 1])grid onlegend('theory', 'simulation');xlabel('Eb/No, dB')ylabel('Bit Error Rate')title('Bit error probability curve for 16-PSK modulation')

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -