基于FPGA單級CIC濾波器實(shí)現(xiàn)8倍抽取
掃描二維碼
隨時(shí)隨地手機(jī)看文章
基于FPGA單級CIC濾波器實(shí)現(xiàn)8倍抽取
1 概述
在數(shù)字信號處理中,CIC濾波器是FIR濾波器中最優(yōu)的一種,其使用了積分,梳狀濾波器級聯(lián)的方式。
CIC濾波器由一對或多對積分-梳狀濾波器組成,在抽取CIC中,輸入信號依次經(jīng)過積分,降采樣,以及與積分環(huán)節(jié)數(shù)目相同的梳狀濾波器。在內(nèi)插CIC中,輸入信號依次經(jīng)過梳狀濾波器,升采樣,以及與梳狀數(shù)目相同的積分環(huán)節(jié)。
CIC濾波器的發(fā)明者是 Eugene B. Hogenauer,這是一類使用在不同頻率的數(shù)字信號處理中的濾波器,在內(nèi)插和抽取中使用廣泛。與大多數(shù)FIR濾波器不同的是,它有一個(gè)內(nèi)插或者抽取的結(jié)構(gòu)。
1,線性相位響應(yīng)
2,僅需延遲,加減法便可實(shí)現(xiàn),不需要乘法,在FPGA等平臺上易于實(shí)現(xiàn)。
2 單級CIC濾波器
CIC濾波器的沖擊響應(yīng)為:
3 設(shè)計(jì)目標(biāo)
利用單級CIC濾波器將采樣率為352.8KHZ的1khz sin波向下降采樣率到44.1khz的1khz sin波(8倍抽取)。
1,matlab設(shè)計(jì)驗(yàn)證
2,FPGA verilog設(shè)計(jì)驗(yàn)證。
4 matlab設(shè)計(jì)驗(yàn)證
%Single CIC
%352.8khz sample rate down to 44.1khz sample rate
close all
clc
clear all
%參數(shù)定義
FS =352800; %Sample rate Frequncy
fc = 1000; %1khz
N = 1024;
Q = 16;
M= 8;
D = 8;
t =0:2*pi/FS:2*pi*(N-1)/FS;%時(shí)間序列
%波形產(chǎn)生
sin_osc =sin(t*fc);
%濾波器系數(shù)
b=ones(1,M);
a = 1;
%8倍抽值處理
sf=filter(b,a,sin_osc);
sm =sf./M;
sd=sm(1:D:length(t));
%繪圖
figure(1),
subplot(221),stem(sin_osc);
title('采樣頻率352.8khz 1khz sin','fontsize',8);
subplot(222),stem(si0);
title('采樣頻率44.1khz 1khz sin','fontsize',8);
subplot(223);plot(f,mag);
xlabel('頻率(Hz)','fontsize',8);
ylabel('幅度(dB)','fontsize',8);
title('freqz()幅頻響應(yīng)','fontsize',8);
subplot(224);plot(f,ph);
xlabel('頻率(Hz)','fontsize',8);
ylabel('相位(度)','fontsize',8);
圖1 8倍抽取前后的1khz sin時(shí)域波形
圖2 濾波器系數(shù)的幅頻和相頻響應(yīng)
由圖1和圖2分析可知,單級CIC濾波器的降采樣率設(shè)計(jì)成功。
5 FPGA設(shè)計(jì)驗(yàn)證
FPGA的單級cic濾波器的設(shè)計(jì)其實(shí)就是一個(gè)滑動平均濾波器,由一個(gè)累加器和一個(gè)移位操作完成。
`timescale 1ps/1ps module cic( input mclk,//45.1584MHZ input reset_n, input signed[31:0] pcm_in,//352.8khz output signed[31:0] pcm_out //44.1khz ); localparam LAST_CYCLE = 128; reg [9:0] i;//44.1 reg signed [35:0] temp_pcm; reg signed [35:0] dout_pcm; assign pcm_out = dout_pcm[35:4]; always @(posedge mclk or negedge reset_n) begin if(reset_n == 1'b0) begin i <= 0; temp_pcm<=0; dout_pcm<=0; end else begin i<= i+1; if(i == (LAST_CYCLE-1) || i == (LAST_CYCLE*2-1) ||i == (LAST_CYCLE*3-1) || i == (LAST_CYCLE*4-1) || i == (LAST_CYCLE*5-1)||i == (LAST_CYCLE*6-1) ||i == (LAST_CYCLE*7-1) ) temp_pcm <= temp_pcm + pcm_in; if(i == (LAST_CYCLE*8-1)) begin dout_pcm<= temp_pcm + pcm_in; temp_pcm<=0; end end end endmodule
圖3 modelsim時(shí)域數(shù)據(jù)檢測
圖4 modelsim時(shí)域波形
圖5 matlab還原數(shù)據(jù)的時(shí)域和頻域
由圖3,圖4,和圖5分析,1khz基本未發(fā)生改變,44.1khz相對于352.8khz采樣率1khz點(diǎn)變得疏松。