基于matlab数字均衡器设计
数字均衡器(matlab)

摘要本文的数字均衡器以MA TLAB为设计平台,有.wav文件的获取、滤波、保存和播放功能。
在对声音文件进行基本波形分析和频率分析的基础上,增加了高通、低通、带通和带阻滤波的功能,并有8段均衡器可对声音信号进行调节后保存播放。
关键词:滤波器、数字均衡器、傅立叶反变换第一章概述1.1 均衡器简介均衡器是一种用来对频响曲线进行调节的音频设备,换名话说,均衡器能对不同频率的声音信号中过多的频率成分。
因此,它能补偿由于各种原因造成的信号欠缺的频率成分,也能抑制信号中过多的频率成分。
例如,均衡器可以抑制频率为60~250Hz的低频交流声,也可以抑制频率为6~12kHz的高频噪声;利用均衡器还可以进行音调调节和音色加工。
均衡器的原意是将传输系统中不平衡的频率特性用相反的特性曲线进行频率均衡,在此基础上增加了音色加工和美化的功能。
均衡器的作用主要如下。
①校正各种音频设备产生的频率失真,以获得平坦响应。
②改善室内声场,改善由于房间共振特性或吸声特性不均匀而造成的传输增益(频率)失真,确保其频率特性平直。
③抑制声反馈,提高系统传声增益,改善扩声音质。
④提高语言清晰度和自然度。
⑤在音响艺术创作中,用于刻画乐器和演员的音色个性,提高音响艺术的表现效果。
均衡器的种类很多,但基本上工作原理都是相同的。
它们都是将音频信号的全频带(20Hz~20kHz)或全频带的主要部分,按一定的规律分成几个甚至几十个频点(也称频段),再利用LC串联谐振的选频特性,分别进行提升或衰减,从而获得所希望的频率校正曲线。
运用数字滤波器组成的均衡器称为数字均衡器,数字均衡器即可作成图示EQ,有可做成参量EQ,还可以做成两者兼有的EQ,它不仅各项性能指标优异,操作方便,而且还可同时储存多种用途的频响均衡特性,供不同节目要求选用,可多至储存99种频响特性曲线。
SONY的SRP-E300是一款多功能2通道的数字均衡器具有10段参量均衡和29段图示均衡,可同时或独立工作,带有限制器和噪声门功能,高精度的48kHz取样,20比特线性模数/数模转换;带有模拟和数字输入/输出;RS-232C C接口,可用于外部遥控,它的出现会逐步淘汰普通的模拟均衡器,是一款专业音频扩声领域具有极高性价比的产品。
Matlab中的均匀设计与优化实验方法介绍

Matlab中的均匀设计与优化实验方法介绍引言在科学研究和工程实践中,实验设计和优化方法是不可或缺的工具。
Matlab作为一种强大的数值计算和可视化软件,是科学家和工程师常用的工具之一。
在Matlab中,有许多方法可以用于设计均匀实验和进行优化。
本文将介绍Matlab中的一些常见的均匀设计和优化实验方法。
一、均匀设计实验方法1.1 背景均匀设计实验是一种将样本分布在整个实验空间中的方法,以确保样本之间的差异性最小化。
在科学研究中,均匀设计实验常用于确定因素对响应变量的影响,并评估其主效应和交互作用。
在Matlab中,有几种方法可以实现均匀设计实验。
1.2 完全随机设计完全随机设计是最简单的均匀设计实验方法之一。
在Matlab中,可以使用rand函数生成随机数,然后将其映射到实验空间的范围。
例如,rand(100,2)将生成一个100行2列的随机矩阵,其中每个元素均匀地分布在0到1之间。
为了将这些随机数映射到实验空间的范围,可以使用线性变换。
1.3 拉丁超立方设计拉丁超立方设计是一种常用的均匀设计实验方法。
在Matlab中,可以使用lhsdesign函数生成拉丁超立方设计。
该函数的输入参数包括实验空间的维数和样本点的个数。
例如,X = lhsdesign(10,2)将生成一个10行2列的拉丁超立方设计矩阵,其中每个元素均匀地分布在0到1之间。
二、优化实验方法2.1 背景优化实验是一种通过系统地变化实验条件来最大化或最小化某个目标函数的方法。
在Matlab中,有几种方法可以用于优化实验。
2.2 泛化回归神经网络泛化回归神经网络是一种基于人工神经网络的优化实验方法。
在Matlab中,可以使用fitnet函数创建一个泛化回归神经网络模型,并使用该模型进行优化实验。
该函数的输入参数包括输入数据和目标数据。
例如,net = fitnet(10)将创建一个包含10个隐藏层节点的泛化回归神经网络模型。
2.3 粒子群优化算法粒子群优化算法是一种基于群体智能的优化实验方法。
MATLAB环境下ISI信道仿真及自适应均衡器设计程序说明

MATLAB 环境下ISI 信道仿真及自适应均衡器设计程序说明一、系统模型二、ISI 信道仿真及LSM 算法自适应均衡器原理1、发送端和接收端滤波器的级联和在采样瞬间时的信道可用等效的离散时间FIR 信道滤波器来表示,Xn={0.05 -0.063 0.088 -0.126 -0.25 0.9047 0.25 0 0.126 0.038 0.088},n={-5,-4,…,5}。
2、基于MSE (均方准则)的均衡器抽头系数的自适应算法为:^^1k k k k c c e y +=+∆其中^k c 代表抽头系数向量的估值,∆为迭代过程中的步长参数,k e 为误差信号,k y 代表在瞬时k 包含均衡器中2k+1接收信号值的行向量。
误差信号k e 表示为:k k k e a z =-;k z 为均衡器输出,k a 为已知信号序列。
最初用一已知伪随机序列{k a }在信道上将这个自适应均衡器进行训练。
在解调器端,均衡器用这个已知序列去调整它的系数,一旦初始调节完成,自适应均衡器就从一个训练模式切换到直接判决模式,这时:^k k k e a z =-,式中^k a 是检测器的输出。
为了确保收敛 和 在慢变化信道中好的跟踪能力,选择步长参数的一种经验公式是15(21)R k P ∆=+ 式中R P 代表接收到的信号加噪声的功率,它可以从接收信号中估计出。
三、仿真结果图四、结论分析从结果图中我们可以看出,在信噪比逐渐增大的过程中,未经均衡器均衡的差错率没有明显改善,可知系统中始终存在码间干扰造成的误码;经均衡器均衡后的差错率则有明显改善。
但我们同时也可以看到在信噪比较低情况下,均衡器均衡之后的误码率并没有明显改善,甚至没有未均衡的差错率低,这主要是因为噪声为随机信号,功率大时对源信号影响较大,而且均衡器不易跟踪;当我们把均衡器的步长调低后,跟踪能力增强,差错率降低。
附源程序代码:main_plot.mclear;clc;echo off;close all;N=10000; %指定信号序列长度info=random_binary(N); %产生二进制信号序列SNR_ in _dB=8:1:18; %AWGN信道信噪比for j=1:length(SNR _in_ dB)[y, len ]=channel(info, SNR _in _dB(j)); %通过既有码间干扰又有白噪声信道numoferr=0; %初始误码统计数for i=len+1:N+len, %从第len个码元开始为真实信元if (y(i)<0), %判决译码decis=-1;elsedecis=1;end;if (decis~=info(i-5)), %判断是否误码,统计误码码元个数numoferr=numoferr+1;end;end;Pe(j)=numoferr/N; % 未经均衡器均衡,得到的误码率end;semilogy(SNR_in_dB,Pe,'red*-'); %未经均衡器,误码率结果图hold on;delta_1=0.11; %指定自适应均衡器的步长delta_2=0.09; %指定自适应均衡器的步长for j=1:length(SNR_in_dB)y=channel(info,SNR_in_dB(j)); %通过信道z=lms_equalizer(y,info,delta_1); %通过自适应均衡器,并设置步长为0.11 numoferr=0;for i=1:N,if (z(i)<0),decis=-1;elsedecis=1;end;if (decis~=info(i)),numoferr=numoferr+1;end;end;Pe(j)=numoferr/N; % 经自适应均衡器均衡后,得到的误码率end;semilogy(SNR _in _ dB, Pe ,'blacko-'); %自适应均衡器均衡之后,误码率结果图 hold on;for j=1:length(SNR_in_dB)y=channel(info,SNR_in_dB(j)); %通过信道z=lms_equalizer(y,info,delta_2); %通过自适应均衡器,并设置步长为0.09 numoferr=0;for i=1:N,if (z(i)<0),decis=-1;elsedecis=1;end;if (decis~=info(i)),numoferr=numoferr+1;end;end;Pe(j)=numoferr/N; % 经自适应均衡器均衡后,得到的误码率end;semilogy(SNR_in_dB,Pe,'blue.-'); %自适应均衡器均衡之后,误码率结果图hold on;xlabel('SNR in dB');ylabel('Pe');title('ISI信道自适应均衡系统仿真');legend('未经均衡器均衡','经自适应均衡器均衡,步长detla=0.11',...'经自适应均衡器均衡,步长detla=0.09');random_binary.m%产生二进制信源随机序列function [info]=random_binary(N)if nargin == 0, %如果没有输入参数,则指定信息序列为10000个码元N=10000;end;for i=1:N,temp=rand;if (temp<0.5),info(i)=-1; % 1/2的概率输出为-1elseinfo(i)=1; % 1/2的概率输出为1endend;channel.m%模拟既有码间干扰又有高斯白噪声的信道function [y,len]=channel(x,snr_in_dB)SNR=exp(snr_in_dB*log(10)/10); %信噪比真值转换sigma=1/sqrt(2*SNR); %高斯白噪声的标准差%指定信道的ISI参数,可以看出此信道质量还是比较差的actual_isi=[0.05 -0.063 0.088 -0.126 -0.25 0.9047 0.25 0 0.126 0.038 0.088];len_ actual _isi=(length(actual_isi)-1)/2;len=len_actual_isi;y=conv(actual_isi,x); %信号通过信道,相当于信号序列与信道模型序列作卷积%需要指出,此时码元序列长度变为N+len-1,译码时我们从第len个码元开始到N+len个结束for i=1:2:size(y,2),[noise(i) noise(i+1)]=gngauss(sigma); %产生噪声end;y=y+noise; %叠加噪声gngauss . m%产生高斯白噪声function [gsrv1,gsrv2]=gngauss(m,sgma)if nargin == 0, %如果没有输入实参,则均方为0,标准差为1m=0; sgma=1;elseif nargin == 1, %如果输入实参为1个参数,则标准差为输入实参,均值为0 sgma=m; m=0;end;u=rand;z=sgma*(sqrt(2*log(1/(1-u))));u=rand;gsrv1=m+z*cos(2*pi*u);gsrv2=m+z*sin(2*pi*u);lm _equalizer .m%LSM算法自适应滤波器实现function [z]=lms_equalizer(y,info,delta)estimated_c=[0 0 0 0 0 1 0 0 0 0 0]; %初始抽头系数K=5;for k=1:size(y,2)-2*K,y_k=y(k:k+2*K); %获取码元,一次11个z_k=estimated_c*y_k'; %各抽头系数与码元相乘后求和e_k=info(k)-z_k; %误差估计estimated_c=estimated_c+delta*e_k*y_k; %计算校正抽头系数z(k)=z_k; %均衡后输出的码元序列end;。
用matlab仿真DFE均衡器

DFE均衡器1.基本原理均衡器用来消除码间干扰,DFE即判决均衡器的主要思路是:一旦一个信息符号被检测并被判定后,就可在检测后续符号之前预测并消除由这个信息符号带来的码间干扰。
其基本功能是消除当前估计中的符号间干扰,这个干扰是由前面检测的符号流引起的。
2.仿真程序(1)DFE主程序如下:clear allclose allclcglobal cir_matrix_tglobal Nglobal flagflag = 1;snr = [6:16];iter_num = 10;N = 1000;ber = [];for snr_index=1:length(snr)err = 0;lambda = power(10,-snr(snr_index)/20);for iter =1:iter_numequal_bit = [];bit_signal = randint(1,N);% bit_signal为1000列的随机矩阵,矩阵的元素为0和1modul_signal = mod_4PSK(bit_signal);rx_sym = Through_channel(modul_signal,N/2);rx_signal = awgn(rx_sym,snr(snr_index));% rx_signal = rx_symequal_signal = equalizer(rx_signal,lambda);for k=1:N/2if real(equal_signal(1,k))>0.5equal_bit = [equal_bit 0 0];elseif real(equal_signal(1,k)<-0.5)equal_bit = [equal_bit 1 1];elseif imag(equal_signal(1,k))>0.5equal_bit = [equal_bit 1 0];else equal_bit = [equal_bit 0 1 ];endenderrr = sum(abs(equal_bit-bit_signal));err = err+ errr;enderr/(N*iter_num);snr_index;ber = [ber err/(N*iter_num)];endbersemilogy(snr,ber,'*-')hold ongrid on(2)equalizer子程序如下:function equal_out = equalizer(in_signal,lambda)global cir_matrix_tglobal Nglobal flagNf = 16;Nb = 8;len = length(in_signal);b_signal = zeros(1,Nb);for k = 1:N/2cir = cir_matrix_t(:,k).';cir_len = length(cir);Hff = convmtx(cir,Nf);Hfb = Hff(:,end-cir_len+2:end);Hfb = [Hfb,zeros(16,Nb-cir_len+1)];Vff = eye(Nf+cir_len-1);Vff(Nf+1:end,Nf+1:end) = zeros(cir_len-1);Sff = Hff(:,Nf);Fffn = inv(Hff*Vff*Hff'+(lambda^2)*eye(Nf))*Sff;Ffb = -Hfb'*Fffn;f_signal = [zeros(1,max(0,k+Nf-1-len)) in_signal(min(len,k+Nf-1):-1:k) ].';out_sym = Fffn'*f_signal+Ffb'*b_signal.';equal_out(1,k) = hard_4QAM_demodul(out_sym);b_signal = [equal_out(1,k) b_signal(1:end-1)];end(3)hard_4QAM_demodul子程序如下:function symb_hard =hard_4QAM_demodul(in_signal)in_signal = in_signal*exp(j*pi/4);if real(in_signal)>0if imag(in_signal)>0symb_hard = 1;else symb_hard = -1*i;endelseif imag(in_signal)>0symb_hard = i;else symb_hard = -1;endend(4)Through_channel子程序如下:function rx_signal = Through_channel(tx_signal,signal_len)global cir_matrix_tglobal flagcir_matrix = [];if flag == 0C2=[-0.59175538208125-0.26921505269338i; 0 ; 0 ; 0 ; 0 ;0 ;-0.75903722101890-0.034804026909066i];elseC2=[0.2 1 0.3162 -0.2 0.1 -0.05 0.02].';C2= C2/norm(C2)';endc_end = [0.2 1 0.3162 -0.2 0.1 -0.05 0.02].';%[-0.3920 0.0152 0.8320 0.0152 -0.3920 0.0178 0.163].';c_end = c_end/norm(c_end);% cir_cir = C2 ;cir_len = length(c_end);cir_matrix = [cir_matrix C2];for k=1:signal_len+cir_len-1cir_matrix = [cir_matrix C2+(c_end-C2)/(2*(signal_len+cir_len-1))];endcir_matrix_t = cir_matrix;[ cir_len , conv_len] = size(cir_matrix) ;tx_temp=zeros(1,cir_len);for k=1:conv_lenif k<signal_len+1tx_temp = [tx_signal(1,k) tx_temp(1,1:end-1)];else tx_temp = [0 tx_temp(1,1:end-1)];endcir = cir_matrix(:,k);cir = cir/norm(cir)';rx_signal(1,k) = tx_temp * cir;end(5)mod_4PSK子程序如下:function y=mod_4PSK(x)% 4PSK Modulator% x -- binary input bits. The length of x must be multiples of 4.% y -- complex output. vectorcons =exp(j*([ 8 2 6 4]*pi/4));% cons =exp(j*([ 1 8 2 3 7 6 5 4]*pi/4));temp = reshape(x,2,length(x)/2);y = cons(bi2de(temp')+1);3.运行结果如下ber = 0.0486 0.0338 0.0203 0.0069 0.0057 0.0021 0.0005 0 0 0 0678910111210101010。
基于Matlab滤波器及均衡器设计

基于Matlab的数字滤波器设计及均衡器设计1数字滤波器设计背景及目的数字滤波器是一个离散时间系统,是一种按预定的算法,将输入离散时间信号转换为所要求的输出离散时间信号的特定功能装置。
数字滤波器具有高精度、高可靠性、可程控改变特性或复用、便于集成等优点。
数字滤波器在语言信号处理、图像信号处理、医学生物信号处理以及其他应用领域都得到了广泛应用。
数字滤波器有低通、高通、带通、带阻和全通等类型。
它可以是时不变的或时变的、因果的或非因果的、线性的或非线性的。
应用最广的是线性、时不变数字滤波器,以及FIR滤波器。
本次设计的目的是在Matlab R2007a的软件平台上,应用所学知识,设计一款FIR数字滤波器,要求有便于用户操作的用户界面,能完成低通、高通、带通及带阻等常用滤波功能。
2数字滤波器设计原理数字滤波器可以按所处理信号的维数分为一维、二维或多维数字滤波器。
一维数字滤波器处理的信号为单变量函数序列,例如时间函数的抽样值。
二维或多维数字滤波器处理的信号为两个或多个变量函数序列。
例如,二维图像离散信号是平面坐标上的抽样值。
本次设计的滤波器属于一维数字滤波器。
数字滤波器的优点是利用差分方程可求离散系统的瞬态解,如下图2所示。
FIR滤波器又称为有限脉冲响应滤波器,FIR就来源于名词“有限脉冲响应”的英文单词首字符缩写。
FIR传递函数:脉冲响应函数:由于h(k)是一个有限长度的序列,故FIR滤波器称为有限脉冲响应滤波器。
FIR滤波器的滤波公式:y(k)=h(0)x(k-m/2)+h(1)x(k-m/2+1) +...+h(m) x(k+m/2)FIR滤波器系数脉冲响应函数设计方法如下其中低通、高通、带通及带阻的设计原理如下图所示。
3设计内容7.3 搭建GUI界面Matlab环境下的图形用户界面(GUI)是由窗口、光标、按键、菜单、文字说明等对象(Objects)构成的一个用户界面。
用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。
基于MATLAB的数字滤波器-均衡器的设计

目录1.引言 (2)2.同类产品的比较 (2)3.设计原理 (3)3.1滤波器的设计 (3)3.2均衡器的设计 (4)4.具体设计步骤 (5)4.1界面设计 (5)4.2.程序设计 (7)4.2.1滤波函数 (7)4.2.2均衡器 (8)5.误差分析 (11)6.总结 (11)7.心得与建议 (11)8.参考文献: (12)1.引言均衡器(Equalizer、EQ,港台地区叫做等化器),是一种可以分别调节各种频率成分电信号放大量的电子设备,通过对各种不同频率的电信号的调节来补偿扬声器和声场的缺陷,补偿和修饰各种声源及其它特殊作用,一般调音台上的均衡器仅能对高频、中频、低频三段频率电信号分别进行调节。
均衡器分为三类:图示均衡器,参量均衡器和房间均衡器。
]1[运用数字滤波器组成的均衡器称为数字均衡器,数字均衡器即可作成图示EQ,有可做成参量EQ,还可以做成两者兼有的EQ,它不仅各项性能指标优异,操作方便,而且还可同时储存多种用途的频响均衡特性,供不同节目要求选用,可多至储存99种频响特性曲线。
]2[现在市面上的数字均衡器种类繁多,根据所要使用的场合不同,均衡器的参数设置和具体功能也不尽相同。
本项目的均衡器的设计主要基于MATLAB的图形用户界面和后台程序开发。
所设计出来的仪器功能非常简单,操作也比较容易。
2.同类产品的比较几乎每个人的电脑上都有千千静听这个软件,在其播放界面上就附有十段数字均衡器,可供用户调节。
界面如图所示:图2.1 千千静听均衡器界面3.项目综述按照老师的要求,本文需要完成八段数字均衡器的设计,以达到对声音信号的处理效果。
具体实施中,我利用的是MATLAB这个软件来实现的。
MATLAB 是一个数据分析和处理功能十分强大的工程实用软件,他的滤波器设计工具箱为实现声音信号的数字滤波提供了十分方便的函数和命令。
但它也有明显的缺点,就是运算速度比较慢。
当所要处理的声音信号比较复杂时,其滤波过程往往要耗一小段时间,有事甚至会达到一秒多。
基于matlab的数字音效处理器——数字信号处理课设报告

一:应用背景利用所学习的数字信号处理知识,自己动手制作一个有趣的音效处理系统,看看能不能完成声音的逐渐放大和逐渐衰减、看看能不能让自己的声音发生一些改变(变得尖声尖气或粗声粗气)、看看改变声音播放速度有什么方法等等,你还可以自己想想还有什么有趣的变化,可以通过我们已有的知识让它实现。
作为课程设计,以下要求分为基本必做部分和提高必做部分,在提高部分你可以选择全部内容和部分内容,当然分数值是不一样。
二、基于MATLAB数字音效处理器2.1:实现步骤基本要求描述(40分)1)语音信号的采集(2分)要求利用Windows下的录音机,录制一段自己的话音,时间在5s内,存为*.WA V的文件。
然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。
2)语音信号的频谱分析(10分)要求首先画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性,分析基频。
3)设计数字滤波器和画出其频率响应(10分)给出各滤波器的性能指标:(1)低通滤波器性能指标fb=1 000 Hz,fc=1 200 Hz,As=100 dB,Ap=1 dB。
(2)高通滤波器性能指标fc=4 800 Hz,fb=5 000 Hz As=100 dB,Ap=1 dB。
(3)带通滤波器性能指标fb1=1 200 Hz,fb2=3 000 Hz,fc1=1 000 Hz,fc2=3 200 Hz,As =100 dB,Ap=1 dB。
4)用滤波器对信号进行滤波(5分)要求学生用自己设计的各滤波器分别对采集的信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
5)比较滤波前后语音信号的波形及频谱(10分)要求在一个窗口同时画出滤波前后的波形及频谱,做出分析。
6)回放语音信号(1分)在Matlab中,函数sound可以对声音进行回放。
基于MATLAB的直方图均衡算法研究与实现毕业设计论文

摘要毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.设计原理2.1数字滤波器2.1.1 数字滤波器的原理简介数字滤波器的功能是把输入序列通过一定的运算,变换成输出序列。
数字滤波器一般可用两种方法实现:一种是根据描述数字滤波器的数学模型或信号流程图,用数字硬件构成专用的数字信号处理机,即硬件方式;另一种是编写滤波器运算程序,在计算机上运行,即软件方式。
考虑到软件的灵活性及易于实现,本文采用软件方式实现数字滤波器。
数字滤波器有无限冲激响应(IIR)和有限冲激响应(FIR)两种。
下面分别介绍:(1) IIR滤波器IIR滤波器的特点是:单位冲激响应h(n)是无限长的;系统函数H(z)在有限长Z平面(0<|Z|<∞)有极点存在;结构上存在输出到输入的反馈,也即结构上是递归型的;因果稳定的IIR滤波器其全部极点一定在单位圆内。
其系统函数为(1)计算机上实现时则需要用到差分方程的形式,如下(2)IIR滤波器有四种基本的网络结构(具体参看文献[3]),直接I型、直接II型、级联型与并联型。
其中直接I型需要2N个延迟单元,而直接II型只需要N个延迟单元。
因此,用软件实现时,直接II型少占用存储单元。
级联型则是将N阶IIR系统函数分解成二阶因式连乘积,并联型则是将系统函数化成部分分式之和,则可得到IIR数字滤波器的并联结构。
(2) FIR滤波器IIR滤波器的特点是:系统的单位冲激响应h(n)是个有限长序列;系统函数|H(z)|在|z|>0处收敛,极点全部在z=0处(即FIR一定为稳定系统);结构上主要是非递归结构,没有输出到输入反馈。
但有些结构中(例如频率抽样结构)也包含有反馈的递归部分。
其系统函数的一般形式为(3)对应的差分方程为(4)FIR系统的基本结构有直接型、级联型、快速卷积型、频率取样型等。
2.1.2 FIR与IIR滤波器的比较与选择IIR滤波器可以用比FIR滤波器少的阶数来满足相同的技术指标,这样,IIR滤波器所用的存储单元和所用的运算次数都比FIR滤波器少。
FIR滤波器可得到严格的相位,而IIR滤波器不能得到。
事实上,IIR滤波器的选频特性越好,它的相位的非线性就越严重。
因此在需要严格线性相位的情况下应该选择FIR滤波器。
IIR滤波器可利用模拟滤波器现成的设计公式、数据和表格,因而计算工作量较小,对计算工具要求不高。
FIR滤波器没有现在的设计公式,对计算工具要求较高,需要借助计算机来设计。
另外,IIR滤波器主要是设计规格化的、频率特性为分段常数的标准低通、高通、带通、带阻和全通滤波器,而FIR滤波器可设计出理想正交变换器、理想微分器、线性调频器等各种网络,适应性较广。
总之,IIR和FIR这两种滤波器各有特点,在实际应用中空间选择中哪种滤波器,就从多方面的因素来考虑。
例如用于语音通信的滤波器,对相位要求不是主要的,因此选用IIR滤波器较为合适,可以充分发挥其经济和高效的特点。
而图像信号处理和数据传输等以波形携带信息的系统,对相位的线性要求较高,因此采用FIR滤波器较好。
对于数字均衡器,一方面是用于处理语言信号,另一方面需要用到频率特性分段的带通滤波器,因此应该IIR滤波器。
下面介绍IIR滤波器的设计方法。
2.1.3 IIR数字滤波器的设计方法实际中的数字滤波器都是用有限精度算法实现的线性非移变离散系统,设计IIR数字滤波器的方法主要有两种:一种是利用模拟滤波器的理论来设计,另一种是计算机辅助设计,即使用最优化技术设计。
利用模拟滤波器的设计理论来设计IIR滤波器,就是首先根据实际要求设计一个模拟滤波器,然后再将这个模拟滤波器转换成数字滤波器。
由于模拟网络综合理论已经发展得很成熟,故许多常用的模拟滤波器不仅有了简单而严格的设计分式,而且设计参数已经表格化,所以设计起来很方便。
因此本文采用第一种方法。
设计步骤大致分以下三步:(1) 设计模拟滤波器。
根据实际需要确定滤波器的参数,利用的滤波器的设计公式设计出模拟滤波器并得到其传递函数H(s),常用的滤波器有巴特沃斯滤波器、椭圆滤波器和切比雪夫滤波器;(2) 将模拟滤波器转换成数字滤波器。
利用冲激响应不变法或双线性变法将H(s)转换成H(z),不同的设计方法对应于不同的s平面到z平面的映射公式;(3) 频率变换。
上述方法得到的是低通滤波器,为了得到高通、带通、带阻滤波器,还需要用利用变换公式作频率变换。
以上各步骤都有成熟的理论与公式,具体可参看文献[3]。
2.2均衡器的原理2.2.1 均衡器总体设计均衡器的基本功能是调节各频段的信号强弱,为了满足该功能,本文采用如下的方法:Step1:设计出对应八个频段的八个带通滤波器;Step2:对原始信号分八路用八个带通滤波器进行滤波;Step3:将八个滤波器的滤波结果加权求和,权值的设计与均衡器的调节要求一致。
这样最终得到的结果便是所需要的均衡结果。
其中第2步中各带通滤波器的输入信号均为原始信号,而不是“串联”地滤波。
设原始输入信号为x(n),第i路的输出信号为,第i路的权值为,均衡器的输出信号为y(n),则有(5)(6)式中,、为滤波器的参数,可由2.1.3节的方法得到,N为滤波器的阶数。
具体应用中,式(6)有两个问题,下节将介绍这两个问题并给出解决方法。
2.2.2 滤波计算的两个问题(1) 数组越界问题即当n<N时,如5阶滤波器处理第一个x时(n=1,N=5),则式(6)中的与会出现数组下标小于0。
对于声音信号,人的听觉不会感觉出很短时间的异常。
因此,可以简单地将数组越界的情况用0代替,即n<N时,规定。
这样只有前N个数字信号不准确,从而前N/Fs秒声音信号不准确,N一般不超过10,而Fs一般为44100,从而N/Fs很小,人的听觉根本不会感觉到。
(2) 溢出问题定点加法运算有可能发生溢出。
但是,在采用补码进行运算时,即使中间计算结果发生了溢出,但只要最终累加值的绝对值小于1,就能保证最后得到的总和是正确数值。
因此,为防止数字滤波器定点运算产生溢出, y(n)绝对值小于1就够了。
一种解决方式是针对输入x。
对于IIR滤波器,有(7)由不溢出的条件得(8)即,当(8)式不满足时,需要对输入信号x(n)乘以一个小于1的比例因子,使得(8)式恰好满足。
比例因子的计算式易由(8)式推出。
为简单起见,本文采用针对输出的解决方式,即如果y(n)绝对值超过1,则对其赋值为1或,符号选择取决于原值的符号。
2.3软件设计2.3.1 数据流图数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。
在数据流图中没有任何具体的物理元素,它只是描绘信息在软件中流动和被处理的情况。
设计数据流图时只需考虑系统必须完成的基本逻辑功能,而不用考虑具体实现,因而它是进行软件设计很好的出发点。
面向数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。
结合上一节的内容,可以得出软件的数据流图如图 2所示。
图2 均衡器的数据流图2.3.2 模块划分模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户需求。
根据人类解决一般问题的经验,如果一个问题由两个问题组合而成,那么它的复杂程度大于分别考虑每个问题时的复杂程度之和,也就是说把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。
这就是模块化的根据。
在模块划分时应遵循如下规则[4]:改进软件结构提高模块独立性;模块规模应该适中;深度、宽度、扇出和扇入都应适当;模块的作用域应该在控制域之内;力争降低模块接口的复杂程度;设计单入口单出口的模块;模块功能应该可以预测。
本着上述的启发式规则,对软件进行如图 3所示的模块划分。
图3数字均衡器的模块划分3.软件实现3.1界面设计MATLAB是Mathworks公司推出的数学软件,它将数值分析、矩阵计算、信号处理和图形显示结合在一起,为众多学科领域提供了一种简洁、高效的编程工具。
它提供的GUIDE工具为可视化编程工具,使得软件的界面设计像VB 一样方便。
故本文采用MATLAB作为主要编程语言实现数字均衡器。
为了实现预期的功能,设计如图 4所示的界面。
图4频谱分析仪的界面设计左边最上面的部分为标题区,用于显示软件标题等信息,不具人机交互功能。
再往下是信号输入/输出区,包含3种输入方式。
界面应该具有:只有当每个单选框被选中时才允许使用对应的输入框、按钮等。
支持WAV和AU两种格式的音频文件。
“原声播放”用于播放输入的原信频信号,区别于滤波后的信号,用于对比滤波前后的信号。
再往下是均衡器区。
八个滚动条对应八个带通滤波器的权值,在中间时为1,最下为0,最上为10。
“类型”单选框用于选择巴特沃斯、切比雪夫等各种类型IIR滤波器。
“重置”用于将各输入恢复默认。
“滤波”后才能“播放”,这是考虑到MATLAB对多线程机制支持得不好,不宜使用一边滤波一边播放的方法。
由于滤波时间较长,故添加了进度显示的功能。
条形图是许多音频软件使用的频谱输出方式。
右边的上面是滤波器,可以指定各种类型与参数。
“生成滤波器”可以产生一个符合条件的滤波器,并在下面的图中显示滤波器的频率特征曲线。
“滤波”用于对输入的音频信号用生成的滤波器滤波。
再往下则分别是时域波形与频谱分析的图形显示,均为实时显示。
在界面设计时为避免错误的操作,在某些按钮不能使用时必须将其设置为不可用,而它们能够使用时立即设置为可用。
例如,没有打开音频文件时“滤波”按钮不可用,打开后“滤波”按钮可用;点击“滤波”前,“播放”不可用,点击“滤波”并完成滤波后,“播放”则变为可用。
3.2均衡器模块的实现均衡器模块功能是生成带通滤波器并对原信号滤波。
为了便于程序的扩充与修改,将表 1中的频段数据独立出来,如下handles.fband=[20 100 200 500 1000 2000 4000 8000 16000];均衡器的功能主要在“滤波”按钮的回调函数中实现,下面具体介绍开始需要得到滤波器的参数:频带与阶数,如下order=str2double(get(handles.order,'String'));num=8;%8 filters totallyfband=handles.fband;接着就是产生滤波器并滤波了,每次滤波后产生的y i(n)如果都存到一个变量中,则需要8个这样的变量,对于输入信号量很大时将需要大量的内存空间,为此,本文采用累加的方式,这样只用一个变量去存储滤波结果。
nn=length(handles.y);handles.yy=zeros(size(handles.y));for i=1:numif get(handles.butterworth,'Value')==1[b a]=butter(order,2*fband(i:i+1)/handles.Fs);elseif get(handles.cheby1,'Value')==1[b a]=cheby1(order,0.5,2*fband(i:i+1)/handles.Fs);elseif get(handles.cheby2,'Value')==1[b a]=cheby2(order,20,2*fband(i:i+1)/handles.Fs);elseif get(handles.ellip,'Value')==1[b a]=ellip(order,0.5,20,2*fband(i:i+1)/handles.Fs);elseerrordlg('No filter type chosen or filter type error!');endeval(sprintf('k=get(handles.band%d,''Value'');',i));y=(9^k-1)/8*qfilter(b,a,handles.y);handles.yy=handles.yy+y;endguidata(hObject,handles);在程序中有一句y=(9^k-1)/8*qfilter(b,a,handles.y),作用是加权以便下一句的求和,其中k是从滚动条中得到的参数,从0到2,但需要的权值是从0到10,令w为需要的权,即,由于实际需要w为指数变化,故设(9)代入w=0, k=0; w=1, k=1; w=10, k=2解得a=1/8,b=9,,从而有上述代码。