簡(jiǎn)單低通濾波器
以下是一個(gè)使用C++語言編寫的基本低通濾波器的示例代碼,它可以對(duì)輸入信號(hào)進(jìn)行濾波以降低高頻成分:
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
// 低通濾波器類
class LowPassFilter {
public:
LowPassFilter(double sample_rate, double cutoff_frequency) {
double dt = 1.0 / sample_rate;
double RC = 1.0 / (cutoff_frequency * 2.0 * M_PI);
alpha_ = dt / (dt + RC);
prev_output_ = 0.0;
}
// 更新濾波器輸出
double update(double input) {
double output = alpha_ * input + (1.0 - alpha_) * prev_output_;
prev_output_ = output;
return output;
}
private:
double alpha_;
double prev_output_;
};
int main() {
// 輸入信號(hào)
vector<double> input_signal = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0};
// 采樣率和截止頻率
double sample_rate = 100.0;
double cutoff_frequency = 10.0;
// 創(chuàng)建低通濾波器
LowPassFilter filter(sample_rate, cutoff_frequency);
// 對(duì)輸入信號(hào)進(jìn)行濾波
vector<double> output_signal;
for (double input : input_signal) {
double output = filter.update(input);
output_signal.push_back(output);
}
// 輸出濾波結(jié)果
for (double output : output_signal) {
cout << output << " ";
}
cout << endl;
return 0;
}
在這個(gè)示例中,我們使用一個(gè)一階濾波器來實(shí)現(xiàn)低通濾波器。該濾波器具有一個(gè)截止頻率,所有高于該頻率的信號(hào)成分都會(huì)被過濾掉。在構(gòu)造函數(shù)中,我們根據(jù)采樣率和截止頻率計(jì)算出濾波器的alpha系數(shù),這個(gè)系數(shù)用于控制信號(hào)在輸入和輸出之間的平衡。然后,我們?cè)?span id="n5n3t3z" class="kdocs-bold" style="font-weight:bold;">update函數(shù)中使用輸入信號(hào)和alpha系數(shù)來計(jì)算濾波器的輸出,并且將輸出保存在prev_output_中,以便在下一次更新時(shí)使用。
在主函數(shù)中,我們創(chuàng)建了一個(gè)輸入信號(hào)向量,并且創(chuàng)建了一個(gè)低通濾波器對(duì)象。然后,我們使用for循環(huán)將輸入信號(hào)中的每個(gè)元素傳遞給濾波器進(jìn)行處理,并且將輸出保存在一個(gè)新的向量中。最后,我們將濾波后的輸出向量輸出到控制臺(tái)。文章來源:http://www.zghlxwxcb.cn/news/detail-500900.html
FIR低通濾波器
以下是一個(gè)使用C++語言編寫的基本FIR濾波器的示例代碼,它可以對(duì)輸入信號(hào)進(jìn)行濾波以實(shí)現(xiàn)頻率選擇性:文章來源地址http://www.zghlxwxcb.cn/news/detail-500900.html
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
// 創(chuàng)建一個(gè)函數(shù),用于生成低通濾波器的系數(shù)
vector<double> createLowpassFilter(int M, double fc, double fs) {
vector<double> h(M + 1);
for (int n = 0; n <= M; ++n) {
if (n == M / 2) {
h[n] = 2.0 * fc / fs;
} else {
h[n] = sin(2.0 * M_PI * fc * (n - M / 2.0) / fs) / (M_PI * (n - M / 2.0));
}
h[n] *= 0.54 - 0.46 * cos(2.0 * M_PI * n / M);
}
return h;
}
// FIR濾波器類
class FirFilter {
public:
FirFilter(const vector<double>& taps) : taps_(taps), buffer_(taps.size(), 0.0) {}
// 更新濾波器輸出
double update(double input) {
到了這里,關(guān)于使用C++設(shè)計(jì)濾波器(低通濾波器,高通濾波器,帶通濾波器)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!