1 /* ----------------------------------------------------------------------
2 * Project: CMSIS DSP Library
3 * Title: arm_welch_f64.c
4 * Description: Floating-point (f64) Welch window
5 *
6 * $Date: 14 December 2022
7 * $Revision: v1.15.0
8 *
9 * Target Processor: Cortex-M and Cortex-A cores
10 * -------------------------------------------------------------------- */
11 /*
12 * Copyright (C) 2010-2022 ARM Limited or its affiliates. All rights reserved.
13 *
14 * SPDX-License-Identifier: Apache-2.0
15 *
16 * Licensed under the Apache License, Version 2.0 (the License); you may
17 * not use this file except in compliance with the License.
18 * You may obtain a copy of the License at
19 *
20 * www.apache.org/licenses/LICENSE-2.0
21 *
22 * Unless required by applicable law or agreed to in writing, software
23 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
24 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25 * See the License for the specific language governing permissions and
26 * limitations under the License.
27 */
28
29 #include "dsp/window_functions.h"
30
31 /**
32 @ingroup groupWindow
33 */
34
35 /**
36 @defgroup WindowNormal Regular window functions
37
38 Regular window functions that can be used for
39 detecting tones or estimating the noise.
40 If you need to estimate the amplitude of a tones,
41 prefer a flat top window.
42
43 */
44
45
46
47 /**
48 @addtogroup WindowNormal
49 @{
50 */
51
52
53 /**
54 @ingroup WindowWELCH
55 */
56
57 /**
58 @brief Welch window generating function (f64).
59 @param[out] pDst points to the output generated window
60 @param[in] blockSize number of samples in the window
61 @return none
62
63 @par Parameters of the window
64
65 | Parameter | Value |
66 | ------------------------------------: | -----------------: |
67 | Peak sidelobe level | 21.3 dB |
68 | Normalized equivalent noise bandwidth | 1.2 bins |
69 | 3 dB bandwidth | 1.1535 bins |
70 | Flatness | -2.2248 dB |
71 | Recommended overlap | 29.3 % |
72
73 */
74
75
76
arm_welch_f64(float64_t * pDst,uint32_t blockSize)77 void arm_welch_f64(
78 float64_t * pDst,
79 uint32_t blockSize)
80 {
81 float64_t k = 2.0 / ((float64_t) blockSize);
82 float64_t w;
83
84 for(uint32_t i=0;i<blockSize;i++)
85 {
86 w = i * k - 1.0;
87 w = 1.0 - w * w;
88 pDst[i] = w;
89 }
90 }
91
92 /**
93 @} end of WindowNormal group
94 */
95
96