一般的に使用される埋め込みアルゴリズム - シンプルなフィルタリング

単純なフィルタリングは、デジタル信号を前処理するために使用されるデジタル信号処理技術です。その主な目的は、信号内のノイズを低減し、信号の S/N 比を高めることです。簡単なフィルタリングの方法はたくさんありますが、ここではそのうちの 1 つを紹介します。

単純なフィルタリングには、線形フィルタリングと非線形フィルタリングという 2 つの主なタイプがあります。線形フィルタリングは、主に平均化フィルタリングと畳み込みフィルタリングを含む線形演算に基づいています。平均化フィルタリングは、信号を平均していくつかの部分に分割することでノイズを低減します。畳み込みフィルタリングは、信号を畳み込みカーネルで畳み込むことによってノイズを低減することです。

非線形フィルタリングは、主にメディアン フィルタリングとフィルタ フィルタリングを含む非線形操作に基づいています。メディアン フィルタリングは、信号のセグメントを並べ替えて中央値を取得することでノイズを低減します。一方、フィルター フィルター処理は、信号をフィルターで畳み込むことによってノイズを低減します。

/**
 * @brief			简单滤波
 * @param[out]		lpf : 滤波结构数据指针
 * @param[in]		rawData : 原始数据
 */
void SimpleFilter(LpfSimple_t* lpf, int16_t rawData)
{
    
    
	int16_t FilterBuffSort[SimpleFilterDepth] = {
    
    0};	// 暂存排序值

    lpf->OriginData = rawData;
    // 滑动递推更新旧值
    for (uint16_t i = 1; i < SimpleFilterDepth; i ++ ) {
    
    
    	lpf->FilterBuff[i] = lpf->FilterBuff[i - 1];
    }
	// 简单强制消抖 加权存入新值
    if ((fabs(lpf->OriginData - lpf->FilterBuff[0])) < 2.0f) {
    
    
    	lpf->FilterBuff[0] = lpf->OriginData * 0.70f + lpf->FilterBuff[0] * 0.30f;
    } else {
    
    
    	lpf->FilterBuff[0] = lpf->OriginData;
    }
	// 存储待排序值
	memcpy(FilterBuffSort, lpf->FilterBuff, sizeof(lpf->FilterBuff));
	// 升序排序
	Quick_Sort(FilterBuffSort, 0, sizeof(lpf->FilterBuff) - 1, 0);
	// 中值滤波
	lpf->FilterBuff[0] = 0;    // 先清零
	for (uint16_t i = 2; i < (SimpleFilterDepth - 2); i ++ ) {
    
    
		lpf->FilterBuff[0] += FilterBuffSort[i];
	}
	lpf->FilterBuff[0] = lpf->FilterBuff[0] / (SimpleFilterDepth - 4);	// 去除四个极值再计算均值
}

これは、主にノイズを除去し、信号対ノイズ比を高めるために使用される、理解しやすく実装が簡単な信号前処理手法です。ただし、複雑なノイズに対処し、高い信号時間領域パフォーマンスが必要な場合、単純なフィルタリングの効果は他の複雑なフィルタリング アルゴリズムよりも劣るため、特定のアプリケーション シナリオに従って比較検討する必要があります。

このうちメディアンフィルターは信号を並べ替えて中央値を取ることでノイズを低減するものです。一方、フィルター フィルター処理は、信号をフィルターで畳み込むことによってノイズを低減します。

上記のコードに対応する .h ファイルの構造の内容は次のとおりです。

#define SimpleFilterDepth 10
typedef struct {
    
    
	int16_t OriginData;
	int16_t FilterBuff[SimpleFilterDepth];
} LpfSimple_t;

単純なフィルタリングの利点は、理解しやすく、実装が簡単であることです。ただし、複雑なノイズを除去する効果が低いという欠点があります。また、信号の時間領域パフォーマンスが低下する可能性があります。

実際のアプリケーションでは、単純なフィルタリング アルゴリズムでは要件を完全には満たさない可能性があり、信号処理の効果を向上させるために他のフィルタリング アルゴリズムを組み合わせる必要があります。たとえば、信号処理では、最初に単純なフィルタリング アルゴリズムを使用してノイズを除去し、次に他の複雑なフィルタリング アルゴリズムを使用して信号を強調できます。

フィルタリングは信号処理の重要な部分です。ノイズを効果的に低減し、信号対ノイズ比を向上させることができます。ただし、複雑なノイズを処理し、高い信号時間領域パフォーマンスが必要な場合、より優れた信号を得るには、他のフィルタリング アルゴリズムを組み合わせる必要があります。結果、処理効果。

おすすめ

転載: blog.csdn.net/sorcererr/article/details/128701253