升余弦滚降滤波器的仿真

在数字通信系统中,为了减少码间干扰,时常要用到升余弦滚降滤波器。码间干扰的原因,是相邻码元的尾巴进入了当前码元。

数字电视系统的像素也可以看作是一种供人观看的多进制码元,因此图像的模糊在一定程度上可以看作码间干扰。

数字电视系统的画面越来越清楚,采样频率越来越高,因此为了兼容标清系统,就需要进行下变换,它是对高清画面的低通滤波及运动再生。

数字电视的下变换常常采用理想低通滤波器来完成,因为它的主瓣最宽,能够最大限度地保证画面的清晰度。然而由于理想低通滤波器的波形无穷长的特性,下变换过程时常会引入不同程度的伪影。这是由低通滤波器时域波形的旁瓣造成的。

联想到数字通信系统对抗码间干扰的办法,我们可引入升余弦滚降,在不产生明显频率混叠的情况下,尽可能减少滤波函数的旁瓣。

以下是升余弦滚降滤波器仿真代码,供参考。

其中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');

你可能感兴趣的:(Codec,数字视频处理)