The following is a function to generate a Walsh Hadamard Matrix of given codeword size. The codeword size has to be a power of 2.
function [H]=generateHadamardMatrix(codeSize) %[H]=generateHadamardMatrix(codeSize); % Function to generate Walsh-Hadamard Matrix where "codeSize" is the code % length of walsh code. The first matrix gives us two codes; 00, 01. The second % matrix gives: 0000, 0101, 0011, 0110 and so on % Author: Mathuranathan for https://www.gaussianwaves.com % License: Creative Commons: Attribution-NonCommercial-ShareAlike 3.0 % Unported %codeSize=64; %For testing only N=2; H=[0 0 ; 0 1]; if bitand(codeSize,codeSize-1)==0 while(N~=codeSize) N=N*2; H=repmat(H,[2,2]); [m,n]=size(H); %Invert the matrix located at the bottom right hand corner for i=m/2+1:m, for j=n/2+1:n, H(i,j)=~H(i,j); end end end else disp('INVALID CODE SIZE:The code size must be a power of 2'); end
Example:
To Generate Walsh Codes used in IS-95 (which utilizes 64 Walsh codes of size 64 bits each, use : [H]=generateHadamardMatrix(64). This will generate 64 Walsh Codes of length 64-bits (for each code).
Test Program:
Click Here to download
Also given below is a program to test the cross-correlation and auto-correlation of Walsh code. A set of 8-Walsh codes are used for this purpose.
% Matlab Program to test Walsh Hadamard Codes and to test their orthogonality % Plots cross-correlation and auto correlation of Walsh Hadamard Codes % Author: Mathuranathan Viswanathan for https://www.gaussianwaves.com % License: Creative Commons: Attribution-NonCommercial-ShareAlike 3.0 % Unported codeSize=8; [H]=generateHadamardMatrix(codeSize); %----------------------------------------------------------- %Cross-Correlation of Walsh Code 1 with rest of Walsh Codes h = zeros(1, codeSize-1); %For dynamic Legends s = cell(1, codeSize-1); %For dynamic Legends for rows=2:codeSize [crossCorrelation,lags]=crossCorr(H(1,:),H(rows,:)); h(rows-1)=plot(lags,crossCorrelation); s{rows-1} = sprintf('Walsh Code Sequence #-%d', rows); hold all; end %Dynamic Legends % Select the plots to include in the legend index = 1:codeSize-1; % Create legend for the selected plots legend(h(index),s{index}); title('Cross Correlation of Walsh Code 1 with the rest of the Walsh Codes'); ylabel('Cross Correlation'); xlabel('Lags'); %----------------------------------------------------------- %AutoCorrelation of Walsh Code - 1 autoCorr2(H(2,:),8,2,1);
Simulation Results
From the plots below, it can be ascertained that the Walsh codes has excellent cross-correlation property and poor autocorrelation property. Excellent cross-correlation property (zero cross-correlation) implies orthogonality, which makes it suitable for CDMA applications.
See also:
[1] Codes used in CDMA
[2] Generation of Gold Codes and their cross-correlation
[3] Preferred Pairs m-sequences generation for Gold Codes
[4] Maximum Length Sequences ( m-sequences)
[5] Introduction to Spread Spectrum