29 int IIRCascade::process(
const Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> &
x, Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>
const &
y){
34 for (
int j=0; j<
A.cols(); j++){
35 for (
int i=0; i<
xTemp.rows(); i++){
37 mem(0,j)=-(
A.col(j)*
mem.col(j).topRows(
A.rows())).sum();
38 yTemp(i,0)=(
B.col(j)*
mem.col(j).topRows(
B.rows())).sum();
39 for (
int k=
mem.rows()-1; k>0; k--)
46 int IIRCascade::process(
const Eigen::Matrix<double, Eigen::Dynamic, 1> &
x, Eigen::Matrix<double, Eigen::Dynamic, 1>
const &
y){
47 if (x.rows()!=y.rows()){
48 printf(
"Input sample count %lld not equal to output sample count %lld", (
long long)x.rows(), (
long long)y.rows());
52 if (x.rows() !=
yTemp.rows())
53 yTemp.resize(x.rows(), 1);
54 if (x.rows() !=
xTemp.rows())
55 xTemp.resize(x.rows(), 1);
60 const_cast< Eigen::Matrix<double, Eigen::Dynamic, 1>&
>(
y)=
xTemp;
64 int IIRCascade::process(
const Eigen::Matrix<float, Eigen::Dynamic, 1> &
x, Eigen::Matrix<float, Eigen::Dynamic, 1>
const &
y){
65 if (x.rows()!=y.rows()){
66 printf(
"Input sample count %lld not equal to output sample count %lld", (
long long)x.rows(), (
long long)y.rows());
70 if (x.rows() !=
xTemp.rows())
71 xTemp.resize(x.rows(), 1);
72 if (x.rows() !=
yTemp.rows())
73 yTemp.resize(x.rows(), 1);
74 xTemp=x.cast<
double>();
77 const_cast< Eigen::Matrix<float, Eigen::Dynamic, 1>&
>(
y)=
xTemp.cast<
float>();
81 int IIRCascade::processStepped(
const Eigen::Array<double, Eigen::Dynamic, Eigen::Dynamic> &BStep,
const Eigen::Array<double, Eigen::Dynamic, Eigen::Dynamic> &AStep){
82 if ((BStep.cols()!=
B.cols()) || (AStep.cols()!=
A.cols()) || (
B.cols()!=
A.cols())){
83 printf(
"BStep or AStep channel count (%lld, %lld) mismatch to filter channel count %lld", (
long long)BStep.cols(), (
long long)AStep.cols(), (
long long)
A.cols());
87 if ((BStep.rows()!=
B.rows()) || (AStep.rows()!=
A.rows())){
88 printf(
"BStep order %lld not equal to B order %lld", (
long long)BStep.rows(), (
long long)
B.rows());
89 printf(
"OR AStep order %lld not equal to A order %lld", (
long long)AStep.rows(), (
long long)
A.rows());
93 for (
int j=0; j<
A.cols(); j++){
94 for (
int i=0; i<
xTemp.rows(); i++){
96 mem(0,j)=-(
A.col(j)*
mem.col(j).topRows(
A.rows())).sum();
97 yTemp(i,0)=(
B.col(j)*
mem.col(j).topRows(
B.rows())).sum();
98 for (
int k=
mem.rows()-1; k>0; k--)
100 B.col(j)+=BStep.col(j);
101 A.col(j)+=AStep.col(j);
108 int IIRCascade::process(
const Eigen::Matrix<double, Eigen::Dynamic, 1> &
x, Eigen::Matrix<double, Eigen::Dynamic, 1>
const &
y,
109 const Eigen::Array<double, Eigen::Dynamic, Eigen::Dynamic> &BStep,
const Eigen::Array<double, Eigen::Dynamic, Eigen::Dynamic> &AStep){
110 if (x.rows()!=y.rows()){
111 printf(
"Input sample count %lld not equal to output sample count %lld", (
long long)x.rows(), (
long long)y.rows());
115 if (x.rows() !=
yTemp.rows())
116 yTemp.resize(x.rows(), 1);
117 if (x.rows() !=
xTemp.rows())
118 xTemp.resize(x.rows(), 1);
123 const_cast< Eigen::Matrix<double, Eigen::Dynamic, 1>&
>(
y)=
xTemp;
127 int IIRCascade::process(
const Eigen::Matrix<float, Eigen::Dynamic, 1> &
x, Eigen::Matrix<float, Eigen::Dynamic, 1>
const &
y,
128 const Eigen::Array<double, Eigen::Dynamic, Eigen::Dynamic> &BStep,
const Eigen::Array<double, Eigen::Dynamic, Eigen::Dynamic> &AStep){
129 if (x.rows()!=y.rows()){
130 printf(
"Input sample count %lld not equal to output sample count %lld", (
long long)x.rows(), (
long long)y.rows());
134 if (x.rows() !=
yTemp.rows())
135 yTemp.resize(x.rows(), 1);
136 if (x.rows() !=
xTemp.rows())
137 xTemp.resize(x.rows(), 1);
138 xTemp=x.cast<
double>();
142 const_cast< Eigen::Matrix<float, Eigen::Dynamic, 1>&
>(
y)=
xTemp.cast<
float>();
void process()
Inner process.
#define IIR_REQUIRE_COL_ERROR
Channel count mismatch error.
virtual int evaluateError(int errorNum)
int processStepped(const Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic > &BStep, const Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic > &AStep)
Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic > A
Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic > B
#define IIR_CH_CNT_ERROR
Channel count mismatch error.
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > yTemp
Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic > mem
Eigen::Matrix< double, Eigen::Dynamic, 1 > xTemp
Temporary casecading signal.
#define IIR_N_CNT_ERROR
Channel count mismatch error.