2010-12-02

[原创]升余弦滤波器总结

[原创]升余弦滤波器总结
 关于升余弦滤波器,matlab中可以用fdatool生成,也可以自己调用函数 
rcosine,rcosfir,rcosflt生成。 
下面先贴出matlab中rcosfir公式 
rcosfir中的公式
%   The time response of the raised cosine filter is,
%
%     h(t) = SINC(t/T) COS(pi R t/T)/(1 - 4 R^2 t^2 /T^2)
%
%   The frequency domain has the spectrum
%
%            /  T                                 when 0 < |f| < (1-r)/2/T
%            |          pi T         1-R    T          1-R         1+R
%     H(f) = < (1 + cos(----) (|f| - ----) ---    when --- < |f| < ---
%            |            r           2T    2          2 T         2 T
%            \  0                                 when |f| > (1+r)/2/T
%
%
%   T is the input signal sampling period, in seconds.  RATE is the
%   oversampling rate for the filter (or the number of output samples per input
%   sample). The rolloff factor, R, determines the width of the transition
%   band.  R has no units.  The transition band is (1-R)/(2*T) < |f| <
%   (1+R)/(2*T).
%
%   N_T is a scalar or a vector of length 2.  If N_T is specified as a
%   scalar, then the filter length is 2 * N_T + 1 input samples.  If N_T is
%   a vector, it specifies the extent of the filter.  In this case, the filter
%   length is N_T(2) - N_T(1) + 1 input samples (or
%   (N_T(2) - N_T(1))* RATE + 1 output samples).
%
直接用这两个生成的例子,摘自无线通信fpga设计,改了一下注释和图 
添加了网友关于阶数,群延时以及 
Fd = 1;                 % 输入信号的采样率 
Fs = 8;                 % 输出信号的采样率 
Delay = 3               % 滤波器的群时延 
N = Delay*(Fs/Fd)*2     % 滤波器的阶数 
M = Delay*(Fs/Fd)*2+1;  % 滤波器的系数个数 
R = 0.125;              % 滚降因子 
[yf,tf] = rcosine(Fd,Fs,'sqrt',R,Delay); 
plot(yf); 
grid on; 
xlabel('Time') 
ylabel('Amplitude'); 
% impz(rrcfilter,1); % 画冲激响应 
x=rand(100,1);       % 产生随机信号 
xt=zeros(1,800);     % 对输入信号后面补零 
xt(1:8:end)=x; 
y=filter(yf,tf,xt);  % 经过升余弦滤波器 
yt=y((length(yf)+1)/2:8:end); % 下采样,去除滤波器的抽头时延 
figure; 
subplot(2,1,1); 
stem(x(1:40),'.'); 
title('INPUT : x'); 
subplot(2,1,2); 
stem(yt(1:40),'-'); 
title('OUTPUT : y'); 
% 1. Fd 信息速率 Rb 
% 2. Fs / Fd就是采样率,也就是一个码元几个样点. 
% 3. 阻带不用设置!因为设计的是升余弦滤波器,主要作用是用于波形成形, 
%    而不是滤出落在阻带的信号.这个你可以查一下升余弦滤波器的特性, 
%    很多通信书上都有的,一般在数字信号的基带传输一部分. 
% 4. num的长度就是delay * (Fs / Fd) * 2 + 1,也就是说 
%    滤波器的阶数是delay * (Fs / Fd) * 2  
%    系数个数是delay * (Fs / Fd) * 2 + 1. 
% 5. 根号升余弦是用在波形成型上的,原始输入的序列都是 
%    德尔塔序列,经过根号升余弦后,脉冲成型。即把原来用作成型的 
%    低通滤波器换成根号升余弦滤波器就就可以了,如果不换的话, 
%    用理想低通做成型滤波器,时域则由德尔塔序列变为SINC函数序列, 
%    这样实际也可以做到无码间干扰,只要你的低通滤波器的截至频率是1/Ts 
% 6. 在调制解调中加入余弦滤波器的意义,可以提高频带的利用率, 
%    降低码间干扰,而这些与调制解调并不冲突 
% 7. 根升余弦滤波的作用 
%    数字基带调制后,必须经过脉冲成型,才能调制到载频进行发射。 
%    因为理想的矩形脉冲(理想的无ISI)不可能实现,所以用升余弦函数 
%    脉冲替代,保证采样时刻无ISI影响。通常在收发两端各用一个根 
%    升余弦滤波器,实现系统响应的升余弦特性。升余弦函数仅保证数字 
%   调制解调及采样无ISI影响,接收机还要考虑信道多径引入的ISI影响。 
%   某些情况下,根升余弦滤波器同时可用作基带低通滤波器;但如果 
%   对频带有限制要求,可以用ISI受控的部分响应系统函数来实现低通滤波。 

我的理解: 
matlab自带的函数生成的滤波器系数是个定值,即阶数+1,如果我们需要 
多个系数,即阶数一定,但是每个tap要去多个系数的话应该用滤波器的公式 
自己生成。暂时是这么理解的,可能还有简单的方法。 
h(t) = \frac{4R(cos(\frac{(1+R)\pi t}{T})+\frac{sin(\frac{(1-R)}{T} \pi t)}{\frac{4Rt}{T}} ))}{\pi \sqrt{T} (1-\frac{4Rt}{T} )^{2} }  
这个是我用来生成多个升余弦系数的公式。不知道和自带的那个差别情况。 

本文地址:http://114er.blogspot.com/2010/12/blog-post_02.html
原创文章如转载,请注明链接: 转自Welcome Funny Guys

0 评论: