摘要:通信系統中使用根升余弦濾波器作為成型濾波器,使系統滿足奈奎斯特準則。隨著濾波器工作頻率的不斷提高,使用DSP實現已經不太現實,而FPGA的成本不斷降低,采用FPGA設計工作在高頻率的濾波器更加適合。本文介紹了一種根升余弦濾波器的FPGA實現方法。
關鍵詞:數學濾波;平方根;余波
中圖分類號:TB535+.2文獻標識碼:A
1 基本流程及功能指標
平方根升余弦FIR濾波器的設計,首先要得出濾波器系數。使用Matlab中的rcosine函數得出濾波器系數,之后編寫VHDL程序,進行波形仿真,驗證結果是否符合要求。
平方根升余弦濾波器設計目標:
濾波器類型:平方根升余弦FIR濾波器;階數:32;信號傳輸速率:8.448Mbps;過采樣點數:4Point/bit;升余弦系數:0.6。
2 基本原理
在實際通信系統中,如果用升余弦濾波器做奈奎斯特濾波器,一般發送端的成型濾波器和接收端的匹配濾波器都采用平方根升余弦滾降濾波器。
數字濾波器的系統函數可以表示為:
直接得出表示輸入輸出關系的常系數線性差分方程為:
由此可以知道數字濾波器是把輸入序列經過一定的運算變換成輸出序列。一般普通的數字濾波器是線性時不變(LTI)濾波器,對于因果的 FIR 系統,系統函數僅有零點(除 z=0 的極點外),并且系數 a k全為零,所以上式簡化為:
可以認為是 x(n)與單位脈沖相應 h(n)的直接卷積。階數為 N 的 FIR 濾波器是數學表達式為:
其系統函數為:
其中h(n)為第 n 級系數,x(n-k)為延時 n 階的輸入信號。
3 實現結構
由于系數是對稱的,即 h(n)=h(N-n),可得
4 Matlab仿真
調用 matlab 中的 rcosine 計算濾波器的系數,程序如下:
clear;
clc;
close all;
%% 計算系數
lpf=rcosine(1,4,'sqrt',0.6,4);
figure(1)
stem(lpf)
xlabel('n');
title('平方根升余弦濾波器沖擊響應');
xlabel('n');
ylabel('h(n)');
%% 頻率響應
a=[1];
[h,f]=freqz(lpf,a,33,4);
mag=abs(h);
figure(2)
plot(f,mag);
grid on
xlabel('頻率(Hz)');
ylabel('幅頻特性');
%% 濾波器系數量化
maxh=max(lpf);
%9位量化
N_9=511/maxh;
b=round(N_9*lpf);
………(部分代碼略)
5 FPGA實現
根據實現原理,FPGA實現平方根升余弦濾波器的實質就是乘法累加器,代碼如下:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_arith.all;
use ieee.std_logic_signed.all;
library lpm;
use lpm.all;
entity filter_8xrec is
generic(
tap:integer:=31;
datain_len:integer:=10;
coeff_len:integer:=10;
dataout_len:integer:=25);
port(
clock:in std_logic;
sclr:in std_logic;
clk_ena:in std_logic;
data_ena:in std_logic;
datain:in std_logic_vector(datain_len-1 downto 0);
dataout:out std_logic_vector(dataout_len-1 downto 0));
end filter_8xrec;
architecture arch of filter_8xrec is
COMPONENT lpm_mult
…………..(部分代碼略)
6 FPGA仿真
設定輸入后,在 modelsim 中的仿真結果如下
從仿真結果圖中可以看出,由于沒有對累加輸出進行截斷,輸出位數為 25 位,并用輸入值進行計算,可得仿真結果正確在 quartus 中綜合報告的結果如下:
若將仿真結果中的輸入、輸出數據用圖形表示,則如下所示:
結論
本方法采用Matlab仿真設計,VHDL實現并使用Altera公司的FPGA進行驗證,設計達到預定要求。經與我單位傳統設計比較(DSP實現),系統效率有了大幅度提升,表明此種FIR濾波器的實現方法高效可行。
參考文獻
[1]山蕊,將林,杜慧敏,平方根升余炫濾波器的設計與EPGA實現.