?? hadamard.cpp
字號:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <malloc.h>
int *Hadamard( unsigned N )
/*************************************************************************************
/ int *Hadamard( unsigned N )
/
/ Copyright 2002 The Mobile and Portable Radio Research Group
/
/
/ Produces a 2^N by 2^N Hadamard Matrix
/
/ Returns an integer pointer to a 2^(2N) array that contains the resultant
/ hadamard matrix
/
/ Parmeters
/ Input
/ N unsigned Used to determine the size of the Hadamard matrix. The size
/ of the Hadamard matrix is 2^N by 2^N
/
/*************************************************************************************/
{
unsigned Nold,Nnew,k,j,i,Npower2,Nhalf;
int *Hold,*Hnew,*TempHold,*TempHnew;
Hold = (int *) calloc(1,sizeof(int));
*Hold = 1;
Nold = 1;
k=0;
Npower2 = 1;
for (k=1; k<=N; k++)
{
Npower2 = (unsigned) pow( (double) 2.0, (double) k);
Nnew = Npower2 * Npower2;
Hnew = (int *) calloc(Nnew,sizeof(int));
if (Hnew == NULL)
{
printf("\nk = %d: Matrix Hnew not allocated--exiting\n",k);
exit(NULL);
}
Nhalf = Npower2/2;
TempHold = Hold;
TempHnew = Hnew;
for (i=0; i<Nhalf; i++)
{
TempHold = Hold + i*Nhalf;
for (j=0; j<Nhalf; j++) *TempHnew++ = *TempHold++;
TempHold = Hold + i*Nhalf;
for (j=0; j<Nhalf; j++) *TempHnew++ = *TempHold++;
}
for (i=0; i<Nhalf; i++)
{
TempHold = Hold + i*Nhalf;
for (j=0; j<Nhalf; j++) *TempHnew++ = *TempHold++;
TempHold = Hold + i*Nhalf;
for (j=0; j<Nhalf; j++) *TempHnew++ = -(*TempHold++);
}
free(Hold);
Hold = Hnew;
}
return(Hnew);
}
void main()
{
int *HadMatrix,*TempMat;
unsigned N=8,i,j,k;
FILE *fp;
HadMatrix = Hadamard(N);
fp = fopen("sam.txt","w");
k = (unsigned) pow( (double) 2.0, (double) N);
TempMat=HadMatrix;
for (i=0; i<k; i++)
{
for (j=0; j<k; j++) fprintf(fp,"%d ",*TempMat++);
fprintf(fp,"\n");
}
fclose(fp);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -