一种音频信号分析仪

著录项
  • CN201710095150.9
  • 20170222
  • CN108459532A
  • 20180828
  • 长沙乐昌林电子科技有限公司
  • 不公告发明人
  • G05B19/042
  • G05B19/042 G01H17/00

  • 湖南省长沙市天心区芙蓉南路一段758号和庄公寓A区1号栋2502房
  • 湖南(43)
摘要
本发明涉及一种音频信号分析仪,本发明以32位MCU为主控制器,通过AD转换,对音频信号进行采样,把连续信号离散化,然后通过FFT快速傅氏变换运算,在时域和频域对音频信号各个频率分量以及功率等指标进行分析和处理,然后通过高分辨率的LCD对信号的频谱进行显示。本发明能够精确测量的音频信号频率范围为20Hz?10KHz,其幅度范围为5mVpp?5Vpp,分辨力分为20Hz和100Hz两档;测量功率精确度高达1%,并且能够准确的测量周期信号的周期,是理想的音频信号分析仪的解决方案。
权利要求

1.本发明专利涉及一种音频信号分析仪,本发明以32位MCU为主控制器,通过AD转换, 对音频信号进行采样,把连续信号离散化,然后通过FFT快速傅氏变换运算,在时域和频域 对音频信号各个频率分量以及功率等指标进行分析和处理,然后通过高分辨率的LCD对信 号的频谱进行显示。

2.根据权利要求1所述的一种音频信号分析仪,其特征在于,本发明能够精确测量的音 频信号频率范围为20Hz-10KHz,其幅度范围为5mVpp-5Vpp,分辨力分为20Hz和100Hz两档。

3.根据权利要求1所述的一种音频信号分析仪,其特征在于,本发明的测量功率精确度 高达1%,并且能够准确的测量周期信号的周期,是理想的音频信号分析仪的解决方案。

说明书

一种音频信号分析仪

技术领域

本发明专利涉及电子设计技术领域,尤其涉及一种音频信号分析仪。

背景技术

音频信号分析的发展是伴随着一般信号仪器的发展而不断改进的,信号分析仪的 发展大致经历了三个阶段年代,以波的干涉,谐振以及滤波原理制成的模拟式分析仪,其功 能少,分析速度慢,目前少有使用但其分析时能量集中,分析精度高且分析方法有特,因 此很多数字化仪器保留了模拟式仪器的部分功能年代,由于计算机技术的发展,信号处理 由模拟式向数字式转换,发展的以算法为计数原理制成的数字式信号分析仪,这类仪器功 能多,分析速度快,是使用中的主流,但是其缺点是功能恒定,不能满足用户的特殊要求,分 析功能也无法更新换代近年来,出现了一批基于机的虚拟的信号分析仪,在此基础上,又出 现了一批高速专用信号处理器,芯片的出现为通用计算机为主体的智能信号分析仪的产生 奠定了基础。

目前,音频分析仪在国内外都有成型的产品,并且可用于测量音频设备的各类音 频分析仪器,并且这些分析仪能够完成音频信号的很多指标测试,例如失真度分析仪、频谱 分析仪、频率计数器、音频示波器等等,这些机遇各种功能电路的传统分立硬件仪器使用方 便,且测量精度较高,已获得广泛使用,但是与此同时,其体积较大且价格往往很昂贵,在一 些特殊方面难以普及,并且传统音频信号分析仪存在功能单一,显示结果不直观,调试校准 困难等缺点,因此开发一种性价比高的音频信号分析仪就是很有必要的。

附图说明

图1:总体设计框架图。

图2:前级阻抗匹配和放大电路图。

图3:前级阻抗匹配和放大内部电路图。。

图4:AD转换及控制模块电路图。

图5:软件流程图。

图6:周期性分析和测量流程图。

发明专利内容

本发明专利涉及一种音频信号分析仪,本发明以32位MCU为主控制器,通过AD转换,对 音频信号进行采样,把连续信号离散化,然后通过FFT快速傅氏变换运算,在时域和频域对 音频信号各个频率分量以及功率等指标进行分析和处理,然后通过高分辨率的LCD对信号 的频谱进行显示。

本发明能够精确测量的音频信号频率范围为20Hz-10KHz,其幅度范围为5mVpp- 5Vpp,分辨力分为20Hz和100Hz两档;测量功率精确度高达1%,并且能够准确的测量周期信 号的周期,是理想的音频信号分析仪的解决方案。

具体实施方式

为了使本发明专利的目的、技术方案及优点更加清楚明白,以下结合附图及实施 例,对本发明专利进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释 本发明专利,并不用于限定本发明专利。

本发明专利涉及一种音频信号分析仪,本发明以32位MCU为主控制器,通过AD转 换,对音频信号进行采样,把连续信号离散化,然后通过FFT快速傅氏变换运算,在时域和频 域对音频信号各个频率分量以及功率等指标进行分析和处理,然后通过高分辨率的LCD对 信号的频谱进行显示。

进一步的,本发明能够精确测量的音频信号频率范围为20Hz-10KHz,其幅度范围 为5mVpp-5Vpp,分辨力分为20Hz和100Hz两档;测量功率精确度高达1%,并且能够准确的测 量周期信号的周期,是理想的音频信号分析仪的解决方案。

进一步的,本发明直接由32位MCU的定时中断进行信号的采集,然后对信号分析。 由于32位MCU -LPC2148是60M的单指令周期处理器,所以其定时精确度为16.7ns,已经远远 可以实现40.96KHz的采样率,而且控制方便成本便宜,所以本发明选择由MCU直接采样。

进一步的,由于快速傅立叶变换FFT算法设计大量的浮点运算,由于一个浮点占用 四个字节,所以要占用大量的内存,同时浮点运算时间很慢,所以本发明采用普通的8位MCU 一般难以在一定的时间内完成运算,综合内存的大小以及运算速度,本发明采用Philips的 32位的单片机LPC2148,它拥有32K的RAM,并且时钟频率高达60M,所以对于浮点运算不论是 在速度上还是在内存上都能够很快的处理。

进一步的,本发明选择信号在时域进行周期性分析和周期性测量。对于一般的音 频信号,其时域变化是不规则的,所以没有周期性。而对于单频信号或者由多个具有最小公 倍数的频率组合的多频信号具有周期性。这样本发明可以在频域对信号的频谱进行定量分 析,从而得出其周期性。而本发明通过先假设信号是周期的,然后算出频率值,然后在用此 频率对信号进行采样,采取连续两个周期的信号,对其值进行逐次比较和平均比较,若相差 太远,则认为不是周期信号,若相差不远(约5%),则可以认为是周期信号。

进一步的,音频信号经过一个由运放和电阻组成的50Ohm阻抗匹配网络后,经由量 程控制模块进行处理,若是一般的100mV-5V的电压,本发明选择直通,也就是说信号没有衰 减或者放大,但是若信号太小,12位的A/D转换器在2.5V参考电压的条件下的最小分辨力为 1mV左右,所以如果选择直通的话其离散化处理的误差将会很大,所以若是采集到信号后发 现其值太小,在20mV-250mV之间的话,本发明可以将其认定为小信号,从而选择信号经过20 倍增益的放大器后再进行A/D采样。经过12位A/D转换器ADS7819转换后的数字信号经由32 位MCU进行FFT变换和处理,分析其频谱特性和各个频率点的功率值,然后将这些值送由 Atmega16进行显示。信号由32 位MCU分析后判断其周期性,然后由Atmegal6进行测量,然后 进行显示。总体设计框架如图1所示。

进一步的,前级阻抗匹配和放大电路信号输入后通过R5,R6两个100Ohm的电阻和 一个高精度仪表运放AD620实现跟随作用,由于理想运放的输入阻抗为无穷大,所以输入阻 抗即为:R5//R6=50Ohm,阻抗匹配后的通过继电器控制是对信号直接送给AD转换还是放大 20倍后再进行AD转换。前级阻抗匹配和放大电路如图2所示。

进一步的,本发明选择的运放是TI公司的低噪声、低失真的仪表放大器INA217,其 失真度在频率为1KHz,增益为20dB(100倍放大)时仅为0.004%,其内部原理图如图3所示。其 中放大器A1的输出电压计算公式为OUT1=1+(R1/RG)*VIN+,同理,OUT2=1+(R2/RG)*VIN--, R3、R4、R5、R6及A3构成减法器,得到输出公式:VOUT=(VIN2-VIN1)*[1+(R1+R2)/RG],R1=R2= 5K,取RG=526,从而放大倍数为20。

进一步的,本发明采用12位AD转换器ADS7819进行转换,将转换的数据送32位控制 器进行处理。AD转换及控制模块电路如图4所示。

进一步的,功率谱测量主要通过对音频信号进行离散化处理,通过FFT运算,求出 信号各个离散频率点的功率值,然后得到离散化的功率谱。由于本发明要求频率分辨力为 100Hz和20Hz两个档,这说明在进行FFT运算前必须通过调整采样频率(fK)和采样的点数 (N),使其基波频率f为100Hz和20Hz。根据频率分辨率与采样频率和采样点数的关系:f=fk/ N;可以得知,fk=N*f;又根据采样定理,采样频率fk必须不小于信号频率fm的2倍,即:fk>= 2fm;本发明要求的最大频率为10KHz,所以采样频率必须大于20KHz,考虑到FFT运算在2的 次数的点数时的效率较高,所以本发明在20Hz档时选择40.96KHz采样率,采集2048个点,而 在100档时我们选择51.2KHz采样率,采集512个点。通过FFT 分析出不同的频率点对应的功 率后,就可以画出其功率谱,并可以在频域计算其总功率。

进一步的,本发明的主控制芯片为LPC2148,测量周期为Atmega16实现,由于处理 器速度较快,所以本发明采用c语言编程方便简单。软件流程图如图5所示,周期性分析和测 量流程图如图6所示。

进一步的,本发明的程序代码如下:

FFT转换函数,dataR:实部,datai:虚部,

void FFT(float *dataR,float *dataI,int n)

{

int i,L,j,k,b,p,xx,qq;

int x[11]={0};

float TR,TI,temp;

float QQ;

{ xx=0;

for(j=0;j<n;j++)

x[j]=0;

for(j=0;j<n;j++)

{x[j]=(i/count[j])&0x01;}

for(j=0;j<n;j++)

{xx=xx+x[j]*count[n-j-1];}

dataI[xx]=dataR[i];

}

for(i=0;i<count[n];i++)

{ dataR[i]=dataI[i];

dataI[i]=0;

}

for(L=1;L<=n;L++)

{

b=1; i=L-1;

while(i>0)

{ b=b*2;

i--;

}

for(j=0;j<=b-1;j++)

{ p=1; i=n-L;

while(i>0)

{ p=p*2; i--;}

p=p*j;

for(k=j;k<count[n];k=k+2*b)

{

TR=dataR[k];

TI=dataI[k];

temp=dataR[k+b];

QQ=2*pi*p/count[n];

qq=p*count[11-n];

dataR[k]=dataR[k]+dataR[k+b]*cos_tab[qq]+dataI[k+b]*sin_tab[qq];

dataI[k]=dataI[k]-dataR[k+b]*sin_tab[qq]+dataI[k+b]*cos_tab[qq];

dataR[k+b]=TR-dataR[k+b]*cos_tab[qq]-dataI[k+b]*sin_tab[qq]; //查表运算

dataI[k+b]=TI+temp*sin_tab[qq]-dataI[k+b]*cos_tab[qq];

}

}

}

for(i=0;i<count[n];i++)

{

w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);

w[i]=w[i]/count[n-1];

}

w[0]=w[0]/2;

}

{

unsigned int key,page,i;

page=0;

LCD_PenColor=0x1F;//红

LCD_WriteChineseString(font5,2,40,0);

LCD_PenColor=0xFC;//蓝

while(1){

key=getkey();

if(key!=0xFF)

{

if(key==4) {SystemState=fft_mode;return;} //返回

if(key==2) {

LCD_ClearScreen();

CD_WriteChineseString(font3,2,10,0);LCD_WriteChineseString(font4,2,60,0);

i=page*4+1;

p3510(Re[i],0,15); print3510(Im[i]*mode,50,15);

p3510(Re[i+1],0,26); print3510(Im[i+1]*mode,50,25);

p3510(Re[i+2],0,38); print3510(Im[i+2]*mode,50,35);

p3510(Re[i+3],0,50); print3510(Im[i+3]*mode,50,50);

if(page>0) page--;

delay_nms(8000000);

} //上翻页

if(key==1) {

LCD_ClearScreen();

_WriteChineseString(font4,2,60,0);

i=page*4+1;

p3510(Re[i],0,15); print3510(Im[i]*mode,50,15);

p3510(Re[i+1],0,26); print3510(Im[i+1]*mode,50,25);

p3510(Re[i+2],0,38); print3510(Im[i+2]*mode,50,35);

p3510(Re[i+3],0,50); print3510(Im[i+3]*mode,50,50);

page++;if(page>=SampleNum/4) page=0;

delay_nms(8000000);

} //下翻页

}

}

}

void distortion(void)

{

LCD_ClearScreen();

LCD_WriteChineseString(font6,3,10,20);

unsigned int key;

int fr;

while(1)

{

log_2_N=11;SampleNum=SampleTab[log_2_N];

reset_timer(0);

init_timer0(40960);

New_Flag=0;

enable_timer(0);

while(!FFT_Flag);

disable_timer(0); //关定时器0

FFT(Re,Im,log_2_N);

for(i=1;i<SampleNum/2;i++) {Re[i]=Re[i]*Re[i];Re[i]=Re[i]/2;}

Fp=0;

for(i=1;i<SampleNum/2;i++) Fp+=Re[i];

sort(&Re[1],&Im[1],SampleNum/2-1);

fr=1000000/fre;

if(Tflag) {LCD_WriteChineseString(font7,1,50,20);LCD_WriteEnglishString ("",0,38);print3510(fr,10,38);LCD_WriteEnglishString("US",58,38);}

else

{LCD_WriteEnglishString("",0,38);LCD_WriteChineseString(font8,1,50,20);}

key=getkey();

if(key!=0xFF)

{

if(key==1) {SystemState=fft_mode;mode=20;break;} //返回

if(key==2) {SystemState=fft_mode;mode=100;break;} //返回

}

}

}

unsigned char getkey(void)

{

if(IO1PIN_bit.P1_21==0) {

delay_nms(200000);

if(IO1PIN_bit.P1_21==0) return 1;

}

if(IO1PIN_bit.P1_22==0) {

delay_nms(2000000);

if(IO1PIN_bit.P1_22==0) return 2;

}

if(IO1PIN_bit.P1_23==0) {

delay_nms(2000000);

if(IO1PIN_bit.P1_23==0) return 3;

}

if(IO1PIN_bit.P1_24==0) {

delay_nms(2000000);

if(IO1PIN_bit.P1_24==0) return 4;

}

return 0xFF;

}

void sort(float *a,float *b,int n)//a为待排序的量,b为起位置

{

int i,j,temp;

for(i=0;i<n;i++) b[i]=i+1;

for(j=0;j<=n-1;j++)

{

for (i=0;i<n-j;i++)

if (a[i]<a[i+1])

{

temp=a[i];

a[i]=a[i+1];

a[i+1]=temp;

temp=b[i];

b[i]=b[i+1];

b[i+1]=temp;

}

}

}

void p3510(int v,int x,int y)

{

int x0;

x0=v*157;

x0=x0/100000000;

LCD_WriteEnglishChar(x0+'0',x,y);

x0=v*157;

x0=x0/100;

x0+=1000000;

print3510(x0,x+6,y);

LCD_WriteEnglishChar('.',x+6,y);

}

以上所述仅为本发明专利的较佳实施例而已,并不用以限制本发明专利,凡在本发明 专利的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明专利的保 护范围之内。

本文发布于:2024-09-23 13:27:59,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/71893.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议