#include "dsp1.h"
#include "dft.h"
#include <iostream>
#include <iomanip>
int main()
{
extern long npt;
extern int inv;
printf("select type of transform\n");
printf("\n");
printf("0 for forward DFT\n");
printf("1 for inverse DFT\n");
scanf_s("%d", &inv);
read_data();
dft();
save_data();
exit(0);
}
void read_data()
{
extern long npt;
int n;
extern complex x[size];
for (n = 0; n< size; ++n)
{
x[n].real = 0;
x[n].imag = 0;
}
if ((in = fopen("coeff.dat", "r")) == NULL)
{
printf("cannot open file coeff.dat\n");
exit(1);
}
fscanf(in, "%ld", &npt);
for (n = 1; n <= npt; n++)
{
fscanf(in, "%lf %lf", &x[n].real, &x[n].imag);
}
fclose(in);
}
void save_data()
{
long k;
int k1;
extern long npt;
extern complex x[size];
if ((out = fopen("dftout.dat", "w")) == NULL)
{
printf("Cannot open file dftout.dat\n");
exit(1);
}
fprintf(out, "k \t\t XR(k) \t\t XI(k) \n");
fprintf(out, "\n");
for (k = 1; k <= npt; ++k)
{
k1 = k - 1;
fprintf(out, "%d \t %f \t %f \n", k1, x[k].real, x[k].imag);
}
fclose(out);
}
void dft()
{
extern int inv;
extern long npt;
long k, n;
double WN, wk, c, s, XR[size], XI[size];
extern complex x[size];
WN = 2 * pi / npt;
if (inv == 1)
WN = -WN;
for (k = 0; k<npt; ++k)
{
XR[k] = 0.0;
XI[k] = 0.0;
wk = k*WN;
for (n = 0; n<npt; ++n)
{
c = cos(n*wk);
s = sin(n*wk);
XR[k] = XR[k] + x[n + 1].real*c + x[n + 1].imag*s;
XI[k] = XI[k] - x[n + 1].real*s + x[n + 1].imag*c;
}
if (inv == 1)
{ /* divide by N for IDFT */
XR[k] = XR[k] / npt;
XI[k] = XI[k] / npt;
}
}
for (k = 1; k <= npt; ++k)
{
/* store transformed data in x */
x[k].real = XR[k - 1];
x[k].imag = XI[k - 1];
}
}
이거랑
#pragma once
void dft();
void fft();
void read_data();
void save_data();
int inv;
long npt;
complex x[size];
FILE *in, *out, *fopen();
이 헤드파일이랑
#pragma once
#include <iostream>
#include <iomanip>
#define size 600
#define pi 3.141592654
#define maxbits 30
typedef struct {
double real;
double imag;
double modulus;
double angle;
}complex;
여기까지 입니다!! 주석을 달아야하는데....자꾸 이대로 돌리면 뭐가 안정적이지 않다고 오류가 나서;;
C++로 바꿔달라는 의미가 뭐냐? C++ 컴파일러도 컴파일 잘된다.
ㄴ이 프로그램에 주석을 달아야하는데 C를 아예 몰라서여
쪽지로 보내드렸습니다.
선입금
ㄴ얼마죠?
c++로 바꿔드렸습니다^^
주석달아야 한다면서 c를 모르면, 솔직히 위 코드 c++로 바꿔도 크게 안바뀌는데 바꿔줘도 주석 못달듯;
ㄴ돌아가기라도 하면 좋은데 자꾸 fopen 이런거 쓰지말라고 안돌아가서 질문한거에요
fstream.open 으로 바꾸면 되여
사용법은 검색하면 쉽게 나옴여
ㄴ 쉽지않네요..
123123//거에요->거예요 [리듬 맞춤법 봇♬]
whatugonnado//되여->돼여 [리듬 맞춤법 봇♬]
돼여 -> 돼요 맞춤법 지적하려면 완벽하게 해주시죠?
ㄴ 혹시 얼마 차이안나면 뭐 바꾸는지 알수있을까요?? 코딩만 되면 결과 보면서 확인할수있는데ㅠㅠ
FILE은 폴더 열때 패러미터로 파일명이랑 모드를 r w 이렇게 받자나여, fstream(ifstream, ofstream 통합버전)은 패러미터로 파일명이랑 모드를 받는데 r w 가 아니라 std::ios::in std::ios::out,, 이런식으로 줘요. 구글에 fstream사용법 치고 첫번째 나오는 티스토리 글만보면 따라할 수 있을거 같은데 시도해보고 컴파일 안되면 다시 질문글 올리시는게 어떤가여?
ㄴ'std::fstream': 이 형식을 식으로 잘못 사용했습니다.
'.open' 왼쪽에는 클래스/구조체/공용 구조체가 있어야 합니다.
'.open' 왼쪽에는 클래스/구조체/공용 구조체가 있어야 합니다.
이런식으로 나오는건 어떻게 하나요?
이분 검색 안해보고 하셨나보네;
ㄴ 해결했습니다~ 감사함다