윤보민

last change of receiver part

#include <iostream>
#include "myMatrix.h"
using namespace std;
void scalarmult(int n, int m, float a, float *b, float *c){
int N = n*m;
for(int i=0;i<N;i++) c[i] = a*b[i];
float dot(int N, float*C, float*D) {
float sum = 0.0;
for (int i = 0; i < N; i++) sum += C[i] * D[i];
return sum;
}
void scalarmult(int n, int m, float a, float *b, float *c) {
int N = n * m;
for (int i = 0; i<N; i++) c[i] = a * b[i];
}
void matrixadd(int n, int m, float *a, float *b, float *c){
int N = n*m;
for (int i = 0; i<N; i++) c[i] = a[i]+b[i];
void matrixadd(int n, int m, float *a, float *b, float *c) {
int N = n * m;
for (int i = 0; i<N; i++) c[i] = a[i] + b[i];
}
// (N by K) C X (K by M) D = (N by M) E
void matrixmult(int N, int K, int M, float*C, float*D, float*E) {
......
void scalarmult(int n, int m, float a, float *b, float *c);
void matrixadd(int n, int m, float *a, float *b, float *c);
void matrixmult(int N, int K, int M, float*C, float*D, float*E);
float dot(int N, float*C, float*D);
int GaussElimination(int, float*, float*);
void showMatrix(int n, int m, float* F);
void showMatrix(char*name, int n, int m, float* F);
......
#include "receiver.h"
Creceiver::Creceiver() {}
void Creceiver::demodulate() {
T = Nsamplespersymbol;
float c0[Nsamplespersymbol], c1[Nsamplespersymbol];
for (int i = 1; i <= Nsamplespersymbol; i++) {
c0[i - 1] = sqrt(2 / T) * cos(2 * PI / T * i);
c1[i - 1] = sqrt(2 / T) * sin(2 * PI / T * i);
}
float temp0[1], temp1[1];
for (int i = 0; i < Nbits / 2; i++) {
matrixmult(1, Nsamplespersymbol, 1, r + (Nbitspersymbol * i), c0, temp0);
matrixmult(1, Nsamplespersymbol, 1, r + (Nbitspersymbol * i), c1, temp1);
constellation[2 * i] = temp0[0];
constellation[2 * i + 1] = temp1[0];
#include "myMatrix.h"
Creceiver::Creceiver() {
float t = 0.0, T = 0.01;
float dt = T / Nsamplespersymbol;
c0t = new float[Nsamplespersymbol];
c1t = new float[Nsamplespersymbol];
for (int i = 0; i < Nsamplespersymbol; i++, t += dt) {
c0t[i] = cos(2.*3.141592*t / T);
c1t[i] = sin(2.*3.141592*t / T);
}
for (int j = 0; j < Nbits; j++) {
if (constellation[j] >= 0) DecodedData[j] = '0';
else DecodedData[j] = '1';
}
void Creceiver::demodulate() {
int nn = Nsamplespersymbol / Nbitspersymbol;
for (int i = 0; i < Nbits; i += 2) {
int symbol = detectSymbol(constellation + i, r + i * nn);
if (symbol == 0) { DecodedData[i] = 0; DecodedData[i + 1] = 0; }
else if (symbol == 1) { DecodedData[i] = 1; DecodedData[i + 1] = 0; }
else if (symbol == 2) { DecodedData[i] = 1; DecodedData[i + 1] = 1; }
else { DecodedData[i] = 0; DecodedData[i + 1] = 1; }
}
}
int Creceiver::detectSymbol(float *co, float* rr) {
float dummy[Nbitspersymbol];
co[0] = dot(Nsamplespersymbol, rr, c0t);
co[1] = dot(Nsamplespersymbol, rr, c1t);
if (co[0] >= 0 && co[1] >= 0) return 0;
else if (co[0] < 0 && co[1] >= 0) return 1;
else if (co[0] < 0 && co[1] < 0) return 2;
return 3;
}
\ No newline at end of file
......
#ifndef __RECEIVER
#define __RECEIVER
#define PI 3.141592
#include <cmath>
#include <fstream>
#include "variables.h"
#include "myMatrix.h"
class Creceiver {
public:
float T;
Creceiver();
float *r; // corrupted signal = received signal
float constellation[Nbits];
char DecodedData[Nbits];
void demodulate();
int detectSymbol(float *, float *);
float *c0t, *c1t;
};
#endif
......