27
2012-05-11 02:08:47
0
잘 해결되셨습니까?
비전공자라시길래 저라면 어떻게 짤까 해서 소스 올려봅니다.
100% 신뢰하진 마시고, 테스트는 해보세요.
파일 이름은 하드코딩하지 않고 실행 파일에 인자로 줬습니다.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define _USE_MATH_DEFINES // to use M_PI
void help(const char* prg)
{
// 프로그램 사용법을 적었습니다.
fprintf(stderr,
"%s <input_file_1> <input_file_2> <output_file>n", prg);
}
void process(FILE* fin_0, FILE* fin_1, FILE* fout);
float calc_z(const float x, const float y, const int n);
int main(int argc, char** argv)
{
FILE *fin_0, *fin_1;
FILE *fout;
if(argc != 4)
{
help(argv[0]);
return EXIT_FAILURE;
}
//file open
fin_0 = fopen(argv[1], "rb");
fin_1 = fopen(argv[2], "rb");
fout = fopen(argv[3], "wb");
if(fin_0 == NULL || fin_1 == NULL || fout == NULL)
{
fclose(fin_0); fclose(fin_1); fclose(fout);
fprintf(stderr, "FILE OPEN ERROR!n");
return EXIT_FAILURE;
}
// main process
process(fin_0, fin_1, fout);
fclose(fin_0); fclose(fin_1); fclose(fout);
return EXIT_SUCCESS;
}
void process(FILE* fin_0, FILE* fin_1, FILE* fout)
{
short in_data[2], out_data;
float x, y, z, n;
for(n = 0; ; ++n)
{
if(// input from 0, 1
(fread(&in_data[0], sizeof(short), 1, fin_0) == 0) ||
(fread(&in_data[1], sizeof(short), 1, fin_1) == 0)
) break;
x = (float)in_data[0];
y = (float)in_data[1];
z = calc_z(x, y, n);
// output write
out_data = (short)z; // 변조된 신호 z를 short 형태로 바꿈
if(fwrite(&out_data, sizeof(short), 1, fout) == 0)
{
fprintf(stderr, "Error writing filen");
return;
}
}
}
float calc_z(const float x, const float y, const int n)
{
// z가 출력이므로 캐리어(cos)를 입력x에 곱한값과 캐리어(sin)을 입력 y에 곱한값을 더함.
// z = x * cos(2*3.14*9600*n/48000) + y * sin(2*3.14*9600*n/48000);
float z;
const double K = (2.0 * M_PI * n) / 5.0; // cos, sin 안 부분
z = x*cos(K) + y*sin(K);
return z;
}