李斐玥
(中國空空導(dǎo)彈研究院,河南 洛陽 471000)
隨著應(yīng)用技術(shù)的發(fā)展,各種儀器精密程度的提高,人們對(duì)信號(hào)質(zhì)量的要求更加嚴(yán)格。由于設(shè)備的缺陷和環(huán)境的干擾,不可避免地會(huì)產(chǎn)生各種各樣的毛刺。在處理數(shù)據(jù)時(shí),必須通過必要的方法消除或者減弱這些毛刺信號(hào)的影響。去除信號(hào)毛刺常用的有兩種方法,一種是接收信號(hào)前在硬件上串聯(lián)電阻或者并聯(lián)電容,另一種是接收信號(hào)后用軟件識(shí)別毛刺并去除。本文主要討論第二種方法。
真實(shí)信號(hào)中毛刺的寬度一般要遠(yuǎn)遠(yuǎn)小于信號(hào)自身的周期,因此,從理論上講,可以通過延時(shí)的方法去除較窄的毛刺信號(hào).在信號(hào)發(fā)生突變之后,計(jì)數(shù)器對(duì)后面的信號(hào)寬度進(jìn)行同步計(jì)數(shù).若信號(hào)突變之后保持的寬度小于規(guī)定的數(shù)值n(濾波寬度),認(rèn)為該信號(hào)為毛刺,否則認(rèn)為是真實(shí)的信號(hào)突變。
使用VHDL語言實(shí)現(xiàn)該功能。具體程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity QMC is
port(qmcClk, input : in std_logic;
y : out std_logic);
end QMC;
architecture behav of QMC is
signal tmp : std_logic_vector(7 downto 0);
signal x : std_logic;
begin
process(x,input, qmcClk)
begin
if(x=input) then
tmp<=(others=>x);
elsif(qmcClk'event and qmcClk=’1’)
then
tmp<=tmp(6 downto 0) & input;
x<= tmp(7);
end if;
end process;
y<= x;
end behav;
該程序中,y為輸出,input為輸入,tmp用于信號(hào)突變后的時(shí)鐘周期計(jì)數(shù).其中,input產(chǎn)生跳變并保持若干個(gè)時(shí)鐘周期才能使tmp的最高位改變,從而使輸出改變。該時(shí)序電路在qmcClk的上升沿發(fā)生狀態(tài)轉(zhuǎn)換.tmp位數(shù)為n,可以通過參數(shù)設(shè)置改變。輸入信號(hào)與輸出信號(hào)先進(jìn)行比較,一致時(shí)tmp的所有位保持不變,不一致時(shí)開始計(jì)數(shù),將變化后的輸入從最低位依次往高位存入tmp,輸出暫時(shí)不變。如果信號(hào)突變后的寬度小于濾波寬度,tmp在最高位發(fā)生變化之前輸入信號(hào)與輸出信號(hào)重新變得一致,則認(rèn)為該突變由毛刺造成,計(jì)數(shù)清零,輸出保持不變。如果信號(hào)突變之后的累計(jì)寬度大于濾波寬度,tmp在最高位發(fā)生變化后認(rèn)為該突變?yōu)檎鎸?shí)信號(hào),計(jì)數(shù)清零,輸出發(fā)生跳變。
使用ISE14.6進(jìn)行仿真驗(yàn)證,生成原理圖如圖1所示。
圖1 軟件ISE14.6生成的FPGA內(nèi)部原理圖
從圖1可以看出ISE14.6自動(dòng)生成的原理圖使用了與門、非門、寄存器、觸發(fā)器等,并使用反饋的方法保持輸出穩(wěn)定。
為了驗(yàn)證濾波效果,使用軟件自帶的仿真工具生成測(cè)試波形,編寫測(cè)試波形程序如下:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY test IS
END test;
ARCHITECTURE behavior OF test IS
COMPONENT QMC
PORT(
qmcClk:IN std_logic;
input:IN std_logic;
y:OUT std_logic
);
END COMPONENT;
signal qmcClk:std_logic:=’0’;
signal input:std_logic:=’0’;
signal y:std_logic;
constant qmcClk_period:time:=10 ns;
BEGIN
uut:QMC PORT MAP(
qmcClk=>qmcClk,
input=>input,
y=>y
);
qmcClk_process:process
begin
qmcClk<=’0’;
wait for qmcClk_period/2;
qmcClk<=’1’;
wait for qmcClk_period/2;
end process;
stim_proc:process
begin
wait for 100 ns;
wait for qmcClk_period*10;
input<=’1’;
wait for 20ns;
input <=’0’;
wait for 20ns;
input <=’1’;
wait for 180ns;
input<=’0’;
wait for 20ns;
input<=’1’;
wait for 20ns;
input<=’0’;
wait for 50ns;
input<=’1’;
wait for 20ns;
input<=’0’;
wait for 100ns;
input<=’1’;
wait for 70ns;
input<=’0’;
wait for 20ns;
input<=’1’;
wait for 70ns;
input<=’0’;
wait for 20ns;
input<=’1’;
wait for 20ns;
input<=’0’;
wait for 180ns;
input<=’1’;
wait for 20ns;
input<=’0’;
wait for 20ns;
input<=’1’;
wait for 180ns;
end process;
END;
其中qmcClk為周期10 ns,占空比50%的時(shí)鐘信號(hào),input為帶有毛刺的輸入信號(hào),分別在信號(hào)的上升沿、下降沿和中間部分插入了一些寬度為20 ns的毛刺。y為輸出信號(hào)。
由測(cè)試程序生成的波形仿真結(jié)果如圖2所示。
圖2 濾波效果圖
由波形可以看出,輸出波形比輸入波形產(chǎn)生了約125.5ns的延遲,在高電平和低電平都成功過濾了毛刺,還原了信號(hào)。設(shè)時(shí)鐘信號(hào)qmcClk周期為T,tmp位數(shù)為n,理想狀態(tài)下延時(shí)為(n-1)T,實(shí)際由于輸出信號(hào)在時(shí)鐘信號(hào)qmcClk的上升沿觸發(fā),輸入信號(hào)的上升沿和下降沿的時(shí)延不一致會(huì)產(chǎn)生額外的誤差,其時(shí)長小于T。因此總延遲時(shí)間t的取值范圍是(n-1)T 本方法由于tmp的累計(jì)過程需要時(shí)間,在真實(shí)信號(hào)突變時(shí)相位會(huì)發(fā)生改變,為了盡量減小誤差,可以提高qmcClk的頻率,此外,濾波精度受毛刺寬度和毛刺分布的影響。由于毛刺會(huì)使計(jì)數(shù)清零,毛刺頻繁發(fā)生時(shí),間隔若小于nT,正常信號(hào)會(huì)無法顯示。其中,0-1毛刺會(huì)降低占空比,1-0毛刺會(huì)提高占空比。如果毛刺恰好在信號(hào)跳變時(shí)發(fā)生,本方法將無法識(shí)別,也會(huì)降低信號(hào)的精度。為了保證精度,qmcClk應(yīng)保證來源穩(wěn)定,根據(jù)毛刺寬度和出現(xiàn)頻率調(diào)整qmcClk的頻率和tmp的位數(shù),其中毛刺出現(xiàn)頻率越高,選擇qmcClk的頻率應(yīng)越高,tmp的位數(shù)應(yīng)越少。延時(shí)較長時(shí)不適用于對(duì)信號(hào)同步性要求很高的場(chǎng)所。 本文提出了一種去除毛刺的方法,適用于毛刺寬度較窄的情況,通過仿真計(jì)算分析,可知該方法可以有效消除毛刺。在實(shí)際應(yīng)用中,該方法在方波濾波中取得了良好的效果。該方法通過延時(shí)實(shí)現(xiàn)對(duì)毛刺的過濾,而濾波寬度需要根據(jù)毛刺特性,信號(hào)特性等因素綜合確定。識(shí)別的正確率和信號(hào)精度依賴于濾波寬度的選擇,如果濾波寬度太小,則較寬的毛刺會(huì)被當(dāng)作真實(shí)信號(hào);如果太大,則真實(shí)信號(hào)容易被誤認(rèn)為毛刺信號(hào),使得信號(hào)失真。當(dāng)毛刺出現(xiàn)在信號(hào)突變附近時(shí),該方法濾波后會(huì)對(duì)真實(shí)信號(hào)的頻率產(chǎn)生影響[1]。4 結(jié)論
5 結(jié)語