分頻電路的分頻方式

發表于 2019-10-08 10:37:42 收藏 已收藏
贊(0) •  評論(0
贊      評論 分享
    ●●●

分頻電路的分頻方式

發表于 2019-10-08 10:37:42
+關注

分頻電路的分頻方式

构成简单的分頻電路人可以听到的声音的频率范 围是在20Hz—20kHz之间,祈望仅使用一只揚聲器就能够保证放送20Hz—20kHz这样宽频率的声音是很难做到的,因为这会在技术上存在各种各样 的问题和困难。所以,在通常情况下,高质量的放音系统为了保证再现声音的频率响应和频带宽度,在专业范畴内大都采用高低音分离式音箱放音。而采用高低音分 离式音箱放送声音时,就必然要对声音按频段分离,将声音按频率分段的个数就是声音分频数。

分頻電路的分頻方式

聲音的分頻主要是受揚聲器的控制,因爲絕大多數揚聲器都有自己最適合的頻率範圍,真正的高質量全頻揚聲器非常少見並且價格極端昂貴。同時爲了克服不同頻率聲音揚聲器引起的切割失真和減少同一音箱中的不同揚聲器之間産生的聲音幹涉現象,必須對聲音進行分頻,將不同頻段的聲音送入不同的揚聲器。

从分频方式看可以分为两种,一种是主动分频(PassiveCrossover),或者叫电子分频,也可以叫外置分频、有源分频;另一种是被动分频 (ActiveCrossover),或者叫功率分频,也可以叫内置分频、无源分频。主动分频是指分频器不在音箱内部,而在功率放大之前,由于此时声音信 号很弱,因此容易将声音彻底分频,缺点是相应的电子线路分频点较为固定,不容易和不同揚聲器配合,常见于高端和专业音响,随着多路功放的普及,主动分频方 式比以前普及很多。被动分频是指分频器在音箱内,此时声音信号已经经过放大,分頻電路会造成一定干扰,但音箱可以适用于不同功放。

最简单的分频就是二分頻,将声音分为高频和低频,分频点需要高于低音喇叭上限频率的1/2,低于高音喇叭下限频率的2倍,一般的分频点在2K到5K之间。但是这样分频对低音照顾仍然不够完善,因为低音为 了获得更好效果,往往需要单独处理,并且揚聲器的切割失真对低音的影响也最大,因此近些年三分频逐渐流行起来。三分频是将声音分为低音、中音和高音,有两 个分频点,低音分频点一般在200Hz以下,或者120Hz,甚至更低,高音分频点一般为2Hz-6KHz。此外也有少量的四分频或者多分频系统。显然更 多分频数理论上更有利于声音的还原,但过多的分频点会造成整体成本上升,并且实际效果提升有限,因此常见的分频数仍然是二分頻和三分频。

2N分頻電路的實現方法

1 目的

分频系数较大的2N 分頻電路需要采用标准计数器来实现,此处的方法是直接将计数器的相应位赋给分頻電路的输出信号即可实现分频功能。采用这个方法的好处是:一是不需要定义中间信号,设计简单,节约资源;二是可以避免毛刺现象的发生,从而避免了逻辑错误产生的可能性。

下面采用VHDL 和Verilog 两种语言实现的2分频、4分频和8分频。

2 VHDL实现(不带复位信号)

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

USE IEEE.std_logic_arith.ALL;

USE IEEE.std_logic_unsigned.ALL;

ENTITY clk_8div_2 IS

PORT(CLK:IN std_logic;

CLK_DIV2:OUT std_logic;

CLK_DIV4:OUT std_logic;

CLK_DIV8:OUT std_logic);

END clk_8div_2;

ARCHITECTURE rtl OF clk_8div_2 IS

SIGNAL counter:std_logic_vector(2 DOWNTO 0);

BEGIN

PROCESS(CLK)

BEGIN

IF(CLK’event AND CLK=’1’) THEN

IF (counter = “111”) THEN

count’0’);

ELSE

counter

END IF;

END PROCESS;

CLK_DIV2

CLK_DIV4

CLK_DIV8

END rtl;

3 Verilog实现(有复位信号)

3.1

module clk_8div_2(

input CLK,

output CLK_DIV2,

output CLK_DIV4,

output CLK_DIV8,

input RESET

);

reg [2:0] clk_counter;

always @ (posedge CLK or posedge RESET) begin

if (RESET)

begin clk_counter

end

begin clk_counter

assign CLK_DIV2 = clk_counter[0]; assign CLK_DIV4 = clk_counter[1]; assign CLK_DIV8 = clk_counter[2];

endmodule

3.2 测试文件

module test_clk;

// Inputs reg CLK; reg RESET; // Outputs wire CLK_DIV2; wire CLK_DIV4; wire CLK_DIV8; // Instantiate the Unit Under Test (UUT) clk_8div_2 uut ( .CLK(CLK),

); .CLK_DIV4(CLK_DIV4), .CLK_DIV8(CLK_DIV8), .RESET(RESET) initial begin // Initialize Inputs CLK = 0; RESET = 1; // Wait 100 ns for global reset to finish #100;

RESET = 0;

end

always #10 CLK

聲明:本文由入駐電子說專欄的作者撰寫或者網上轉載,觀點僅代表作者本人,不代表電子發燒友網立場。如有侵權或者其他問題,請聯系舉報。侵權投訴

收藏

相關話題

評論(0)

加载更多評論

分享到

QQ空間 QQ好友 微博
取消