Files
99_7018_lmx/apps/common/icsd/anc/icsd_anc_app.h

152 lines
5.3 KiB
C
Raw Normal View History

2025-10-29 13:10:02 +08:00
#ifndef _ICSD_ANC_APP_H
#define _ICSD_ANC_APP_H
/*===========接口说明=============================================
. void sd_anc_init(audio_anc_t *param,u8 mode)
1.sd anc训练
2.param为ANC ON模式下的audio_anc_t参数指针
3.mode0. 1. htarget
. void sd_anc_htarget_data_send(float *h_freq,float *hszpz_out,float *hpz_out, float *htarget_out,int len)
1.htarget数据上传模式下
. void sd_anc_htarget_data_end()
1.htarget数据上传模式下ANC ON模式
. void anc_user_train_tone_play_cb()
1.ANC ON提示音结束时回调该函数进入 SD ANC
2.SD ANC训练结束后会切换到ANC ON模式
1:rdout + lout 2:rdout + rerrmic
3:rdout + rrefmic 4:ldout + lerrmic
5:ldout + lrefmic 6:rerrmic + rrefmic
7:lerrmic + lrefmic
anc_sr, 0: 11.7k 1: 23.4k 2: 46.9k 3: 93.8k 4: 187.5k 5: 375k 6: 750k 7: 1.5M
================================================================*/
#include "asm/anc.h"
#include "asm/dac.h"
#include "app_config.h"
#include "icsd_anc.h"
#include "icsd_anc_client_board.h"
#ifndef ADAPTIVE_CLIENT_BOARD
#define ICSD_ANC_MODE TWS_TONE_BYPASS_MODE
#define ANC_ADAPTIVE_FF_ORDER 8 /*ANC自适应FF滤波器阶数, 原厂指定*/
#define ANC_ADAPTIVE_FB_ORDER 5 /*ANC自适应FB滤波器阶数原厂指定*/
#define ANC_ADAPTIVE_CMP_ORDER 8 /*ANC自适应CMP滤波器阶数原厂指定*/
#define ANC_ADAPTIVE_RECORD_FF_ORDER 8 /*ANC自适应耳道记忆FF滤波器阶数原厂指定*/
#define ANC_FB_TRAIN_OFF 1
#define ANC_FB_TRAIN_NEW 0
#define ANC_EARPHONE_CHECK_EN 0
#define ANC_ADAPTIVE_CMP_EN 1 //自适应CMP补偿
#define ANC_ADAPTIVE_TONE_DELAY 1570
#endif/*ADAPTIVE_CLIENT_BOARD*/
#define ANC_HEADSET_TONE_00 0
#define ANC_HEADSET_TONE_01 1
#define ANC_HEADSET_TONE ANC_HEADSET_TONE_00
#if ANC_HEADSET_TONE == ANC_HEADSET_TONE_00
#define TONEL_DELAY 50
#define TONER_DELAY 2400
#define PZL_DELAY 900
#define PZR_DELAY 3300
#else
#define TONEL_DELAY 50
#define TONER_DELAY 1000
#define PZL_DELAY 1900
#define PZR_DELAY 3200
#endif
#define TEST_EAR_RECORD_EN 0
#define TEST_ANC_COMBINATION TEST_ANC_COMBINATION_OFF
#define TEST_ANC_TRAIN TEST_ANC_TRAIN_OFF
#define ICSD_ANC_DEBUG_TYPE ANC_DEBUG_OFF
#define ANC_USER_TRAIN_EN 1
#if ICSD_ANC_MODE == HEADSET_BYPASS_MODE
#define ANC_USER_TRAIN_TONE_MODE 0
#define BYPASS_MAXTIME 4
#define PZ_MAXTIME 4
#elif ICSD_ANC_MODE == HEADSET_TONES_MODE
#define ANC_USER_TRAIN_TONE_MODE 1
#define BYPASS_MAXTIME 2
#define PZ_MAXTIME 3
#elif ICSD_ANC_MODE == TWS_BYPASS_MODE
#define ANC_USER_TRAIN_TONE_MODE 0
#define BYPASS_MAXTIME 4
#define PZ_MAXTIME 4
#elif ICSD_ANC_MODE == TWS_TONE_BYPASS_MODE
#define ANC_USER_TRAIN_TONE_MODE 1
#define BYPASS_MAXTIME 2
#define PZ_MAXTIME 3
#elif ICSD_ANC_MODE == TWS_TONE_MODE
#define ANC_USER_TRAIN_TONE_MODE 1
#define BYPASS_MAXTIME 2
#define PZ_MAXTIME 3
#elif ICSD_ANC_MODE == HEADSET_TONE_BYPASS_MODE
#define ANC_USER_TRAIN_TONE_MODE 1
#define BYPASS_MAXTIME 2
#define PZ_MAXTIME 3
#else
#define ANC_USER_TRAIN_TONE_MODE 0
#define BYPASS_MAXTIME 4
#define PZ_MAXTIME 4
#endif
#define ANC_USER_TRAIN_MODE 2//0:FF 1:FB 2:HY
#define ANC_USER_TRAIN_SR_SEL 2//46.9k
#define ANC_EAR_RECORD_EN 1 //耳道记忆
#define EAR_RECORD_MAX 5
#define ANC_DFF_AFB_EN 1//默认FF + 自适应FB 1:判断为自适应成功 0:判断为自适应失败
#define ANC_AFF_DFB_EN 1//默认FB + 自适应FF 1:判断为自适应成功 0:判断为自适应失败
#define ANC_SZ_OUT_EN 0//自适应SZ输出使能
#define HEADSET_TONES_MODE_BYPASS_OFF 0
//耳道记忆滤波器保存大小,滤波器组 * 3 + 总增益
#define ANC_VMDATA_FF_RECORD_SIZE (ANC_ADAPTIVE_RECORD_FF_ORDER * 3) + 1
extern float (*vmdata_FL)[ANC_VMDATA_FF_RECORD_SIZE];//ff fgq
extern float (*vmdata_FR)[ANC_VMDATA_FF_RECORD_SIZE];//ff fgq
extern int *vmdata_num;
#define ANC_USE_RECORD 1 //ANC自适应失败使用耳道记忆参数
#define ANC_SUCCESS 2 //ANC自适应成功
#define ANC_USE_DEFAULT 3 //ANC自适应使用ICSD内部默认参数目前不用;
//自适应训练结果 u8
#define ANC_ADAPTIVE_RESULT_LFF BIT(0) //使用LFF自适应or记忆参数
#define ANC_ADAPTIVE_RESULT_LFB BIT(1) //使用LFB自适应参数
#define ANC_ADAPTIVE_RESULT_LCMP BIT(2) //使用LCMP自适应参数
#define ANC_ADAPTIVE_RESULT_RFF BIT(3) //使用RFF自适应or记忆参数
#define ANC_ADAPTIVE_RESULT_RFB BIT(4) //使用RFB自适应参数
#define ANC_ADAPTIVE_RESULT_RCMP BIT(5) //使用RCMP自适应参数
struct icsd_fb_ref {
float m_value;
float sen;
float in_q;
};
struct icsd_ff_ref {
float fre[75];
float db[75];
};
extern void icsd_anc_vmdata_init(float (*FL)[ANC_VMDATA_FF_RECORD_SIZE], float (*FR)[ANC_VMDATA_FF_RECORD_SIZE], int *num);
#endif/*_ICSD_ANC_APP_H*/