gaoweidong
2026-01-13 c5eeada2c735b0209a061a233483c5cfc29c2230
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#ifndef _FILTERSRENDER_FRVAPI_HH_4749025720734027070437502
#define    _FILTERSRENDER_FRVAPI_HH_4749025720734027070437502
 
#ifdef __cplusplus
extern "C" {
#endif
#define __EXPORT_FUN   extern "C" __declspec(dllexport)
enum FIRFilterType
{
    HIGHPASS,
    LOWPASS,
    EQ,
};
 
enum FIRWindowType
{
    //¾ØÐδ°,w=boxcar(n)
    Rectangle,
    //Èý½Ç´°, w=triang(n)
    Triangle,
    //ººÄþ´°,w=hanning(n)
    Hanning,
    //ººÃ÷´°,w=hanning(n)
    Hamming,
    //²¼À³¿ËÂü´°,w=blackman(n)
    Blackman,
    //¿­Èû´°,w=kaiser(n,beta)
    Kaiser,
};
 
/// <summary>
/// ³õʼ»¯
/// </summary>
/// <returns></returns>
__EXPORT_FUN void* FiltersRenderInit();
/// <summary>
/// Ïú»Ù
/// </summary>
/// <param name="handle">FilterRender¾ä±ú</param>
__EXPORT_FUN void FilterRenderFree(void* handle);
 
/// <summary>
///¸ù¾ÝFIRϵÊýÉú³ÉƵÆ×ͼºÍÏàλͼ 
/// </summary>
/// <param name="handle">FilterRender¾ä±ú</param>
/// <param name="coeffs">FIRÂ˲¨Æ÷ϵÊý</param>
/// <param name="tap">FIRÂ˲¨Æ÷½×Êý</param>
/// <param name="fs">²ÉÑùÂÊ</param>
/// <param name="f">Êä³öƵÂÊ</param>
/// <param name="gain">Êä³öÔöÒæ(dB)</param>
/// <param name="phase">Êä³öÏàλ(-180~180¶È)</param>
/// <param name="num">ÐèÒªÊä³öµÄƵÂʵã¸öÊý</param>
/// <returns>³É¹¦·µ»Ø0</returns>
__EXPORT_FUN int FIRDrawFreqzData(void* handle, double coeffs[], int tap, int fs
    , double f[], double gain[], double phase[], int num);
 
// /// <summary>
// /// ×Ô¶¯Ð£×¼ÆµÂʺÍÏàλ
// /// </summary>
// /// <param name="handle">FilterRender¾ä±ú</param>
// /// <param name="f">Êä³öƵÂÊ</param>
// /// <param name="gain">ÊäÈëÊä³öÔöÒæ(dB)</param>
// /// <param name="phase">ÊäÈëÊä³öÏàλ(-180~180¶È)</param>
// /// <param name="num">ÐèÒªÊä³öµÄƵÂʵã¸öÊý</param>
// /// <returns>³É¹¦·µ»Ø0</returns>
__EXPORT_FUN int FIRAutoMagCalibration(void* handle, double f[], double gain[]
    , double start_freq, double end_freq, int oct, int num);
__EXPORT_FUN int FIRAutoPhaseCalibration(void* handle, double f[], double phase[]
    , double start_freq, double end_freq, int oct, int num);
 
/// <summary>
/// ¸ù¾ÝEQµ÷½ÚÄ¿±êÇúÏß
/// </summary>
/// <param name="handle">FilterRender¾ä±ú</param>
/// <param name="filter_type">EQÀàÐÍ,FIRFilterType</param>
/// <param name="window_type">´°ÀàÐÍ,FIRWindowType</param>
/// <param name="freq">EQƵÂÊ</param>
/// <param name="Q">QÖµ</param>
/// <param name="g">ÔöÒæ</param>
/// <param name="f">Êä³öƵÂÊ</param>
/// <param name="gain">Êä³öÔöÒæ(dB)</param>
/// <param name="phase">Êä³öÏàλ(-180~180¶È)</param>
/// <param name="num">ÐèÒªÊä³öµÄƵÂʵã¸öÊý</param>
/// <returns>³É¹¦·µ»Ø0</returns>
__EXPORT_FUN int FIRAdjustFilter(void* handle, int nsection, int bypass, int filter_type
    , int freq, double Q, double g, double f[], double gain[], double phase[], int num);
 
/// <summary>
/// »ñȡĿ±êÇúÏß¶ÔÓ¦µÄFIRϵÊý
/// </summary>
/// <param name="handle">FilterRender¾ä±ú</param>
/// <param name="coffefs">Ä¿±êϵÊý</param>
/// <returns>·µ»ØÄ¿±êϵÊý½×Êý</returns>
__EXPORT_FUN int FIRGetCoeffs(void* handle, double coffefs[], int windowType, double delay_ms, int tap);
 
/// <summary>
/// Çå¿Õ
/// </summary>
__EXPORT_FUN void FilterRenderReset(void* handle);
 
#ifdef __cplusplus
}
#endif
#endif