MATLAB分析升余弦滤波器




作用

升余弦滤波器常常作为发送端的成型滤波器,用来抑制信号带外辐射。

MATLAB实现

在maltab中,主要用rcosdesign函数来实现FIR脉冲成型滤波器,其他相关的函数还有comm.RaisedCosineTransmitFilter,comm.RaisedCosineTransmitFilter。

语法:
b = rcosdesign(beta,span,sps)
b = rcosdesign(beta,span,sps,shape)
描述:

b = rcosdesign(beta,span,sps)返回系数b,对应于一个滚降系数为beta的均方根升余弦FIR滤波器。滤波器截断为span个symbols,每个symbol包含sps个采样点。滤波器的阶数sps*span必须是偶数。滤波器能量为1。

b = rcosdesign(beta,span,sps,shape)返回一个均方根升余弦滤波器(shape为’sqrt’)或者一个升余弦滤波器(shape为’normal’)。

升余弦滤波器的例子

升余弦可以抑制码间干扰,发送和接收滤波器分开。

升余弦滤波器的主要参数是其滚降系数,滚降系数直接决定了滤波器的带宽。理想的升余弦滤波器由无限多个抽头。因此,实际上的升余弦滤波器是加窗的。窗的长度由FilterSpanInSymbols特性来控制。在本例中,我们将窗长度设定为6个symbol长度。这样的滤波器也有3个symbol的群延时。升余弦滤波器用在信号上采样后的脉冲成型。因此,我们也需要指定上采样倍数。升余弦滤波器的参数如下:

Nsym=6;

beta=0.5;

samsPerSym=8;

用升余弦发射滤波器系统结构体构建滤波器并用fvtool来可视化滤波器特性。

rctFilt = comm.RaisedCosineTransmitFilter(... 
'Shape', 'Normal', ...
'RolloffFactor', beta, ...
'FilterSpanInSymbols', Nsym, ...
'OutputSamplesPerSymbol', sampsPerSym)
% Visualize the impulse response
fvtool(rctFilt, 'Analysis', 'impulse')
 
  
 
  

这个结构体设计了一个直接型多项式单位能量FIR滤波器。滤波器阶数Nsym*sampsPerSym,抽头数Nsym*sampsPerSym+1。可以利用gain特性归一化滤波器系数以使滤波后的和未滤波数据匹配。

% Normalize to obtain maximum filter tap value of 1 
b = coeffs(rctFilt);
rctFilt.Gain = 1/max(b.Numerator);

% Visualize the impulse response
fvtool(rctFilt, 'Analysis', 'impulse')

升余弦滤波器的时域脉冲响应表示

由于8倍过采样,在符号采样点0处为最大值,在其他nTs处其采样值为0。

 
 
 
 
升余弦滤波器的群延时是恒定值,因为脉冲响应是对称的。其群延时大小是其初始时间和峰值响应时间之差,如下图: 



升余弦滤波器脉冲成型

我们产生一个双极性数据序列,然后在不引入ISI情况下用升余弦滤波器进行波形成型。

DataL = 20;             % Data length in symbols 
R = 1000; % Data rate
Fs = R * sampsPerSym; % Sampling frequency

% Create a local random stream to be used by random number generators for
% repeatability
hStr = RandStream('mt19937ar', 'Seed', 0);

% Generate random data
x = 2*randi(hStr, [0 1], DataL, 1)-1;
% Time vector sampled at symbol rate in milliseconds
tx = 1000 * (0: DataL - 1) / R;

下图画出了源数据和插值后的信号。很难比较这两个信号由于滤波器峰值响应由滤波器群延时Nsym/(2*R)延后了。需要指出的是,我们在输入X后添加Nsym/2个0以使滤波器有用采样点都输出。

% Filter 
yo = rctFilt([x; zeros(Nsym/2,1)]);
% Time vector sampled at sampling frequency in milliseconds
to = 1000 * (0: (DataL+Nsym/2)*sampsPerSym - 1) / Fs;
% Plot data
fig1 = figure;
stem(tx, x, 'kx'); hold on;
% Plot filtered data
plot(to, yo, 'b-'); hold off;
% Set axes and labels
axis([0 30 -1.7 1.7]); xlabel('Time (ms)'); ylabel('Amplitude');
legend('Transmitted Data', 'Upsampled Data', 'Location', 'southeast')


接下来步骤通过延后输入信号对升余弦滤波器群延时进行了补偿。现在容易看出升余弦滤波器如何上采样和对信号滤波。

% Filter group delay, since raised cosine filter is linear phase and 
% symmetric.
fltDelay = Nsym / (2*R);
% Correct for propagation delay by removing filter transients
yo = yo(fltDelay*Fs+1:end);
to = 1000 * (0: DataL*sampsPerSym - 1) / Fs;
% Plot data.
stem(tx, x, 'kx'); hold on;
% Plot filtered data.
plot(to, yo, 'b-'); hold off;
% Set axes and labels.
axis([0 25 -1.7 1.7]); xlabel('Time (ms)'); ylabel('Amplitude');
legend('Transmitted Data', 'Upsampled Data', 'Location', 'southeast')


滚降系数

这个步骤给出了改变滚降系数(0.5–>0.2)带来的效果。滚降系数变小使滤波器有更窄的变化带导致滤波后信号过冲变大。

滚降系数表示超出理论奈奎斯特带宽那部分带宽,当滚降系数为0则变成了理想矩形,滚降系数为1则为占用两倍奈奎斯特带宽的升余弦滤波器。

% Set roll-off factor to 0.2 
rctFilt2 = comm.RaisedCosineTransmitFilter(...
'Shape', 'Normal', ...
'RolloffFactor', 0.2, ...
'FilterSpanInSymbols', Nsym, ...
'OutputSamplesPerSymbol', sampsPerSym);
% Normalize filter
b = coeffs(rctFilt2);
rctFilt2.Gain = 1/max(b.Numerator);
% Filter
yo1 = rctFilt2([x; zeros(Nsym/2,1)]);
% Correct for propagation delay by removing filter transients
yo1 = yo1(fltDelay*Fs+1:end);
% Plot data
stem(tx, x, 'kx'); hold on;
% Plot filtered data
plot(to, yo, 'b-',to, yo1, 'r-'); hold off;
% Set axes and labels
axis([0 25 -2 2]); xlabel('Time (ms)'); ylabel('Amplitude');
legend('Transmitted Data', 'beta = 0.5', 'beta = 0.2',...
'Location', 'southeast')


均方根升余弦滤波器

升余弦滤波器的典型应用是将滤波器分为发送和接收。发送端和接收端都使用根升余弦滤波器。发送和接收滤波器结合起来等效于升余弦滤波器导致了可忽略不计的ISI。

% Design raised cosine filter with given order in symbols 
rctFilt3 = comm.RaisedCosineTransmitFilter(...
'Shape', 'Square root', ...
'RolloffFactor', beta, ...
'FilterSpanInSymbols', Nsym, ...
'OutputSamplesPerSymbol', sampsPerSym);

数据流升采样然后在发送端用根升余弦滤波器滤波。

% Upsample and filter. 
yc = rctFilt3([x; zeros(Nsym/2,1)]);
% Correct for propagation delay by removing filter transients
yc = yc(fltDelay*Fs+1:end);
% Plot data.
stem(tx, x, 'kx'); hold on;
% Plot filtered data.
plot(to, yc, 'm-'); hold off;
% Set axes and labels.
axis([0 25 -1.7 1.7]); xlabel('Time (ms)'); ylabel('Amplitude');
legend('Transmitted Data', 'Sqrt. Raised Cosine', 'Location', 'southeast')


发送信号然后再接收端经过滤波。单位能量归一化保证发送接收等效滤波器和单位能量归一化升余弦滤波器相同。滤波接收信号等效于信号直接经过一个单独的升余弦滤波器。

% Design and normalize filter. 
rcrFilt = comm.RaisedCosineReceiveFilter(...
'Shape', 'Square root', ...
'RolloffFactor', beta, ...
'FilterSpanInSymbols', Nsym, ...
'InputSamplesPerSymbol', sampsPerSym, ...
'DecimationFactor', 1);
% Filter at the receiver.
yr = rcrFilt([yc; zeros(Nsym*sampsPerSym/2, 1)]);
% Correct for propagation delay by removing filter transients
yr = yr(fltDelay*Fs+1:end);
% Plot data.
stem(tx, x, 'kx'); hold on;
% Plot filtered data.
plot(to, yr, 'b-',to, yo, 'm:'); hold off;
% Set axes and labels.
axis([0 25 -1.7 1.7]); xlabel('Time (ms)'); ylabel('Amplitude');
legend('Transmitted Data', 'Rcv Filter Output',...
'Raised Cosine Filter Output', 'Location', 'southeast')


本文转自:https://blog.csdn.net/lovehua365/article/details/79594580

  • 6
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Matlab平方根余弦滤波器余弦滤波器是数字信号处理中常见的滤波算法,两者的主要区别在于其滤波响应的幅频特性。 平方根余弦滤波器(Root Raised Cosine Filter,简称RRCF)是一种特殊的卷积滤波器,它的频率响应是类似于平方根函数的形状。这种滤波器用于数字通信系统中的匹配滤波,用于接收端对发送端发出的带符号的调制信号进行匹配。它的主要特点是能够有效地抑制信号带外的噪声和干扰,同时保留信号带内的信息。 在Matlab中,实现RRCF可以使用firrcos函数,该函数可以生成镶嵌在余弦窗口中的滤波器。用户需要指定余弦窗口和带宽扩展因子等参数,firrcos函数会自动计算出所需的滤波器系数。 余弦滤波器(Raised Cosine Filter,简称RCF)也是一种常见的数字滤波器,它的特点是具有类似于余弦函数的频率响应形态。这种滤波器也用于数字通信系统中的匹配滤波,用于信号发送端对调制信号进行滤波,以减少带宽占用和降低误码率。 Matlab中实现RCF可以使用firrcos函数或者firrcos2函数,这两个函数的参数相对较少,用户只需要指定滤波器的带宽、抽样频率等基本参数即可。这种滤波器相对于RRCF来说,在频域上存在一定的失真,但是实现起来相对简单,使用广泛。 总之,Matlab中的平方根余弦滤波器余弦滤波器都是数字滤波器的常见算法,用户可以根据具体的实际情况和需求选择适合的算法,并使用Matlab提供的函数进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值