mirror of
https://github.com/AlexandreRouma/SDRPlusPlus.git
synced 2024-12-26 10:58:29 +01:00
Fixed some stuff 2
This commit is contained in:
parent
89d0f6b761
commit
044f8cbffd
@ -10,12 +10,6 @@ namespace dsp {
|
|||||||
virtual void createTaps(float* taps, int tapCount, float factor = 1.0f) {}
|
virtual void createTaps(float* taps, int tapCount, float factor = 1.0f) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class generic_complex_window {
|
|
||||||
public:
|
|
||||||
virtual int getTapCount() { return -1; }
|
|
||||||
virtual void createTaps(dsp::complex_t* taps, int tapCount, float factor = 1.0f) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
class BlackmanWindow : public filter_window::generic_window {
|
class BlackmanWindow : public filter_window::generic_window {
|
||||||
public:
|
public:
|
||||||
BlackmanWindow() {}
|
BlackmanWindow() {}
|
||||||
@ -149,75 +143,5 @@ namespace dsp {
|
|||||||
float _cutoff, _transWidth, _sampleRate, _offset;
|
float _cutoff, _transWidth, _sampleRate, _offset;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class BlackmanBandpassWindow : public filter_window::generic_complex_window {
|
|
||||||
public:
|
|
||||||
BlackmanBandpassWindow() {}
|
|
||||||
BlackmanBandpassWindow(float cutoff, float transWidth, float offset, float sampleRate) { init(cutoff, transWidth, offset, sampleRate); }
|
|
||||||
|
|
||||||
void init(float cutoff, float transWidth, float offset, float sampleRate) {
|
|
||||||
_cutoff = cutoff;
|
|
||||||
_transWidth = transWidth;
|
|
||||||
_offset = offset;
|
|
||||||
_sampleRate = sampleRate;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setSampleRate(float sampleRate) {
|
|
||||||
_sampleRate = sampleRate;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setCutoff(float cutoff) {
|
|
||||||
_cutoff = cutoff;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setTransWidth(float transWidth) {
|
|
||||||
_transWidth = transWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setOffset(float offset) {
|
|
||||||
_offset = offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
int getTapCount() {
|
|
||||||
float fc = _cutoff / _sampleRate;
|
|
||||||
if (fc > 1.0f) {
|
|
||||||
fc = 1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
int _M = 4.0f / (_transWidth / _sampleRate);
|
|
||||||
if (_M < 4) {
|
|
||||||
_M = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_M % 2 == 0) { _M++; }
|
|
||||||
|
|
||||||
return _M;
|
|
||||||
}
|
|
||||||
|
|
||||||
void createTaps(dsp::complex_t* taps, int tapCount, float factor = 1.0f) {
|
|
||||||
float fc = _cutoff / _sampleRate;
|
|
||||||
if (fc > 1.0f) {
|
|
||||||
fc = 1.0f;
|
|
||||||
}
|
|
||||||
float tc = tapCount;
|
|
||||||
float sum = 0.0f;
|
|
||||||
float val;
|
|
||||||
for (int i = 0; i < tapCount; i++) {
|
|
||||||
val = (sin(2.0f * FL_M_PI * fc * ((float)i - (tc / 2))) / ((float)i - (tc / 2))) *
|
|
||||||
(0.42f - (0.5f * cos(2.0f * FL_M_PI / tc)) + (0.8f * cos(4.0f * FL_M_PI / tc)));
|
|
||||||
taps[i] = val; // tapCount - i - 1
|
|
||||||
sum += val;
|
|
||||||
}
|
|
||||||
for (int i = 0; i < tapCount; i++) {
|
|
||||||
taps[i] *= cos(2.0f * (_offset / _sampleRate) * FL_M_PI * (float)i);
|
|
||||||
taps[i] *= factor;
|
|
||||||
taps[i] /= sum;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
float _cutoff, _transWidth, _sampleRate, _offset;
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user