古詩詞大全網 - 成語用法 - CIC濾波器設計

CIC濾波器設計

CIC濾波器實現簡單,資源消耗少(只需要加法器),成為變采樣率系統中比較常用的濾波器,但也需要在合適的場景中使用,不然對信號質量會造成較大影響。

我們可以通過matlab的filter designer了解CIC濾波器的各種特性。通過圖1和圖2找到CIC濾波器設計窗口。

從幅頻曲線中容易得出CIC濾器器通帶平臺性差,過渡帶寬,帶外抑制性能起伏較大。

帶外抑制性能可以通過增加CIC級數(Number Of Sections)來提升,但這會對通帶平坦性帶來負面影響,具體設計CIC時需要折中該參數。

通常在C語言實現CIC時,可以將該參數設計為偶數,這樣會使拖尾是壹個整數,方便去掉數據首尾的無效值。更進壹步,設計為2,4,8時,歸壹化可以直接通過移位實現。

當我們使用CIC時,需要保證 有用信號的fmax應足夠小於fs/2/Mcic ,其中Mcic為內插倍數。這樣才能保證在有效帶寬內足夠的平坦度,壹般fmax相對於直流衰減不能超過0.5dB.

所以在變速率系統中,CIC壹般作為最後數字濾波器的前端(靠近模擬域),如上采樣系統中信號先經過限帶成型濾波器(低通FIR),HB濾器組,最後經過CIC到DAC速率。

下圖為8倍上采樣的圖示。

需要註意的是為了保證CIC前後信號時域采樣點平均功率的壹致性,在第壹級CIC濾波器中沒有做歸壹化,這部分增益正好可以補償上采樣插0帶來采樣點功率的損失。後續每壹級都要做歸壹化,防止溢出。

clear;clc;close all;

%% load data symbols from RRC out,make sure fmax << fs/2/Mcic

load('zeroDataFilterOut.mat')? % 8x oversampling signal

symbPower = funCountPower(zeroDataFilterOut); % Power before filter

%% CIC filter for interpolate 8 times

Mcic = 8;

coefCic = ones(Mcic,1);

N = 4; ? % number of CIC section

modDataZero8x = upsample(zeroDataFilterOut,Mcic);

txPower = funCountPower(modDataZero8x); % Power after zero insertion

%% filter

dataFilterTemp = conv(modDataZero8x,coefCic);? % First CIC section

for i = 1:N-1

dataFilterTemp = conv(dataFilterTemp,coefCic)/Mcic;

end

tailLen = N*(Mcic-1)/2;

dataOut = dataFilterTemp(tailLen+1:end-tailLen);

outPower = funCountPower(dataOut);? % Power after filter