roo_quantity
API Documentation for roo_quantity
Loading...
Searching...
No Matches
frequency.h
Go to the documentation of this file.
1#pragma once
2
3#include <cmath>
4
5#include "roo_flags.h"
6#include "roo_logging.h"
7#include "roo_quantity/time.h"
8
9#if defined(ESP32) || defined(ESP8266) || defined(__linux__)
10#include <string>
11#endif
12
13#if defined(ARDUINO)
14#include <Arduino.h>
15#endif
16
17namespace roo_quantity {
18
19/// Representation of frequency, internally stored as floating-point Hertz.
20class Frequency {
21 public:
22 /// Creates a frequency object representing an 'unknown' frequency.
23 Frequency() : frequency_(std::nanf("")) {}
24
25 /// Returns the frequency in GigaHertz.
26 float inGigaHertz() const { return frequency_ * 0.000000001f; }
27
28 /// Returns the frequency in MegaHertz.
29 float inMegaHertz() const { return frequency_ * 0.000001f; }
30
31 /// Returns the frequency in kiloHertz.
32 float inKiloHertz() const { return frequency_ * 0.001f; }
33
34 /// Returns the frequency in Hertz.
35 float inHertz() const { return frequency_; }
36
37 /// Returns the frequency in milliHertz.
38 float inMilliHertz() const { return frequency_ * 1000.0f; }
39
40 /// Returns the frequency in microHertz.
41 float inMicroHertz() const { return frequency_ * 1000000.0f; }
42
43 /// Returns the rotational frequency in radians per second.
44 float inRadiansPerSecond() const { return frequency_ * 2.0f * M_PI; }
45
46 /// Returns the rotational frequency in cycles per second (equivalent
47 /// to Hertz).
48 float inCyclesPerSecond() const { return inHertz(); }
49
50 /// Returns the rotational frequency in RPM.
51 float inRevolutionsPerMinute() const { return frequency_ * 60.0f; }
52
53 /// Returns the rotational frequency in RPM.
54 float inRPM() const { return inRevolutionsPerMinute(); }
55
56 /// Returns whether the object represents an unknown frequency.
57 bool isUnknown() const { return std::isnan(frequency_); }
58
59 bool operator<(const Frequency &other) const {
60 return frequency_ < other.frequency_;
61 }
62
63 bool operator==(const Frequency &other) const {
64 return frequency_ == other.frequency_;
65 }
66
67 bool operator>(const Frequency &other) const {
68 return other.frequency_ < frequency_;
69 }
70
71 bool operator<=(const Frequency &other) const {
72 return !(other.frequency_ < frequency_);
73 }
74
75 bool operator>=(const Frequency &other) const {
76 return !(frequency_ < other.frequency_);
77 }
78
79 bool operator!=(const Frequency &other) const {
80 return !(frequency_ == other.frequency_);
81 }
82
83 Frequency &operator*=(float multi) {
84 frequency_ *= multi;
85 return *this;
86 }
87
88 Frequency &operator/=(float div) {
89 frequency_ /= div;
90 return *this;
91 }
92
93#if defined(ESP32) || defined(ESP8266) || defined(__linux__)
94 /// Returns the string representation of the frequency.
95 std::string asString() const;
96#endif
97
98#if defined(ARDUINO)
99 String asArduinoString() const;
100#endif
101
102 private:
104
105 friend Frequency FrequencyInHertz(float);
106
107 explicit Frequency(float frequency) : frequency_(frequency) {}
108
109 /// Stored in Hertz.
110 float frequency_;
111};
112
113inline Frequency FrequencyInHertz(float frequency);
114
115/// Returns a frequency object representing an unknown frequency.
117
118/// Returns a frequency object equivalent to the specified frequency
119/// expressed in gigaHertz.
120inline Frequency FrequencyInGigaHertz(float frequency) {
121 return FrequencyInHertz(frequency * 1000000000.0f);
122}
123
124/// Returns a frequency object equivalent to the specified frequency
125/// expressed in megaHertz.
126inline Frequency FrequencyInMegaHertz(float frequency) {
127 return FrequencyInHertz(frequency * 1000000.0f);
128}
129
130/// Returns a frequency object equivalent to the specified frequency
131/// expressed in kiloHertz.
132inline Frequency FrequencyInKiloHertz(float frequency) {
133 return FrequencyInHertz(frequency * 1000.0f);
134}
135
136/// Returns a frequency object equivalent to the specified frequency
137/// expressed in Hertz.
138inline Frequency FrequencyInHertz(float frequency) {
139 return Frequency(frequency);
140}
141
142/// Returns a frequency object equivalent to the specified frequency
143/// expressed in milliHertz.
144inline Frequency FrequencyInMilliHertz(float frequency) {
145 return FrequencyInHertz(frequency * 0.001f);
146}
147
148/// Returns a frequency object equivalent to the specified frequency
149/// expressed in microHertz.
150inline Frequency FrequencyInMicroHertz(float frequency) {
151 return FrequencyInHertz(frequency * 0.000001f);
152}
153
154/// Returns a frequency object equivalent to the specified rotational frequency
155/// expressed in radians per second.
157 return FrequencyInHertz(omega * 0.1591549430918f);
158}
159
160/// Returns a frequency object equivalent to the specified rotational frequency
161/// expressed in revolutions per minute (RPM).
163 return FrequencyInHertz(frequency * 0.016666666666666666f);
164}
165
166/// Returns a frequency object equivalent to the specified rotational frequency
167/// expressed in revolutions per minute (RPM).
168inline Frequency FrequencyInRPM(float frequency) {
169 return FrequencyInRevolutionsPerMinute(frequency);
170}
171
172inline Frequency operator*(Frequency a, float b) {
173 return FrequencyInHertz(a.inHertz() * b);
174}
175
176inline Frequency operator*(float a, Frequency b) {
177 return FrequencyInHertz(a * b.inHertz());
178}
179
180inline float operator*(Time a, Frequency b) {
181 return a.inSeconds() * b.inHertz();
182}
183
184inline float operator*(Frequency a, Time b) {
185 return a.inHertz() * b.inSeconds();
186}
187
188inline Frequency operator/(Frequency a, float b) {
189 return FrequencyInHertz(a.inHertz() / b);
190}
191
192inline float operator/(Frequency a, Frequency b) {
193 return a.inHertz() / b.inHertz();
194}
195
196inline Time operator/(float a, Frequency b) {
197 return TimeInSeconds(a / b.inHertz());
198}
199
200inline Frequency operator/(float a, Time b) {
201 return FrequencyInHertz(a / b.inSeconds());
202}
203
204roo_logging::Stream &operator<<(roo_logging::Stream &os, const Frequency &val);
205
206} // namespace roo_quantity
Representation of frequency, internally stored as floating-point Hertz.
Definition frequency.h:20
bool isUnknown() const
Returns whether the object represents an unknown frequency.
Definition frequency.h:57
float inCyclesPerSecond() const
Returns the rotational frequency in cycles per second (equivalent to Hertz).
Definition frequency.h:48
bool operator<(const Frequency &other) const
Definition frequency.h:59
bool operator>=(const Frequency &other) const
Definition frequency.h:75
float inRPM() const
Returns the rotational frequency in RPM.
Definition frequency.h:54
float inMegaHertz() const
Returns the frequency in MegaHertz.
Definition frequency.h:29
Frequency()
Creates a frequency object representing an 'unknown' frequency.
Definition frequency.h:23
bool operator!=(const Frequency &other) const
Definition frequency.h:79
float inHertz() const
Returns the frequency in Hertz.
Definition frequency.h:35
float inRevolutionsPerMinute() const
Returns the rotational frequency in RPM.
Definition frequency.h:51
float inMicroHertz() const
Returns the frequency in microHertz.
Definition frequency.h:41
float inMilliHertz() const
Returns the frequency in milliHertz.
Definition frequency.h:38
Frequency & operator/=(float div)
Definition frequency.h:88
float inKiloHertz() const
Returns the frequency in kiloHertz.
Definition frequency.h:32
Frequency & operator*=(float multi)
Definition frequency.h:83
float inGigaHertz() const
Returns the frequency in GigaHertz.
Definition frequency.h:26
bool operator<=(const Frequency &other) const
Definition frequency.h:71
friend Frequency UnknownFrequency()
Returns a frequency object representing an unknown frequency.
Definition frequency.h:116
friend Frequency FrequencyInHertz(float)
Returns a frequency object equivalent to the specified frequency expressed in Hertz.
Definition frequency.h:138
bool operator>(const Frequency &other) const
Definition frequency.h:67
bool operator==(const Frequency &other) const
Definition frequency.h:63
float inRadiansPerSecond() const
Returns the rotational frequency in radians per second.
Definition frequency.h:44
Representation of elapsed, internally stored as floating-point seconds.
Definition time.h:22
float inSeconds() const
Returns the time in seconds.
Definition time.h:30
For convenience conversion from roo_time::Duration.
Definition area.cpp:3
Frequency FrequencyInRadiansPerSecond(float omega)
Returns a frequency object equivalent to the specified rotational frequency expressed in radians per ...
Definition frequency.h:156
roo_logging::Stream & operator<<(roo_logging::Stream &os, const Area &val)
Definition area.cpp:57
Frequency FrequencyInMegaHertz(float frequency)
Returns a frequency object equivalent to the specified frequency expressed in megaHertz.
Definition frequency.h:126
Frequency FrequencyInKiloHertz(float frequency)
Returns a frequency object equivalent to the specified frequency expressed in kiloHertz.
Definition frequency.h:132
Frequency FrequencyInMilliHertz(float frequency)
Returns a frequency object equivalent to the specified frequency expressed in milliHertz.
Definition frequency.h:144
Frequency FrequencyInRPM(float frequency)
Returns a frequency object equivalent to the specified rotational frequency expressed in revolutions ...
Definition frequency.h:168
Frequency UnknownFrequency()
Returns a frequency object representing an unknown frequency.
Definition frequency.h:116
Frequency FrequencyInMicroHertz(float frequency)
Returns a frequency object equivalent to the specified frequency expressed in microHertz.
Definition frequency.h:150
Time TimeInSeconds(float time)
Returns a time object equivalent to the specified time expressed in seconds.
Definition time.h:111
Frequency FrequencyInGigaHertz(float frequency)
Returns a frequency object equivalent to the specified frequency expressed in gigaHertz.
Definition frequency.h:120
Area operator/(Area a, float b)
Definition area.h:191
Area operator*(Area a, float b)
Definition area.h:183
Frequency FrequencyInRevolutionsPerMinute(float frequency)
Returns a frequency object equivalent to the specified rotational frequency expressed in revolutions ...
Definition frequency.h:162
Frequency FrequencyInHertz(float frequency)
Returns a frequency object equivalent to the specified frequency expressed in Hertz.
Definition frequency.h:138