Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include <math.h>
- #include <vector>
- #include <time.h>
- #include <iostream>
- #include <algorithm>
- #include <cmath>
- #define pi 3.14159265359
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- MainWindow::makePlot();
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- QVector <double> l1z1(double f, double fs, double phi, double n){
- QVector <double> x;
- for (double i=0;i<n;i++)
- {
- // 0.9*sin(2*pi * f *(i/fs) * cos(pi * (i/fs)) + phi);
- //0.9*(sin(2*pi * f *(i/fs) * cos(pi * (i/fs)) + phi));
- // double funkcja = 0.9*(sin(2*pi * f *(i/fs) * cos(pi * (i/fs)) + phi));
- double funkcja = 0.9 * sin(2*pi * f * (i/fs) * cos(pi*(i/fs))+phi);
- x << funkcja;
- }
- return x;
- }
- QVector <double> l1z2a(double f, double fs, double phi, double n){
- QVector <double> x;
- for (double i=0;i<n;i++)
- {
- double funkcjay = (2 * i + 1.5) * cos((24*pi) * (i/fs) + pi);
- double funkcjax = 0.9 * sin(2*pi * f * (i/fs) * cos(pi*(i/fs))+phi);
- double funkcjaz = funkcjay + std::abs(funkcjax) * (funkcjay + 0.7);
- x << funkcjaz;
- }
- return x;
- }
- QVector <double> l1z2b(double f, double fs, double phi, double n){
- QVector <double> x;
- for (double i=0;i<n;i++)
- {
- double funkcjay = (2 * i + 1.5) * cos((24*pi) * (i/fs) + pi);
- double funkcjax = 0.9 * sin(2*pi * f * (i/fs) * cos(pi*(i/fs))+phi);
- double funkcjaz = funkcjax * (std::abs(funkcjay) + 1.2) * sin(12 * pi + (i/fs));
- x << funkcjaz;
- }
- return x;
- }
- QVector <double> l1z3()
- {
- QVector <double> x;
- QVector <double> y;
- // 0.2 > t >= 0
- for (double i=0; i<=0.2; i+=0.01)
- {
- double funkcja = i * sin(34*pi*i);
- y << funkcja;
- }
- // 0.8 > t >= 0.2
- for (double i=0.2; i<=0.8; i+=0.01)
- {
- double funkcja = (1/i) * log10(i+1) - 0.27;
- y << funkcja;
- }
- // 1.4 > t >= 0.8
- for (double i=0.8; i<=1.4; i+=0.01)
- {
- double funkcja = (((pow(i,2)+1)/10)) * sin(12*pi*i);
- y << funkcja;
- }
- // 2.2 > t >= 1.4
- for (double i=1.4; i<=2.2; i+=0.01)
- {
- double funkcja = sin(20*pi*i + i/3 + 2.3);
- y << funkcja;
- }
- return y;
- }
- QVector <double> l1z4(double n, int h, double fs){
- QVector <double> x;
- QVector <double> y;
- double tmp = 0;
- for (int i=0; i<n; i++){
- for (int j=1; j<h; j++){
- tmp += (pow(-1, j)/pow(j,2))*cos((2*pi*j*i)/fs);
- }
- double funkcja = (pow(pi, 2)/3) + (4*tmp);
- x << funkcja;
- }
- return x;
- }
- void DFT(double *rzeczywiste, double *urojone, QVector<double> signal, double n){
- for (int i=0; i < n; i++){
- urojone[i]=0;
- rzeczywiste[i]=0;
- for (int j=0; j < n; j++)
- {
- rzeczywiste[i] += signal[j] * cos((-2 * pi * i * j) / n);
- urojone[i] += signal[j] * sin((-2 * pi * i * j) / n);
- }
- }
- }
- QVector <double> Widmo(double *rzeczywiste, double *urojone, double *W1, double *W2, double n, double fs,double fk = 0){
- QVector <double> x;
- for (int i=0; i<n/2; i++){
- W1[i] = sqrt(pow(rzeczywiste[i],2) + pow(urojone[i],2));
- W2[i] = 10 * log(W1[i]);
- fk = i * (fs/n);
- x << fk;
- }
- return x;
- }
- /*
- This computes an in-place complex-to-complex FFT
- x and y are the real and imaginary arrays of 2^m points.
- dir = 1 gives forward transform
- dir = -1 gives reverse transform
- */
- void FFT(short int dir,long m,double *rzeczywiste,double *urojone)
- {
- long n,i,i1,j,k,i2,l,l1,l2;
- double c1,c2,tx,ty,t1,t2,u1,u2,z;
- /* Calculate the number of points */
- n = 1;
- for (i=0;i<m;i++)
- n *= 2;
- /* Do the bit reversal */
- i2 = n >> 1;
- j = 0;
- for (i=0;i<n-1;i++) {
- if (i < j) {
- tx = rzeczywiste[i];
- ty = urojone[i];
- rzeczywiste[i] = rzeczywiste[j];
- urojone[i] = urojone[j];
- rzeczywiste[j] = tx;
- urojone[j] = ty;
- }
- k = i2;
- while (k <= j) {
- j -= k;
- k >>= 1;
- }
- j += k;
- }
- /* Compute the FFT */
- c1 = -1.0;
- c2 = 0.0;
- l2 = 1;
- for (l=0;l<m;l++) {
- l1 = l2;
- l2 <<= 1;
- u1 = 1.0;
- u2 = 0.0;
- for (j=0;j<l1;j++) {
- for (i=j;i<n;i+=l2) {
- i1 = i + l1;
- t1 = u1 * rzeczywiste[i1] - u2 * rzeczywiste[i1];
- t2 = u1 * urojone[i1] + u2 * rzeczywiste[i1];
- rzeczywiste[i1] = rzeczywiste[i] - t1;
- urojone[i1] = urojone[i] - t2;
- rzeczywiste[i] += t1;
- urojone[i] += t2;
- }
- z = u1 * c1 - u2 * c2;
- u2 = u1 * c2 + u2 * c1;
- u1 = z;
- }
- c2 = sqrt((1.0 - c1) / 2.0);
- if (dir == 1)
- c2 = -c2;
- c1 = sqrt((1.0 + c1) / 2.0);
- }
- /* Scaling for forward transform */
- if (dir == 1) {
- for (i=0;i<n;i++) {
- rzeczywiste[i] /= n;
- urojone[i] /= n;
- }
- }
- }
- QVector <double> fASK(double tb, double fn, double fs, double A1, double A2, int in[], double out[])
- {
- QVector <double> x;
- for (int i=0; i<fs; i++)
- {
- double probki = fs/tb;
- int bit = i/probki;
- if (in[bit] == 0)
- {
- out[i] = A1 * sin(2*pi*fn*(i/fs));
- x << out[i];
- }
- else
- {
- out[i] = A2 * sin(2*pi*fn*(i/fs));
- x << out[i];
- }
- }
- return x;
- }
- QVector <double> fFSK(double tb, double fn1, double fn2, double fs, double A1, double A2, int in[], double out[])
- {
- QVector <double> x;
- for (int i=0; i<fs; i++)
- {
- double probki = fs/tb;
- int bit = i/probki;
- if (in[bit] == 0)
- {
- out[i] = A1 * sin(2*pi*fn1*(i/fs));
- x << out[i];
- }
- else
- {
- out[i] = A2 * sin(2*pi*fn2*(i/fs));
- x << out[i];
- }
- }
- return x;
- }
- QVector <double> fPSK(double tb, double fn, double fs, double A1, double A2, int in[], double out[])
- {
- QVector <double> x;
- for (int i=0; i<fs; i++)
- {
- double probki = fs/tb;
- int bit = i/probki;
- if (in[bit] == 0)
- {
- out[i] = sin(2*pi*fn*(i/fs));
- x << out[i];
- }
- else
- {
- out[i] = sin(2*pi*fn*(i/fs)+pi);
- x << out[i];
- }
- }
- return x;
- }
- QVector <double> modulacja_amplitudy(double m[], double kA, int fn, int t)
- {
- }
- void MainWindow::makePlot()
- {
- QVector <double> AxisX;
- QVector <double> AxisY;
- QVector <double> sl1z1;
- QVector <double> sl1z2a;
- QVector <double> sl1z2b;
- QVector <double> sl1z3;
- QVector <double> sl1z4a;
- QVector <double> sl1z4b;
- QVector <double> sl1z4c;
- QVector <double> ASK;
- QVector <double> FSK;
- QVector <double> PSK;
- /*
- int bit[9] = {1,0,0,1,1,0,1,1,0};
- int length = sizeof(bit)/sizeof(int);
- double A1 = 6;
- double A2 = 9;
- double t = 2;
- double n = 2;
- double tb = length;
- double fn = n * tb;
- double fs = 300;
- double fn1 = (n+1) * tb;
- double fn2 = (n+2) * tb;
- //n*27 = dlugosc tablicy z sygnalem
- double ZA[540] = {0.0};
- double ZF[540] = {0.0};
- double ZP[540] = {0.0};
- double *urojoneA = new double[600];
- double *rzeczywisteA = new double[600];
- double *urojoneF = new double[600];
- double *rzeczywisteF = new double[600];
- double *urojoneP = new double[600];
- double *rzeczywisteP = new double[600];
- double *W1 = new double[300]; //Lin
- double *W2 = new double[300]; //Log
- double fk;
- */
- int fm = 10;
- int fn = 10*fm;
- int Am = 2;
- int fs = 3000;
- double kAa = 0.69;
- double kAb = 7;
- double kAc = 33;
- double kPa = 1;
- double kPb = 2;
- double kPc = 69;
- double m[3000] = { 0 };
- double zA1[3000] = { 0 };
- double zA2[3000] = { 0 };
- double zA3[3000] = { 0 };
- double zP1[3000] = { 0 };
- double zP2[3000] = { 0 };
- double zP3[3000] = { 0 };
- //Sygnal informacyjny
- for (int i = 0; i < fs; i++)
- {
- m[i] = Am*sin(2*pi*fm*i/fs);
- }
- //Modulacja amplitudy
- for (int i = 0; i < fs; i++)
- {
- zA1[i] = (kAa*m[i]+1)*cos(2*pi*fn*fs);
- zA2[i] = (kAb*m[i]+1)*cos(2*pi*fn*fs);
- zA3[i] = (kAc*m[i]+1)*cos(2*pi*fn*fs);
- AxisX << zA1[i];
- AxisY << fs;
- }
- /*
- double ModA[600] = {0};
- double ModF[600] = {0};
- double ModP[600] = {0};
- //Widmo
- for (int i = 0; i < 300; i++)
- {
- ModA[i] = 20 * log10(sqrt(pow(rzeczywisteA[i],2) + pow(urojoneA[i],2)));
- ModF[i] = 20 * log10(sqrt(pow(rzeczywisteF[i],2) + pow(urojoneF[i],2)));
- ModP[i] = 50*log10(sqrt(pow(rzeczywisteP[i],2) + pow(urojoneP[i],2)));
- fk = i;
- AxisX << ModP[i];
- AxisY << fk;
- }
- */
- /* for (int i=0; i<150; i++)
- {
- AxisX << ModA[i];
- AxisY << fk;
- }
- */
- //Widmo
- /* for (int i=0; i<300; i++){
- W1[i] = sqrt(pow(rzeczywiste[i],2) + pow(urojone[i],2));
- W2[i] = 10 * log(W1[i]);
- fk = i * (150/600);
- AxisX << W1[i];
- AxisY << fk;
- }
- */
- // AxisY << Widmo(rzeczywiste, urojone, W1, W2, 600, fs);
- /* AxisY << PSK;
- for (int i=0; i<fs; i++)
- {
- AxisX << i;
- }
- */
- // std::cout <<"FS WYNOSI: ";
- // std::cout <<fs;
- ui->customPlot->addGraph();
- ui->customPlot->graph(0)->setData(AxisX, AxisY);
- ui->customPlot->xAxis->setLabel("x");
- ui->customPlot->yAxis->setLabel("y");
- ui->customPlot->xAxis->setRange(-500, 755);
- ui->customPlot->yAxis->setRange(-1000, 1000);
- ui->customPlot->replot();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement