最新幅频均衡F题Word文档下载推荐.docx

上传人:b****5 文档编号:17448822 上传时间:2022-12-01 格式:DOCX 页数:18 大小:340.51KB
下载 相关 举报
最新幅频均衡F题Word文档下载推荐.docx_第1页
第1页 / 共18页
最新幅频均衡F题Word文档下载推荐.docx_第2页
第2页 / 共18页
最新幅频均衡F题Word文档下载推荐.docx_第3页
第3页 / 共18页
最新幅频均衡F题Word文档下载推荐.docx_第4页
第4页 / 共18页
最新幅频均衡F题Word文档下载推荐.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

最新幅频均衡F题Word文档下载推荐.docx

《最新幅频均衡F题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《最新幅频均衡F题Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。

最新幅频均衡F题Word文档下载推荐.docx

2.14钳位电路设计

由于ARM系统对信号的处理只能是正的,不能处理负的数值,故需要对输入波形进行直流偏置,使得电压抬高都为正值,故采用钳位电路设计方案。

钳位电路的作用是将周期性变化的波形的顶部或底部保持在某一确定的直流电平上。

图上部为常见的二极管钳位电路。

二极管的钳位作用是指利用二极管正向导通压降相对稳定,且数值较小(有时可近似为零)的特点,来限制电路中某点的电位。

钳位电路设计如图5所示。

图2钳位电路

在上面电路中,Vcc为输入直流电压,已达到电路的完全偏移。

电路中电阻设的要很大,以便延迟充放电时间。

实际测量中,Vcc为0.5V,R=200K,前级噪声24.4mv(Vpp)。

三、数字均衡方法比较与选择

3.1系统方案论述

3.1.1数字信号处理器选择

高速FPGA可用VerilogHDL语言设计专用的数字信号处理电路,由硬件实现信号处理,速度得到了保证,也就可以得到很好的带宽平坦度,但FPGA价格昂贵,开发周期长,且本课题仅要求对20Hz-20kHz的音频信号进行处理,采用高速FPGA过于浪费资源。

DSP处理器具有合适于数据进行快速运算的硬件结构,工作频率高,算法成熟,是实现数字信号运算与处理的理想方案,完全可胜任系统要求,但DSP处理器同样存在成本高的问题。

方案三:

ARM微控制器通过锁相环倍频可使主频达到相当高的工作频率,其成本相对FPGA、DSP更低,只要数字信号处理算法设计合理,用于处理音频段范围内的信号问题不大。

综上所述,采用ARM系列的LM3S811微控制器作为数字信号处理器较为合适。

3.1.2 数字幅频均衡方法选择

利用FFT快速运算的办法对输入信号进行离散傅立叶变换,分析其频谱,然后根据所希望的频率特性进行滤波,再利用傅立叶反变换将频域信号恢复至时域信号,但FFT是块计算,对速度较高的FPGA和DSP处理器可行,若采用单片机或ARM微控制器作为数字信号处理器,则难以满足设计要求。

采用无限冲激响应滤波器IIR,IIR滤波器设计简单,实现的阶数较低,但它具有非线性相位,且由于其为反馈型结构,对滤波器的参数精度要求较高,否则可能引起震荡或发散。

采用有限冲激响应FIR滤波器,FIR滤波器采用非递归结构,可以得到严格的线性相位,运算误差较小,且传递函数不存在极点,稳定性好,但与IIR相比,相同条件下需要的阶数更高,导致延时时间较长。

由于本次设计采用ARM控制器,运算速度相对DSP和FPGA较低,所以滤波器阶数不能太高,故采用了IIR数字滤波器。

四、低频功放的硬件设计

按功放中功放管的导电方式不同功率放大器分有甲类(又称A类)、乙类(又称B类)、甲乙类(又称AB类)、和丁类(又称D类)。

甲类功放。

甲类功放是指在信号的整个周期内(正弦波的正负两个半周),放大器的任何功率输出元件都不会出现电流截至(即停止输出)的一类放大器。

甲类放大器工作时会产生高热,效率很低,但固有的有点是不存在就交越失真。

单端放大器都是甲类工作方式,推免放大器可以是甲类,也可以是乙类或甲乙类。

因此甲类在输入信号的一个周期内都导通,晶体管导通角度为θ=360°

,特点是线性好、失真小且失真成分以偶次谐波为主。

效率小于50%,所以不符合题目中≥60%的要求。

乙类功放。

乙类功放是指正弦信号的正负两个半周分别由推免输出级的两“臂”轮流放大输出的乙类放大器,每一“臂”的到点时间为信号的半个周期,乙类放大器的优点是效率高,缺点是会产生交越失真。

乙类功放晶体管只在输入信号正半周工作在放大区(导通)晶体管导通角度为θ=180°

,乙类功放的效率平均约为75%,产生的热量较甲类机低,容许使用较小的散热器。

甲乙类功放。

甲乙类功放界于甲类和乙类之间,推免放大的每一个“臂”导通时间大于信号的半个周期而小于一个周期,甲乙类放大有效解决了乙类放大器的交越失真问题,效率又比甲类放大器高,因此获得了极为广泛的应用。

甲乙类功放在信号的大半周期间导通,导通角度180°

<

θ<

360°

方案四:

丁类功放。

D类功率放大器工作于开关状态,理论效率可达100%,实际的运用也可达80%以上。

功率器件的耗散功率小,产生热量少,可以大大减小散热器的尺寸,连续输出功率很容易达到数百瓦。

功率MOS有自保护电路,可以大大简化保护电路,而且不会引入非线性失真。

但是相对设计电路比较复杂。

根据题目的要求,功率放大器接8电阻负载(一端接地)时,要求输出功率≥10W,输出电压波形无明显失真,功率放大电路的-3dB通频带为20Hz~20kHz,功率放大电路的效率≥60%。

综上四个方案的比较,我们决定采用甲乙类功放,效率高于60%,且所需的电路并不难。

功放的电路流程图如下:

图3功放硬件电路设计流程图

音频放大器输出失真度小于某一数值(r<

1%)的最大功率称为额定功率,表达式

Po=Uo2/RLPi=Ui2*I

Uo为负载两端的最大不失真电压,RL为额定负载阻抗。

五、软件设计

5.1软件设计

本次设计,利用LM3S811的片内的十位AD,很方便地实现AD转换,经过IIR滤波器后,DA输出。

由于没有片内DA,所以DA需要外扩,采用了12位高速DA转换芯片MAX7541,只要不断地往其12个数据口发送数据,就能实现DA转换。

5.1.1基于matlab的IIR滤波器设计

设IIR数字滤波器的输入为x(k),输出为y(k),则该滤波器的可用常系数差分方程表示为

其中ai、bi为常系数,N、M为整数,i=0,1,2,…,k=0,1,2,…,其传递函数为

IIR滤波器的设计过程主要是寻找滤波器的各个系数,使其逼近所要求的特性指标。

其设计方法有两种:

一是直接法,也称最优化设计法,先确定一种最优化准则(均方误差最小准则或最大误差最小化准则),再求此最佳准则下的滤波器系数;

二是间接法,先根据已有模拟滤波器的设计理论设计一个合适的滤波器,然后变换成满足技术指标的数字滤波器。

间接设计法也称经典设计法,如果设计的IIR数字滤波器频率特性有特殊要求,经典设计往往显得无能为力,而最优设计法在这些频率特性有要求的场合很有用场。

MATLAB提供了yulewalk和maxflat两个最优设计函数Error!

Referencesourcenotfound.。

5.1.2IIR具体设计

本系统处理信号的频率特性比较特殊,故利用yulewalk最优设计函数设计IIR滤波器,首先测出带阻网络的幅频特性,fs为采样频率,f为0到fs/2的频率点,M为各频率点对应的放大倍数,然后对M取倒数,得到m。

本次设计滤波器的阶数为5,则调用函数

[b,a]=yulewalk(4,f,m)

得到滤波器的参数如下

b=[1.2083,-0.9642,-0.3355,0.3357,0.0567]

a=[1.0000,-1.2246,0.0116,0.5014,-0.1455]

由系数b和a可得常系数差分方程

其中b=[1.2083,-0.9642,-0.3355,0.3357,0.0567],a=[1.0000,-1.2246,0.0116,0.5014,-0.1455]

k=0,1,2,3,4。

根据上述差分方程进行软件编程并固化程序,即可使微控制器LM3S811实现IIR滤波的功能。

图中红线为理想滤波器的幅频特性,而蓝线为得到的滤波器的幅频特性。

六、附录

(一)硬件电路附录

6.1带通滤波电路图与测试结果:

图2-1dB(20HZ-20KHZ)带通滤波电路

在电路中,虚线左端是20Hz高通滤波器,虚线右端是20KHz低通滤波器。

此电路是带通可调的滤波器,可以调节电位器的值来调节带通范围,具有更实用性。

频率(KHz)

0.02

0.03

0.04

0.08

0.2

0.6

1.0

5.0

10.0

14.0

18.0

19.0

20.0

输出Vpp(v)

4.48

4.80

4.96

5.12

5.04

5.00

4.64

4.45

-1dB时,即衰减到0.89时,如输出通频带为5V,则截止时为4.45。

根据表格可知,符合带通滤波设计要求。

6.2前级输出电阻测量

空载输出电压

加入600欧电阻负载电压

2.74V

1.37V

可知符合600欧输出电阻的要求。

6.3本次制作的带阻网络电路图

带阻网络测试

测试输入信号VPP=5V

频率/HZ

20

40

100

300

500

600

800

900

1K

输出

1.21

1.05

0.66

0.45

0.41

0.39

0.38

0.4

4K

6K

8K

10K

12K

14K

16k

18k

20k

0.52

0.62

0.72

0.82

0.92

0.96

1.02

1.04

1.06

图3带阻网络电路图

根据题目所给的带阻网络结构,我们采用Multism进行了辅助分析与设计,其幅频性的分析结果如下图4所示。

图4仿真图

由图可知,在10KHZ时,输出信号大约在-10dB,信号的最大衰减为-25dB,故满足题目要求。

但特别注意,仿真都是理想状态,要想实际达到要求,必须提高电路中电容、电感、电阻的精度。

6.4功率放大电路图及测试

图7功放前置20Hz到20KHz的带通滤波

图8前级放大和功率放大电路

功放测试:

测试条件:

带8欧姆负载,由信号发生器输入5VVPP信号

频率

50

200

1000

2000

5000

10k

15k

输入电压/V

10.6

波形失真

无明显失真

功率输出/W

10.2

10.3

12.1

11.0

11.1

11.7

11.8

10.8

效率

6.5外扩D/A电路

图4MAX7541引脚图

则DA外扩电路如下:

图5MAX7541外接电路图

(二)程序设计附录

程序流程图如下

主函数流程图中断服务程序流程图

源程序代码

/*PD0~PD7接B0~B7,PA0~PA3接B8~B11*/

#include<

hw_types.h>

hw_memmap.h>

hw_ints.h>

interrupt.h>

sysctl.h>

gpio.h>

timer.h>

adc.h>

//将较长的标识符定义成较短的形式

#defineSysCtlPeriEnableSysCtlPeripheralEnable

#defineSysCtlPeriDisableSysCtlPeripheralDisable

#defineGPIOPinTypeInGPIOPinTypeGPIOInput

#defineGPIOPinTypeOutGPIOPinTypeGPIOOutput

#defineGPIOPinTypeODGPIOPinTypeGPIOOutputOD

#defineADCSequEnableADCSequenceEnable

#defineADCSequDisableADCSequenceDisable

#defineADCSequConfigADCSequenceConfigure

#defineADCSequStepConfigADCSequenceStepConfigure

#defineADCSequDataGetADCSequenceDataGet

#defineKEY_PERIPHSYSCTL_PERIPH_GPIOB

#defineKEY_PORTGPIO_PORTB_BASE

#defineKEY_PINGPIO_PIN_5

#defineDATA_PERIPH_8SYSCTL_PERIPH_GPIOD

#defineDATA_PORT_8GPIO_PORTD_BASE

#defineDA_PINS_8

GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7

#defineDATA_PERIPH_4SYSCTL_PERIPH_GPIOA

#defineDATA_PORT_4GPIO_PORTA_BASE

#defineDATA_PINS_4GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3

#defineN7//IIR滤波器阶数

intb[N+1]={6656,-9185,1559,5564,-4080,168,582,-92};

//IIR滤波器系数

inta[N+1]={10000,-14301,886,9744,-5991,-639,1146,-25};

unsignedlongx[N+1]={0};

//采样序列

unsignedlongy[N+1]={0};

//输出序列

unsignedlongTheSysClock;

//系统时钟

unsignedlongADC_DATA;

intADC_EndFlag=0;

//AD采样阶数标志

/************防止jtag锁死函数**********************/

voidjtagWait(void){

SysCtlPeriEnable(KEY_PERIPH);

//使能KEY所在的GPIO端口

GPIOPinTypeIn(KEY_PORT,KEY_PIN);

//设置KEY所在管脚为输入

if(GPIOPinRead(KEY_PORT,KEY_PIN)==0x00)//若复位时按下KEY,则进入

{

for(;

;

);

//死循环,以等待JTAG连接

}

SysCtlPeriDisable(KEY_PERIPH);

//禁止KEY所在的GPIO端口

/*******************系统时钟初始化函数************************/

voidclockInit(void)

/*SysCtlLDOSet(SYSCTL_LDO_2_50V);

//设置LDO输出电压

SysCtlClockSet(SYSCTL_USE_OSC|//系统时钟设置

SYSCTL_OSC_MAIN|//采用主振荡器

SYSCTL_XTAL_6MHZ|//外接6MHz晶振

SYSCTL_SYSDIV_1);

//不分频*/

SysCtlLDOSet(SYSCTL_LDO_2_75V);

//配置PLL前须将LDO设为2.75V

SysCtlClockSet(SYSCTL_USE_PLL|//系统时钟设置,采用PLL

SYSCTL_OSC_MAIN|//主振荡器

SYSCTL_XTAL_4MHZ|//外接4MHz晶振

SYSCTL_SYSDIV_4);

//4分频

TheSysClock=SysCtlClockGet();

//获取当前的系统时钟频率

/*****************Timer初始化*************************/

voidtimerInit(void)

SysCtlPeriEnable(SYSCTL_PERIPH_TIMER2);

//使能Timer模块

TimerConfigure(TIMER2_BASE,TIMER_CFG_32_BIT_PER);

//配置Timer为32位周期定时

TimerControlTrigger(TIMER2_BASE,TIMER_A,true);

//使能内部触发脉冲的产生

TimerControlStall(TIMER2_BASE,TIMER_A,true);

//调试时暂停计数(必要!

TimerLoadSet(TIMER2_BASE,TIMER_A,600);

//设置Timer初值,SysCtlClockGet()是定时1s,SysCtlClockGet()/2是定时0.5s

TimerEnable(TIMER2_BASE,TIMER_A);

//使能Timer计数

/****************ADC初始化*********************/

voidadcInit(void)

SysCtlPeriEnable(SYSCTL_PERIPH_ADC);

//使能ADC模块

SysCtlADCSpeedSet(SYSCTL_ADCSPEED_250KSPS);

//设置ADC采样率

ADCSequDisable(ADC_BASE,1);

//禁止采样序列

ADCSequConfig(ADC_BASE,1,ADC_TRIGGER_TIMER,0);

//采样序列配置:

ADC基址,采样序列0,定时器触发,采样优先级0

ADCSequStepConfig(ADC_BASE,1,0,ADC_CTL_CH1|ADC_CTL_END|ADC_CTL_IE);

//采样步进设置:

ADC基址,采样序列0,步值0,采样ADC0后停止并申请中断

ADCIntEnable(ADC_BASE,1);

//使能ADC中断

IntEnable(INT_ADC1);

//使能ADC采样序列中断

IntMasterEnable();

//使能处理器中断

ADCSequEnable(ADC_BASE,1);

//使能采样序列

/************ADC采样******************/

unsignedlongadcSample(void)

unsignedlongulValue;

while(!

ADC_EndFlag);

//等待采样结束

ADC_EndFlag=0;

//清除ADC采样结束标志

ADCSequDataGet(ADC_BASE,1,&

ulValue);

//读取ADC转换结果

return(ulValue);

/*********DAC输出函数***********************/

voidDAC(unsignedlongdata)

GPIOPinWrite(DATA_PORT_4,DATA_PINS_4,((data&

0xF00)>

>

8));

//送高四位数据

GPIOPinWrite(DATA_PORT_8,DATA_PINS_8,(data&

0x0FF));

//送低八位数据

/*****将上次存入数组元素整体左移一次,丢弃第一个元素*****/

voidMoveNext(void)

{inti=0;

for(i=0;

i<

N;

i++)

{

x[i]=x[i+1];

y[i]=y[i+1];

}

/******************IIR滤波*********************/

voidIIR()

inti;

unsignedlongsum=0;

i<

i++)

sum+=b[i]*x[N-i]-y[i]*a[N-i];

y[N]=sum+b[N]*x[0];

main()

jtagWait();

//系统初始化

clockInit();

timerInit();

adcInit();

SysCtlPeriEnable(DATA_PERIPH_8);

//初始化DA输出口

GPIOPinTypeO

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1