#include "A2000.h"
#define SPEECH_1 0
#define DAC1 1
#define DAC2 2
#define Ramp_UpDn_Off 0
#define Ramp_UpDn_On 3
#define Manual 0
#define Auto 1
#define Full 1
#define Empty 2
#define Mode 1
//===============================================================================================
/颤橘/ 函数: main()
// 描述:主函数
//===============================================================================================
main()
{
extern long RES_WW_24K_SA,RES_WW_24K_EA //定义语音资源的首末地址标号
long int Addr //定义地址变量
int Ret = 0 //定义获取语音数据变量并初始化
if(Mode == 1) //采用自动方式播放
{
SACM_A2000_Initial(1)//自动方式播放初始化
SACM_A2000_Play(SPEECH_1,DAC1,Ramp_UpDn_On) //销键定义语音索引号、播放通道、允许亏洞巧音量增/减调节
while(1){
F_ClearWatchdog()
SACM_A2000_ServiceLoop()} //获取语音数据并将其填入解码队列
}
if(Mode == 0)//采用非自动方式播放
{
Addr=RES_WW_24K_SA//送入语音队列的首址
SACM_A2000_Initial(0) //非自动方式播放的初始化
SACM_A2000_InitDecoder(DAC1) //开始对A2000的语音数据以非自动方式解码
while(SACM_A2000_TestQueue()!=Full) //测试并获取语音队列的状态
{
Ret=SP_GetResource(Addr) //从资源文件里获取一个字型语音数据
SACM_A2000_FillQueue(Ret) //获取语音编码数据并填入语音队列等候解码
Addr++
}
while(1)
{
if(SACM_A2000_TestQueue()!=Full)
{
Ret =SP_GetResource(Addr)
SACM_A2000_FillQueue(Ret)
Addr++
}
if(Addr<RES_WW_24K_EA ) //如果该段语音未播完,即未到达末地址时
SACM_A2000_Decoder() //获取资源并进行解码,再通过中断服务子程序送入DAC通道播放
else
SACM_A2000_Stop() //否则,停止播放
F_ClearWatchdog()//清看门狗
}
}
}
在声纹识别中,为了满足对不同采样率的要求,常需要对语音进行重采样。重采样即将原始的采样频率变换为新的采样频率以适应不同采样率的要求。实现重采样的传统方法有三种:一是若原模拟信号x(t)可以再生,或是已记录下来,那么可以进行重新采样;二是将x(n)通过数模转换D/A变成模拟信号x(t),对x(t)经模数转换A/D在重新采样;三是L/M倍采样率转换 算法 ,对采样后的数字信号x(n),在“数字域”做采样率转换,以得到新的采样率。方法一所处理的情况比较特殊。方法二再一次引入A/D和D/A量化误差。方法三最为理想。音频重采样主要步骤是进行插值或抽取。由于抽取可能产生混叠,内插可能产生镜像,因此需要在抽取前进行抗混叠滤波,在内插后进行抗镜像滤波。抗混叠滤波和抗姿陵陵镜像滤波都是使用低通滤波器实现。
假设已对音频信号x(n)(1≤n≤N)以频率L进行采样,现在要对他以新的频率M进行采样,L和M都是实数。M可以比L大或者小。如果M>L,那么就是上采样,反之,就为迹戚下采样。让y(k)(1≤k≤K)表示重采样后的信号,明显满足关系K=M/L*N。要导出y(k)的一些基本问题必须考虑:(1)需要多少个x(n)采样汪猜点去导出一个y(k)的采样点幅值;这便涉及到窗口大小的问题。(2)什么插值函数比较适合与如何估计逼近精度,这涉及到逼近函数的问题。
对于第一个问题,每个音频信号的采样仅仅决定于一些与它邻近的采样值。实际上窗是非常小的,通常仅仅包含几个采样值,以节省计算量和时间要求。第二个问题,内插函数和逼近函数是数学问题。众所周知任意连续函数可以被任意均匀的多项式或三角多项式表示。逼近的精度可以用泰勒级数和原函数的高阶函数来估计。所以理论上可以选择合适的多项式和三角多项式作为音频重采样的插入函数。
matlab中可以采用resample函数实现重采样。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)