📄 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 + -