📄 class_definition_file_fir_filter.txt
字号:
//Class definition file FIR.cpp
#include "FIR.h"
#include <string.h>
FIR :: FIR(int theLength) : Object()
{
length = theLength;
coeffs = (MY_FLOAT *) malloc(length * sizeof(MY_FLOAT));
pastInputs = (MY_FLOAT *) calloc(2*length, sizeof(MY_FLOAT));
piOffset = length;
strcpy(name,"FIR Filter");
}
FIR :: FIR(const char *filterFile) : Object()
{
FILE *fp;
float d;
int rtn,i;
strncpy(name,filterFile,strlen(name));
fp = fopen(filterFile,"r");
if (!fp) {
char nfn[1000];
// char nfn[strlen(FILTER_DIR) + strlen(filterFile) + 1];
strcpy(nfn,FILTER_DIR);
strcat(nfn,filterFile);
printf("Couldn't find soundfile %s. Trying %s\n",filterFile,nfn);
fp = fopen(nfn,"r");
if (!fp) {
printf("Couldn't find filterfile %s or %s!\n",filterFile,nfn);
exit(-1);
}
}
rtn = fscanf(fp,"%f",&d);
if (rtn == EOF)
goto error;
delay = (MY_FLOAT) d;
rtn = fscanf(fp,"%f",&d);
if (rtn == EOF)
goto error;
length = (int)d;
coeffs = (MY_FLOAT *) malloc(length * sizeof(MY_FLOAT));
pastInputs = (MY_FLOAT *) calloc(2*length, sizeof(MY_FLOAT));
for (i=0;i<length;i++) {
rtn = fscanf(fp,"%f",&d);
if (rtn == EOF)
goto error;
coeffs[i] = (MY_FLOAT)d;
}
piOffset = length;
return;
error:
fprintf(stderr,"Premature EOF or bad numbers in filter file %s\n",
filterFile);
exit(-1);
}
FIR :: ~FIR()
{
free(pastInputs);
free(coeffs);
}
void FIR :: clear()
{
int i;
for (i=0; i < 2*length; i++) {
pastInputs[i] = 0;
}
piOffset = length;
}
void FIR :: setCoeffs(MY_FLOAT *theCoeffs)
{
int i;
for (i=0; i < length; i++) {
coeffs[i] = theCoeffs[i];
}
}
MY_FLOAT FIR :: tick(MY_FLOAT input) {
int i;
lastOutput = input*coeffs[0];
for (i=1; i<length; i++)
lastOutput += coeffs[i] * pastInputs[piOffset-i];
// sample 0 unused
pastInputs[piOffset++] = input;
if (piOffset >= 2*length) { // sample 2*length-1 unused
piOffset = length;
for (i=0; i<length; i++)
pastInputs[i] = pastInputs[length+i];
}
return lastOutput;
}
MY_FLOAT FIR :: getDelay(MY_FLOAT freq)
{
return delay;
}
int FIR :: getLength(void)
{
return length;
}
char * FIR :: getName(void)
{
return name;
}
void FIR :: setName(char *theName)
{
strncpy(name,theName,strlen(name));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -