我正在实现一个非常简单的带通滤波器,它的输入参数是一个包含高通和低通滤波器的信号,停留时间和截止频率的向量:
typedef std::vector<double> vec;
vec bandPass(const vec& signal, double dwellTime, double lowCutoff, double highCutoff);
我的界面显而易见的问题是函数调用者必须事先知道预期的时间和频率单位,并且如果必要的话可能必须经历适当转换它们的烦恼。
我想我可以使用std::chrono
来解决我的问题,但我还没有看到它被用来测量频率。我想要:
vec bandPass(const vec& signal, milliseconds dwellTime, kHertz lowCutoff, kHertz highCutoff);
并让我的函数将所有单位转换为秒和赫兹进行计算。理想情况下,乘以毫秒和kHz会得到与乘以秒和Hz相同的结果。
有没有人遇到过类似的问题?编写像1/10s
之类的东西来引用Hertz是合法的C ++吗?
我没有太多使用std :: chrono(以及C ++)的经验,希望在定义我的界面之前,我可以在这里收集一些智慧的话。我们也欢迎任何其他建议。
答案 0 :(得分:8)
可以将频率视为周期的持续时间。所以20 Hz可以被视为0.05秒。
Chrono将全力支持。
您可以编写一个ggplot(a,aes(x=V2,y=V3,color=V1))+
geom_jitter(aes(group=V1,na.rm=T), position =position_jitterdodge())+
stat_summary(fun.y="mean",geom="crossbar",
mapping=aes(ymin=..y.., ymax=..y..), width=1,
position=position_dodge(),show.legend = FALSE)
类型或频率模板,与某些上下文中的句点/持续时间相反。内部存储持续时间不能很好,遗憾的是,以秒为单位的int Hz,以秒为单位的持续时间是失败。
Hz
现在template<
class Rep,
class Period = std::ratio<1>
>
struct frequency;
template<
class Rep,
std::intmax_t Num,
std::intmax_t Denom>
>
struct frequency<Rep, std::ratio<Num, Denom>>
{
// todo!
frequency& operator+=(const frequency& d);
frequency& operator-=(const frequency& d);
frequency& operator*=(const Rep& rhs);
frequency& operator/=(const Rep& rhs);
frequency& operator%=(const frequency& rhs);
Rep count() const;
friend frequency operator+(frequency lhs, frequency const& rhs);
friend frequency operator-(frequency lhs, frequency const& rhs);
friend frequency operator*(frequency self, Rep const& scalar);
friend frequency operator*(Rep const& scalar, frequency self);
friend frequency operator/(frequency self, Rep const& scalar);
friend frequency operator%(frequency lhs, Rep const& rhs);
friend frequency operator%(frequency lhs, frequency const& rhs);
friend bool operator==(frequency const& lhs, frequency const& rhs);
friend bool operator!=(frequency const& lhs, frequency const& rhs);
friend bool operator<=(frequency const& lhs, frequency const& rhs);
friend bool operator>=(frequency const& lhs, frequency const& rhs);
friend bool operator<(frequency const& lhs, frequency const& rhs);
friend bool operator>(frequency const& lhs, frequency const& rhs);
template<class ToFrequency>
friend ToFrequency duration_cast(frequency const& self);
// etc
};
template<class Rep>
using hertz = frequency<Rep>;
template<class T>
hertz<T> operator "" _hz(T t) {
return hertz<T>(std::move(t));
}
是13_hz
类型的对象。