---
title: Pwelch
description: "Welch方法是一种修正周期图功率谱密度估计方法，它通过选取的窗口对数据进行加窗处理，先分段求功率谱之后再进行平均。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/240RC1/accel/kunpengaccel_hmpp_06_0147.html
sourcePath: /source/zh/kunpengboostkithistory/240RC1/accel/kunpengaccel_hmpp_06_0147.html
indexId: d03c7ce11bb0db0172b53307ec981c0b83a554a6c5646800adf486fe259e1fc077
---
# Pwelch

Welch方法是一种修正周期图功率谱密度估计方法，它通过选取的窗口对数据进行加窗处理，先分段求功率谱之后再进行平均。

函数接口声明如下：

HmppResult HMPPS_Pwelch_32f(const float* src, const float* window, float* dst, int32_t len, double overLap, int32_t nfft, int32_t windowLen);

HmppResult HMPPS_Pwelch_64f(const double* src, const double* window, double* dst, int32_t len, double overLap, int32_t nfft, int32_t windowLen);

HmppResult HMPPS_Pwelch_32fc(const Hmpp32fc* src, const float* window, float* dst, int32_t len, double overLap, int32_t nfft, int32_t windowLen);

HmppResult HMPPS_Pwelch_64fc(const Hmpp64fc* src, const double* window, double* dst, int32_t len, double overLap, int32_t nfft, int32_t windowLen);

#### 参数

| 参数名 | 描述 | 取值范围 | 输入/输出 |
| --- | --- | --- | --- |
| src | 指向保存源信号向量的数组。 | 非空 | 输入 |
| window | 指向保存窗向量的数组。 | 可以为空。为空时默认为全位1，长度为windowLen。 | 输入 |
| dst | 功率谱密度的估计数组。 | 非空 | 输出 |
| overlap | 相邻两段数据之间的重叠部分占window长度的比例。 | (0, 0.95] | 输入 |
| nfft | FFT点数。 | [INT\_MIN, windowLen]，小于零时默认为windowLen。 | 输入 |
| len | 源信号向量长度。 | (0, INT\_MAX] | 输入 |
| windowLen | 窗向量长度。 | (0, len] | 输入 |


#### 返回值

- 成功：返回HMPP_STS_NO_ERR。
- 失败：返回错误码。


#### 错误码

| 错误码 | 描述 |
| --- | --- |
| HMPP\_STS\_NULL\_PTR\_ERR | src、dst这两个入参中存在空指针。 |
| HMPP\_STS\_SIZE\_ERR | len小于或等于0。 |
| HMPP\_SYS\_MALLOC\_FAILED | 函数执行中出现malloc失败。 |


#### 示例

```
#define  BUFFER_SIZE_T 5
#define  NFFT 2
#define  WINDOWLEN 2
#define  OVERLAP 0.5
void PwelchExample()
{
float src[BUFFER_SIZE_T] = {1, 2.5, 3.3, 1, 5};
float window[2] = {1,1};
float dst[BUFFER_SIZE_T];
HMPPS_Zero_32f(dst, BUFFER_SIZE_T); // 数组初始化，将dst所有元素初始化为0.
HmppResult result = HMPPS_Pwelch_32f(src, window, dst, BUFFER_SIZE_T, OVERLAP, WINDOWLEN, NFFT);
if (result == HMPP_STS_NO_ERR) {
printf("dst = ");
for (int32_t i = 0; i < (NFFT + 1) / 2; i++) {
printf("%.2f ", dst[i]);
}
printf("\n");
}
}
```

运行结果：

```
dst = 0.97 0.18
```
