日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言 包络算法,包络检测C程序

發布時間:2023/11/30 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言 包络算法,包络检测C程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近做項目要提取一個聲音信號的包絡波形,所以花了點時間研究各種包絡提取的算法。

所謂包絡檢測又叫幅度解調,在許多領域都有重要的應用。如果載波信號是確定的,那么通常可以采用同步解調的方式,這種方式的信噪比最好,對信號中混入的噪聲的抑制能力最強。所謂同步解調是通訊領域通常的叫法。在信號檢測領域,這種方式通常稱為“相敏檢波”,鎖相放大器(Lock-in?Amplifier)采用的就是這種方式最典型的例子。

如果載波比較亂,就像我現在的應用場景,要提取噪聲的幅度隨時間變化的規律,那么包絡檢波法會更適宜。我這里的代碼就是采用的包絡檢波法。

包絡檢波法的基本原理可以看下面這個電路圖,這個是最基本的半波包絡檢波。

把這個過程用程序來實現就有了下面的代碼。

/**

* 包絡檢波,模擬了硬件半波檢波的過程

* rc = 0 時初始化

**/

double env_1(double x, double rct)

{

static double old_y = 0.0;

if(rct == 0.0)

{

old_y = 0.0;

}

else

{

if(x > old_y)

{

old_y = x;

}

else

{

old_y *= rct / ( rct + 1 );

}

}

return old_y;

}

void env_2(double x[], double y[], int N, double rct)

{

double xx = 0.0;

int i;

y[0] = fabs(x[0]);

for(i = 1; i < N; i++)

{

if( x[i] > y[i-1])

{

y[i] = x[i];

}

else

{

y[i] = y[i-1] * rct / ( rct + 1 );

}

}

}

上面是半波檢測的代碼,只要稍微增加幾行,就能實現全波檢測。

/**

* 包絡檢波,模擬了硬件全波檢波的過程

* rc = 0 時初始化

**/

double env_3(double x, double rct)

{

static double old_y = 0.0;

if(rct == 0.0)

{

old_y = 0.0;

}

else

{

x = fabs(x);

if(x > old_y)

{

old_y = x;

}

else

{

old_y *= rct / ( rct + 1 );

}

}

return old_y;

}

void env_4(double x[], double y[], int N, double rct)

{

double xx = 0.0;

int i;

y[0] = fabs(x[0]);

for(i = 1; i < N; i++)

{

xx = fabs(x[i]);

if( xx > y[i-1])

{

y[i] = xx;

}

else

{

y[i] = y[i-1] * rct / ( rct + 1 );

}

}

}

這個代碼中有個參數?rct,對應的是硬件電路中的RC時間常數,要根據待檢測的包絡信號的頻帶來確定。

下面是用這個代碼實際提取包絡的算例??梢钥闯鲞@個代碼的效果還是蠻不錯的。(比采用Hilbert變換得到的結果還要好)

原文:http://blog.csdn.net/liyuanbhu/article/details/38262751

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的c语言 包络算法,包络检测C程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。