分频电路
分频器的作用:在一个扬声器系统里,人们把箱体、分频电路、扬声器单元称为扬声器系统的三大件,而分频电路对扬声器系统能否高质量地还原电声信号起着极其重要的作用。尤其在中、高频部分,分频电路所起到的作用就更为明显。其作用如下:
1、合理地分割各单元的工作频段;
2、合理地进行各单元功率分配;
3、使各单元之间具有恰当的相位关系以减少各单元在工作中出现的声干涉失真;
4、利用分频电路的特性以弥补单元在某频段里的声缺陷;
5、将各频段圆滑平顺地对接起来。
显然,分频电路的这些作用已被人们所认识和接受。
1)分频点指分频器高通、带通和低通滤波器之间的分界点,常用频率来表示,单位为赫兹。分频点应根据各频段扬声器单元或音箱的频率特性和功率分配来具体确定
2)分频点的选择:
1、考虑中低单元指向性实用边界频率f=345/d(d=单元振膜有效直径)。通常8”单元的边界频率为2k,6.5”单元的边界频率为2.7k,5”单元为3.4k,4”单元为4.3k。也
就是说使用上述单元,其分频点不能大于各单元所对应的实用边界频率。
2、从高音单元谐振频率考虑,分频点应大于三倍的谐振频率。也就是说从高音单元的角度出发,通常分频点应大于2.5k。
3、考虑中低音单元高端响应Fh,通常分频点不应大于1/2Fh。实际上,二分频音箱上述条件很难得到同时满足。这时设计者应在这三者中有一个比较好的折中选择。但必须强调的是,第一个条件即实用边界频率应该优先满足。
4、三分频的情况下,通常应将两个分频点隔得愈远(应在三个倍频程以上),组合后的系统响应会变得愈好。否则,将会出现复杂的干扰辐射现象。
5、低音与中音的分频点应考虑人声声像定位的问题。应使人声的重放尽可能由中音单元来承担,以避免人声的声像定位音色发生过大的变化。这一点往往容易被设计者所忽视。通常这一分频点应为200-300Hz
我们知道,人可以听到的声音的频率范围是在20Hz—20kHz之间,祈望仅使用一只扬声器就能够保证放送20Hz—20kHz这样宽频率的声音是很难做到的,因为这会在技术上存在各种各样的问题和困难。所以,在通常情况下,高质量的放音系统为了保证再现声音的频率响应和频带宽度,在专业范畴内大都采用高低音分离式音箱放音。而采用高低音分离式音箱放送声音时,就必然要对声音按频段分离,将声音按频率分段的个数就是声音分频数。
声音的分频主要是受扬声器的控制,因为绝大多数扬声器都有自己最适合的频率范围,真正的高质量全频扬声器非常少见并且价格极端昂贵。同时为了克服不同频率声音扬声器
引起的切割失真和减少同一音箱中的不同扬声器之间产生的声音干涉现象,必须对声音进行分频,将不同频段的声音送入不同的扬声器。
从分频方式看可以分为两种,一种是主动分频(ActiveCrossover),或者叫电子分频,也可以叫外置分频、有源分频;另一种是被动分频(PassiveCrossover),或者叫功率分频,也可以叫内置分频、无源分频。主动分频是指分频器不在音箱内部,而在功率放大之前,由于此时声音信号很弱,因此容易将声音彻底分频,缺点是相应的电子线路分频点较为固定,不容易和不同扬声器配合,常见于高端和专业音响,随着多路功放的普及,主动分频方式比以前普及很多。被动分频是指分频器在音箱内,此时声音信号已经经过放大,分频电路会造成一定干扰,但音箱可以适用于不同功放。
最简单的分频就是二分频,将声音分为高频和低频,分频点需要高于低音喇叭上限频率的1/2,低于高音喇叭下限频率的2倍,一般的分频点在2K到5K之间。但是这样分频对低音照顾仍然不够完善,因为低音为了获得更好效果,往往需要单独处理,并且扬声器的切割失真对低音的影响也最大,因此近些年三分频逐渐流行起来。三分频是将声音分为低音、中音和高音,有两个分频点,低音分频点一般在200Hz以下,或者120Hz,甚至更低,高音分频点一般为2Hz-6KHz。此外也有少量的四分频或者多分频系统。显然更多分频数理论上更有利于声音的还原,但过多的分频点会造成整体成本上升,并且实际效果提升有限,因此常见的分频数仍然是二分频和三分频.
众所周知,分频器是FPGA设计中使用频率非常高的基本设计之一,尽管在目前大部分设计中,广泛使用芯片厂家集成的锁相环资源,如altera 的PLL,Xilinx的DLL.来进行时钟的分频,倍频以及相移。但是对于时钟要求不高的基本设计,通过语言进行时钟的分
频相移仍然非常流行,首先这种方法可以节省芯片内部的锁相环资源,再者,消耗不多的逻辑单元就可以达到对时钟操作的目的。另一方面,通过语言设计进行时钟分频,可以看出设计者对设计语言的理解程度。因此很多招聘单位在招聘时往往要求应聘者写一个分频器(比如奇数分频)以考核应聘人员的设计水平和理解程度。下面讲讲对各种分频系数进行分频的方法:
第一,偶数倍分频:偶数倍分频应该是大家都比较熟悉的分频,通过计数器计数是完全可以实现的。如进行N倍偶数分频,那么可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。以此循环下去。这种方法可以实现任意的偶数分频。
第二,奇数倍分频:奇数倍分频常常在论坛上有人问起,实际上,奇数倍分频有两种实现方法:
首先,完全可以通过计数器来实现,如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转,比如可以在计数器计数到1时,输出时钟进行翻转,计数到2时再次进行翻转。即是在计数值在邻近的1和2进行了两次翻转。这样实现的三分频占空比为1/3或者2/3。
如果要实现占空比为50%的三分频时钟,可以通过待分频时钟下降沿触发计数,和上升沿同样的方法计数进行三分频,然后下降沿产生的三分频时钟和上升沿产生的时钟进行相或运算,即可得到占空比为50%的三分频时钟。这种方法可以实现任意的奇数分频。归类为一般的方法为:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数选定到某一个值进行输出时钟翻转,然后经过(N-1)/2再次进行翻转得到一个占空比非50%奇数n分频时钟。再者同时进行下降沿触发的模N计数,到和上升沿
触发输出时钟翻转选定值相同值时,进行输出时钟时钟翻转,同样经过(N-1)/2时,输出时钟再次翻转生成占空比非50%的奇数n分频时钟。两个占空比非50%的n分频时钟相或运算,得到占空比为50%的奇数n分频时钟。
另外一种方法:对进行奇数倍n分频时钟,首先进行n/2分频(带小数,即等于(n-1)/2+0.5),然后再进行二分频得到。得到占空比为50%的奇数倍分频。下面讲讲进行小数分频的设计方法
第三,小数分频:首先讲讲如何进行n+0.5分频,这种分频需要对输入时钟进行操作。基本的设计思想:对于进行n+0.5分频,首先进行模n的计数,在计数到n-1时,输出时钟赋为‘1’,回到计数0时,又赋为0,因此,可以知道,当计数值为n-1时,输出时钟才为1,因此,只要保持计数值n-1为半个输入时钟周期,即实现了n+0.5分频时钟,因此保持n-1为半个时钟周期即是一个难点。从中可以发现,因为计数器是通过时钟上升沿计数,因此可以在计数为n-1时对计数触发时钟进行翻转,那么时钟的下降沿变成了上升沿。即在计数值为n-1期间的时钟下降沿变成了上升沿,则计数值n-1只保持了半个时钟周期,由于时钟翻转下降沿变成上升沿,因此计数值变为0。因此,每产生一个n+0.5分频时钟的周期,触发时钟都是要翻转一次.
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY three IS
PORT (clk : IN STD_LOGIC;
rst : IN STD_LOGIC;
clk_out : OUT STD_LOGIC);
END ENTITY;
ARCHITECTURE behav OF three IS
--SIGNAL temp : STD_LOGIC;
SIGNAL temp1,temp2 : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
p1:PROCESS(clk,rst)
BEGIN
IF(clk'event AND clk='1')THEN
IF(rst='1')THEN
clk_out<='0';
ELSE
CASE temp1 IS
WHEN \"00\" => temp1<=\"01\";
WHEN \"01\" => temp1<=\"10\";
WHEN \"10\" => temp1<=\"00\";
WHEN OTHERS => temp1<=\"00\";
END CASE;
END IF;
END IF;
IF(clk'event AND clk='0')THEN
IF(rst='1')THEN
clk_out<='0';
ELSE
CASE temp2 IS
WHEN \"00\" => temp2<=\"01\";
WHEN \"01\" => temp2<=\"10\";
WHEN \"10\" => temp2<=\"00\";
WHEN OTHERS => temp2<=\"00\";
END CASE;
END IF;
END IF;
clk_out <= NOT (temp1(1) OR temp2(1));
END PROCESS;
END ARCHITECTURE;
以下是Testbench内容:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY tb_three IS
END ENTITY tb_three;
ARCHITECTURE behav OF tb_three IS
COMPONENT three IS
PORT(clk :IN STD_LOGIC;
rst :IN STD_LOGIC;
clk_out :OUT STD_LOGIC);
END COMPONENT;
SIGNAL clk :STD_LOGIC:='1';
SIGNAL rst :STD_LOGIC:='1';
SIGNAL clk_out :STD_LOGIC;
BEGIN
UUT: three PORT MAP(clk,rst,clk_out);
p1:PROCESS
BEGIN
WAIT FOR 5 NS;
clk<= NOT clk;
WAIT FOR 6 ns;
rst<='0';
END PROCESS;
END behav;
任意整数分频
module my_clkdiv(clkin,clkout,reset);
input clkin;
output clkout;
input reset;
reg clkout;
parameter divx =4; //设置分频参数
integer counter;
always@(posedge clkin)
begin
if(reset ==1)
begin
clkout = 0;
counter = 0;
end
else if(counter == divx)
begin
clkout <= ~clkout;
counter <= 0;
end
else
counter <= counter + 1;
end
always@(negedge clkin)
begin
if(reset == 1)
begin
clkout <= 0;
counter <=0;
end
else if(counter == divx)
begin
clkout <= clkout;
counter <=0;
end
else
counter <= counter + 1;
end
endmodule
分频就是用同一个时钟信号通过一定的电路结构转变成不同频率的时钟信号。
二分频就是通过有分频作用的电路结构,在时钟每触发2个周期时,电路输出1个周期信号。
比如用一个脉冲时钟触发一个计数器,计数器每计2个数就清零一次并输出1个脉冲。那么这个电路就实现了二分频功能。
因篇幅问题不能全部显示,请点此查看更多更全内容