DSP TMS320C5509A 控制DDS AD9854芯片进行AM幅度调制

接上一节https://blog.csdn.net/pxy198831/article/details/86738839DSP TMS320C5509A 控制DDS AD9854芯片驱动

各种调制中最简单的就是调幅了。调幅就是用调制信号的幅度控制载波的幅度,

对于AD9854,就是用AD采样到的音频信号的幅度控制AD9854幅度寄存器的值,

就完成了调幅的过程。平时该幅度寄存器为最大值输出。

程序如下:

	
interrupt void dmaCh0Isr(void)
{
	
	int I_Q_result;
    int ATW;
	static int noise_flag = 0,i=0;
	unsigned char AM_H,AM_L;
    if (dds_flag == 1)
	{
//		I_Q_result = dstPing[0];			//直接出音频

		I_Q_result =  AGC_audio(dstPing[0]);
		fir((DATA *)&I_Q_result, (DATA *)B_BS,(DATA *)&I_Q_result, BS_dbuf,1,BL_BS);
//		audio_DDS[Index] += 32768;
		
//		I_Q_result = 2*A*((float)I_Q_result)/(1+A);
		I_Q_result = ((float)I_Q_result)/8192*2048;


	//	dc = 2048;
	//	dc = ((1-A)*0x3fff)/(1+A);
	//	ac = (2*A*I_Q_result)/(1+A);
		ATW = (2*A*I_Q_result)/(1+A) + 2048;
		
	//	temp = ATW;
	//	ATW = (temp/65536)*4096;
		AM_H = (ATW&0x0f00)>>8; 
		AM_L = ATW&0xff;
		audio_DDS[Index] = (AM_H<<8)|AM_L;
		if(Index>=200)
		{
			Index = 0;
		}
		if (audio_DDS[Index++] > 1000)
		{
			if (noise_flag<200)
			{
				noise_flag++;
			}			
		}
		else
		{
			noise_flag = 0;
		}
		if (noise_flag != 200)
		{
			AD9854_WR_Byte(OSK_I1_ADDRESS,AM_H);	  //设置I通道幅度
			AD9854_WR_Byte(OSK_I2_ADDRESS,AM_L);
		}
		else
		{
			AD9854_WR_Byte(OSK_I1_ADDRESS,0xff);	  //设置I通道幅度
			AD9854_WR_Byte(OSK_I2_ADDRESS,0xff);
		}
		ad9854_update(); 
	}
}

将AD采样后的音频信号进行FIR和AGC处理,由于AD是14位有符号的,而AD9854幅度寄存器输出是12位无符号,

首先进行14位有符号到12位无符号的转换,2的14次方,有符号最多可表示-8192~+8192,

2的12次方无符号最多可表示4096,所以先将14位有符号数转化为12位有符号数,

即如下:

I_Q_result = ((float)I_Q_result)/8192*2048;

然后进行调制公式如下,调制完成后进行零点搬移,因为AD9854输出是无符号的,如下:

ATW = (2*A*I_Q_result)/(1+A) + 2048;

这时候得到的数据范围为0~2048, 不超过12位的范围,然后控制AD9854的OSK寄存器即可。

之后的文章会详解AGC、FIR滤波、音频的静噪处理。

DSP TMS320C5509A 控制DDS AD9854芯片进行AM幅度调制_第1张图片

 

你可能感兴趣的:(DSP,DSP,DSP,AD9854,调幅,AM,数字调制)