前言
多相濾波器解決的是:多速率問題。
通過降采樣、插值來改變信號的輸出速率(主要利用Nyquist采樣定理,保證不混疊),從而降低數據率,多相濾波器為這類操作提供了實現框架。在滿足采樣定理的前提下,內插/抽取並配合濾波器使用(防止混疊),可以改變數據的速率。
多相濾波的結構也多用在信道化中(即構建濾波器組),固化系數借助硬件實現快速運算。
一、信道化實現思路
信道化的基本思路為:
clc;clear all;close all N = 256; h = firls(N, [0 .2 .25 1], [1 1 0 0],[.001 .0001]); D = 8; % PolyPhase Componets i = 1:length(h); h_channel = zeros(D,length(h)); im = sqrt(-1); for j = 1:D h_channel(j,:) = h.*exp((-im*2*pi*((j-1)*(i-1)))/D); end figure(1) for i = 1:D+1 switch i case 1 subplot (2,1,1); plot(abs(fft(h))); title('Orignal LPF ') otherwise subplot (2,1,2) plot(abs(fft(h_channel(i-1,:)))); hold on; title('channelize') end end
對應頻譜圖:
即將頻帶切分成若個個區域。基於該特性,有信道化的基本思路:
如果是實信號,D信道化之后進行D倍抽取仍然不會有頻譜混疊,而經過本振以及低通濾波器之后的信號為復信號,故可以進行2D倍抽取。
可以看出,信道化接收機的抽取器位於濾波器之后,當抽取率D很大或者濾波器階數較高,計算效率將難以提升,這時候借助多相濾波器便可以優化。
假設LPF:
並取Q=N/D,N為濾波器階數,D為抽取率。則濾波器可重寫為:
定義:
濾波器可重寫為:
其中為多相分量,這也是多相濾波器說法的緣由。
第k個信道可寫為:
記
有
令
則
進一步取
從而有
根據這一系列推導,即可得出實信號多相濾波器信道化的實現思路:
兩處相位相乘分別為:,p = 0,1,...,D-1
二、多相濾波器設計步驟
- 根據指標,確定濾波器類型以及階數N
- 求解h(n)
- 根據信道個數,並用下式確定多相濾波器:
三、復雜度簡要分析
以濾波器階數N=256,抽取率(信道個數)D=16,每個信道輸出1個數據,則:
- 基於低通濾波器組的信道化需要乘法:M1 = D x (1+N) = 4112次;
- 基於多相濾波器的信道化需要乘法:M2 = N+2*D+D*log2D = 352次;
多相濾波器的實現思路節約了資源,且便於硬件實現。
四、應用實例
考慮帶寬1GHz的情況,如果信道個數為16,則每一個的寬度為1e9/16=62.5e6,考慮到濾波器為實數的共軛對稱性,故LPF構造依據:
對其進行仿真驗證:
輸入信號為70MHz的1)余弦信號;2)復指數信號,對於1)理論上應落在2、16兩個信道,2)只落在2信道。
clc;clear all;close all load coef_lpf.mat; fs = 1e9; t = 0:1/fs:1e-6; f0 = 70e6; sig = sin(2*pi*t*f0); len = length(sig); h = coef_lpf; N = length(h); D = 16; y = zeros(D,len); % PolyPhase Componets i = 1:length(h); h_channel = zeros(D,length(h)); im = sqrt(-1); x_fre = linspace(0,fs,N); for j = 1:D h_channel(j,:) = h.*exp((-im*2*pi*((j-1)*(i-1)))/D); y(j,:) = filter(h_channel(j,:),1,sig); end figure() for i = 1:D+1 switch i case 1 subplot (2,1,1); plot(x_fre,abs(fft(h))); title('Orignal LPF ') otherwise subplot (2,1,2) plot(x_fre,abs(fft(h_channel(i-1,:)))); hold on; title('channelize') end end x_fre1 = linspace(0,fs,len); figure() plot(x_fre1,abs(fft(sig))); for iter = 1:D if mod(iter,4) ==1 figure() j = 1; end subplot(4,1,j) j = j+1; plot(x_fre1,abs(fft(y(iter,:)))); title(['信道',num2str(iter)]); end
仿真結果:
信道化結果:
情形一:
與理論分析相符。
情形二:
sig = exp(-1j*2*pi*t*f0);
信號只在信道2出現:
多相濾波的實現思路也非常多,這里僅列舉一種:
clc;clear all;close all; load coef_lpf.mat; h = coef_lpf; %%產生信號 fc = 70e6; c = 3.0e8; fs = 1e9; theta = 30/180*pi; lambda = c/fc; d = lambda/4; len = 2048; t = 0:1/fs:1/fs*(len-1); st = exp(-1j*2*pi*t*fc); Phase = 2*pi*d*sin(theta)/lambda; st = st/trace(st*st'); Interformer01 = st; %%信道化 D = 16; si = 1:length(h); h_channel = zeros(D,length(h)); im = sqrt(-1); for j = 1:D h_channel(j,:) = downsample(h.*exp((im*2*pi*((si-1)*(j-1)))/D),1); end figure() for i = 1:D plot(abs(fft(h_channel(i,:)))); hold on; end Interformer_channel = zeros(D,len/D); for i = 1:D Interformer_channel(i,:) = downsample(filter(h_channel(i,:),1,Interformer01),D); end figure() for i = 1:D subplot(4,4,i) plot(real((Interformer_channel(i,:)))); end %%信道化實現思路 si_new = 1:length(h)/D; Interformer01_py = (reshape(Interformer01,D,len/D)); % Interformer01_py = Interformer01_py.*repmat((exp(1j/2*pi*si_new)),length(h)/D,1); % h_py = reshape(h,D,length(h)/D); h_py = fliplr(reshape(h,D,length(h)/D));%.*repmat((exp(1j/2*pi*si_new)),D,1); Interformer02_channel = zeros(D,len/D); for i = 1:D Interformer02_channel(i,:) = downsample(filter(h_py(i,:),1,Interformer01_py(i,:)),1); % Interformer02_channel(i,:) = Interformer02_channel(i,:)*(-1)^(i-1)*exp(-1j*pi/2/D*(i-1)); end Interformer02_channel = fft(Interformer02_channel); figure() for i = 1:D subplot(4,4,i) plot(real((Interformer02_channel(i,:)))); end
信道化結果:
直接信道化:
多相實現:
該方式比直接實現,兔耳效應更明顯。