升餘弦滾降濾波器的仿真

在數字通信系統中,爲了減少碼間干擾,時常要用到升餘弦滾降濾波器。碼間干擾的原因,是相鄰碼元的尾巴進入了當前碼元。

數字電視系統的像素也可以看作是一種供人觀看的多進制碼元,因此圖像的模糊在一定程度上可以看作碼間干擾。

數字電視系統的畫面越來越清楚,採樣頻率越來越高,因此爲了兼容標清系統,就需要進行下變換,它是對高清畫面的低通濾波及運動再生。

數字電視的下變換常常採用理想低通濾波器來完成,因爲它的主瓣最寬,能夠最大限度地保證畫面的清晰度。然而由於理想低通濾波器的波形無窮長的特性,下變換過程時常會引入不同程度的僞影。這是由低通濾波器時域波形的旁瓣造成的。

聯想到數字通信系統對抗碼間干擾的辦法,我們可引入升餘弦滾降,在不產生明顯頻率混疊的情況下,儘可能減少濾波函數的旁瓣。

以下是升餘弦滾降濾波器仿真代碼,供參考。

其中Fs爲虛擬的採樣頻率,Fb爲行像素個數,Ns是採樣數,a是滾降係數。a = W2 / W1,也就是滾降部分相對於基帶部分的帶寬。

具體情況請參考相關文獻。

2015.7.3

// 如果有修改,記得告訴我
// Copyleft under FreeBSD License

function [t,h] = myraicos(a, Ns, Fb, Fs)
    printf("myraicos::a=%d:Ns=%d:Fb=%d:Fs=%d\n",a,Ns,Fb,Fs);
    Ts = 1 ./ Fs;
    Tb = 1 ./ Fb;
    t = (-Ns):1:(Ns-1);
    t = t .* Ts;
    ha = sin(%pi .* t ./ Tb + %eps) ./ (%pi .* t ./ Tb + %eps);
    hb = cos(a .* %pi .* t ./ Tb) ./ (1 - (2 .* a .* t ./ Tb)^2 + %eps);
    h = ha .* hb;
endfunction

clear all;
Ns = 2 ^ 16;
Fs = 1920 * 16;
clf;
[t,h1] = myraicos(0.01, Ns, 720, Fs);
//plot(abs(fft(h1)) / max(abs(fft(h1))),'green');
plot(t,h1,'green');
[t,h2] = myraicos(0.5, Ns, 720, Fs);
//plot(abs(fft(h2)) / max(abs(fft(h2))),'blue');
plot(t,h2,'blue');
[t,h3] = myraicos(0.75, Ns, 720, Fs);
//plot(abs(fft(h3)) / max(abs(fft(h3))),'red');
plot(t,h3,'red');
[t,h4] = myraicos(0.95, Ns, 720, Fs);
//plot(abs(fft(h4)) / max(abs(fft(h4))),'cyan');
plot(t,h4,'cyan');

[t,h1] = myraicos(0.01, Ns, 1440, Fs);
//plot(abs(fft(h1)) / max(abs(fft(h1))),'green');
plot(t,h1,'green');
[t,h2] = myraicos(0.5, Ns, 1440, Fs);
//plot(abs(fft(h2)) / max(abs(fft(h2))),'blue');
plot(t,h2,'blue');
[t,h3] = myraicos(0.75, Ns, 1440, Fs);
//plot(abs(fft(h3)) / max(abs(fft(h3))),'red');
plot(t,h3,'red');
[t,h4] = myraicos(0.95, Ns, 1440, Fs);
//plot(abs(fft(h4)) / max(abs(fft(h4))),'cyan');
plot(t,h4,'cyan');

//plot(abs(fft(h2)) .* abs(fft(h3) / max(abs(fft(h2)) .* abs(fft(h3)))),'pink');
//plot(t,h,'red');

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章