请教梁工一个音频采集问题。32G8K64
使用STC32G8K64采集音频。采样率8K +cs4344输出。主频36.864MADC端口P04 第12通道 VREF 采用TL431/2.5V听感上语音严重失真。(给驻极体单独接电位器调节偏置电压,没有改观只是输出大小变化)
首先排除前级。去掉驻极体。从驻极体加信号源。测量经过LMV358放大到P04端口。信号正常。各种波形显示非常好。排除前级失真问题。
经过cs4344输出接示波器测量。发现在4K 正弦波的时候波形跳动非常厉害。看视频。其他频率都正常(超过7.5K 基本没有输出,说明前级截止频率计算正常)
百思不得其解。为什么语音听感失真非常严重。
/* ========== I2S中断:直接输出当前ADC值 ========== */
void I2S_ISR(void) interrupt 62
{u16 j;
unsigned int sample;
if (I2SSR & 0x02)
{
if (I2SSR & 0x04) //右声道
{
j = T_SINE_R + 32768; //单极性转成双极性(无符号转有符号)
I2SDRH = (u8)(j /256); //发送下一帧音频数据
I2SDRL = (u8)(j %256) & 0xfe;
dac_index++;
dac_index &= 31;
// sample = (int)(adc_data-2048) << 4;
// I2SDRH = (unsigned char)(sample >> 8);
// I2SDRL = (unsigned char)(sample & 0xFF);
}
else //左声道
{
// j = T_SINE_L + 32768; //单极性转成双极性(无符号转有符号)
// I2SDRH = (u8)(j /256); //发送下一帧音频数据
// I2SDRL = (u8)(j %256) & 0xfe;
sample = (int)(adc_data-2048) << 4;
I2SDRH = (unsigned char)(sample >> 8);
I2SDRL = (unsigned char)(sample & 0xFF);
}
}
}
/* ========== ADC初始化 ========== */
void ADC_Init(void)
{
ADCTIM = 0x3F;
ADCCFG = 0x0C;
ADC_CONTR = 0x80;
}
/* ========== 读取ADC ========== */
unsigned int ADC_Read(unsigned char channel)
{
unsigned int result;
ADC_CONTR = (ADC_CONTR & 0xF0) | (channel & 0x0F) | 0x40 | 0x80;
ADC_START = 1;//启动ADC转换
_nop_();
_nop_();
_nop_();
_nop_();
while(ADC_FLAG == 0); //wait for ADC finish
ADC_FLAG = 0; //清除ADC结束标志
result = (ADC_RES << 8) | ADC_RESL;
return result;
}
/* ========== I2S初始化 ========== */
void I2S_Init(void)
{
unsigned char i2s_odd;
unsigned char i2s_div;
I2SMD = 0xFF;
I2SCR = 0x90;
i2s_odd = (unsigned char)(I2SDIV & 1);
i2s_div = (unsigned char)(I2SDIV / 2);
I2SPRH = 0x02 + i2s_odd;
I2SPRL = i2s_div;
I2SCFGH = 0x02;
I2SCFGL = 0x00;
/* I2S端口切换 */
P_SW3 = (P_SW3 & 0x3F) | (2 << 6);
I2SCFGH |= 0x04; /* 使能I2S */
}
/* ========== 定时器0初始化 ========== */
void Timer0_Init(void)
{
AUXR |= 0x80; // 1T模式
TMOD &= 0xF0;
TL0 = 0x00;
TH0 = 0xEE;
TF0 = 0;
TR0 = 1;
ET0 = 1;
}
/* ========== 定时器0中断:ADC单次采样 ========== */
void Timer0_Isr(void) interrupt 1
{
adc_data = ADC_Read(12);
}
有空帮忙分析一下
可能频域上有多个分量 怀疑咪头问题,你靠近咪头,用鼻子发连续的“嗯”音,咪头会输出近似的正弦波,示波器观察运放第一级的输出波形看是否正常。或者先查表输出正弦波用喇叭播放靠近咪头,示波器观察运放第一级的输出波形看是否正常。
梁工 发表于 2026-6-1 22:29
怀疑咪头问题,你靠近咪头,用鼻子发连续的“嗯”音,咪头会输出近似的正弦波,示波器观察运放第一级的输出 ...
我已经拆掉咪头,用信号源通过电阻分压接到咪头位置。从LMV358输出到ADC 用示波器测量波形都正常。(输入25毫伏,LMV358输出在750毫伏左右,波形正常)说明是采样以后的问题。唯独就是4K附近。3.9K 4.1K 距离4K 越接近。抖动越厉害。本身用查询表输出正弦波形正常。会不会i与ADC设置有关系。按照道理不应该 zhang32568 发表于 2026-6-1 23:17
我已经拆掉咪头,用信号源通过电阻分压接到咪头位置。从LMV358输出到ADC 用示波器测量波形都正常。(输入2 ...
ADC与I2S没有任何关系的,各自独立。
才想到,你是采样率8KHz哦,只能采样小于4KHz的信号,超过4KHz就会出现频谱交叠(折叠)。
您可以了解一下采样原理。 按照道理,采样需要不少于两倍 信号频率。但是很奇怪。高于4K,5--6--7K都非常稳定。按照道理 5K到7K都应该不正常。 梁工 发表于 2026-6-2 11:02
ADC与I2S没有任何关系的,各自独立。
才想到,你是采样率8KHz哦,只能采样小于4KHz的信号,超过4KHz就会 ...
梁工就是音频采样的问题。我将采样率提高到16K都正常。不能超过8K 。信号最大的频率超过采样率一半就出现问题了。多谢! zhang32568 发表于 2026-6-2 18:22
按照道理,采样需要不少于两倍 信号频率。但是很奇怪。高于4K,5--6--7K都非常稳定。按照道理 5K到7K都应该 ...
频谱折叠了,大于等于fs/2的信号,怎么表现都是异常的。
页:
[1]