这是我的代码。我不知道应该添加哪些细节...你可以看到我使用了eigen。在输出中,它表示错误与解调器构造函数的定义一致。
所以基本上我有一个模板类解调器,它可以解调某种类型的矩阵(double,float等)。在解调器中我使用IIRFilter,它也应该能够处理解调器的类型。
此外,过滤器不仅可以过滤矩阵,还可以过滤掉它们的块,所有这些代码
template<typename Derived, typename DerivedB>
^^^^
/*
* Demodulator.h
*
* Created on: May 23, 2014
* Author: ii
*/
#ifndef DEMODULATOR_H_
#define DEMODULATOR_H_
#include <Eigen/Dense>
#include <Eigen/Core>
#include <iostream>
#include "IIRFilter.h"
using namespace std;
using namespace Eigen;
template <typename T>
class Demodulator {
public:
Matrix<T, Dynamic, Dynamic> tempMatrix;
...
IIRFilter<T> bandpassFilter;
IIRFilter<T> highpassFilter;
// Here is the error. In the line below.
Demodulator(int rows, int columns) {
tempMatrix = Matrix<T, Dynamic, Dynamic>(rows, columns);
tempFrame = Matrix<T, 1, Dynamic>(1, rows);
...
Matrix<T, 1, Dynamic> tempb1(7);
tempb1 << 6.46597871e-01, 0.00000000e+00, -1.93979361e+00,
1.66081634e-16, 1.93979361e+00, 0.00000000e+00,
-6.46597871e-01;
bandpassFilter = IIRFilter<T>(tempa1, tempb1, rows);
Matrix<T, 1, Dynamic> tempb2(4);
tempb2 << 0.97749153, -2.93247458, 2.93247458, -0.97749153;
Matrix<T, 1, Dynamic> tempa2(3);
tempa2 << -2.95447065, 2.90997187, -0.95548968;
highpassFilter = IIRFilter<T>(tempa2, tempb2, rows);
...
}
~Demodulator();
void demodulateFrame(Matrix<T, Dynamic, Dynamic> &frame);
};
#endif /* DEMODULATOR_H_ */
/*
* IIRFilter.h
*
* Created on: May 23, 2014
* Author: ii
*/
#ifndef IIRFILTER_H_
#define IIRFILTER_H_
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
template <typename T>
class IIRFilter {
public:
Matrix<T, Dynamic, Dynamic> previousOutput;
template<typename Derived, typename DerivedB>
void filterRow(const MatrixBase<Derived>& input, MatrixBase<DerivedB> const & output, int row);
...
IIRFilter(Matrix<T, 1, Dynamic> _alpha, Matrix<T, 1, Dynamic> _beta, int rows) {
...
}
~IIRFilter();
};
#endif /* IIRFILTER_H_ */
void testDemodulation() {
MatrixXd input ...
MatrixXd inputRow = input.row(0);
Demodulator<double> demodulator(input.rows(), input.cols());
demodulator.demodulateFrame(inputRow);
cout << demodulator.outputFrame;
}
答案 0 :(得分:0)
您必须初始化您的成员变量。由于该类缺少默认构造函数,因此该初始化必须是显式的。这有一个特殊的语法:
class Demodulator {
Demodulator(int rows, int columns)
: bandpassFilter ( something ), // <=== here
highpassFilter ( something-else ) { // <=== here
// your code
}
不幸的是,这些成员需要矩阵作为构造函数参数,而这些矩阵尚不可用。
你可以
bandpassFilter =
,highpassFilter =
分配或