Add files via upload

This commit is contained in:
mathur04
2024-07-04 13:15:37 +02:00
committed by GitHub
parent 9faebead7e
commit e1ed417974
7 changed files with 763 additions and 0 deletions

67
UTSR/cossquare.cpp Normal file
View File

@ -0,0 +1,67 @@
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdbool.h>
// Function to check if input is a vector
bool isvector(double* f, int rows, int cols) {
return (rows == 1 || cols == 1);
}
// Function to check if input is a matrix
bool ismatrix(double* f, int rows, int cols) {
return (rows > 1 && cols > 1);
}
// Function to check if input is a scalar
bool isscalar(double* f, int rows, int cols) {
return (rows == 1 && cols == 1);
}
// Main function
double* cossquare(double* f, int rows, int cols, double fc, double BW) {
double f1 = fc - BW;
double f4 = fc + BW;
double* r = malloc(rows * cols * sizeof(double));
if (isvector(f, rows, cols)) {
int n = rows * cols;
for (int i = 0; i < n; i++) {
double ss = sin(M_PI * f[i] / (2 * fc));
bool ri1 = (fabs(f[i]) > fc) && (fabs(f[i]) <= f4);
bool ri2 = (fabs(f[i]) <= fc) && (fabs(f[i]) <= f4);
double ff1 = ri1 ? fabs(f[i]) : 0;
double ff2 = ri2 ? fabs(f[i]) : 0;
double r1 = ri1 ? pow(cos(M_PI * (fc - ff1) / (f4 - f1)), 2) : 0;
double r2 = ri2 ? ss * pow(cos(M_PI * (fc - ff2) / (f4 - f1)), 2) : 0;
r[i] = r1 + (f[i] >= 0 ? 1 : -1) * r2;
}
} else if (ismatrix(f, rows, cols)) {
for (int c = 0; c < cols; c++) {
for (int i = 0; i < rows; i++) {
double ss = sin(M_PI * f[i * cols + c] / (2 * fc));
bool ri1 = (fabs(f[i * cols + c]) > fc) && (fabs(f[i * cols + c]) <= f4);
bool ri2 = (fabs(f[i * cols + c]) <= fc) && (fabs(f[i * cols + c]) <= f4);
double ff1 = ri1 ? fabs(f[i * cols + c]) : 0;
double ff2 = ri2 ? fabs(f[i * cols + c]) : 0;
double r1 = ri1 ? pow(cos(M_PI * (fc - ff1) / (f4 - f1)), 2) : 0;
double r2 = ri2 ? ss * pow(cos(M_PI * (fc - ff2) / (f4 - f1)), 2) : 0;
r[i * cols + c] = r1 + (f[i * cols + c] >= 0 ? 1 : -1) * r2;
}
}
} else if (isscalar(f, rows, cols)) {
if ((fabs(f[0]) >= f1) && (fabs(f[0]) <= f4)) {
if (fabs(f[0]) > fc) {
r[0] = pow(cos(M_PI * (fc - fabs(f[0])) / (f4 - f1)), 2);
} else {
r[0] = sin(M_PI * f[0] / (2 * fc)) * pow(cos(M_PI * (fc - fabs(f[0])) / (f4 - f1)), 2);
}
} else {
r[0] = 0;
}
}
return r;
}