成形滤波器(一,利用函数设计成形滤波器)

1 为什么要对基带信号成形滤波

(1)频谱压缩,限制信号带宽。在数字通信中基带信号是矩形脉冲,突变的上升沿和下降沿包含高频分量丰富,其频谱范围普遍比较宽(频谱是一个Sa函数)。为了有效利用信道,在信号传输之前,需要对信号进行频谱压缩。使其在消除码间串扰和达到最佳检测的前提下,大大提高频带利用率。信号带宽匹配信道带宽。
(2)改变传输信号的成形波形,可以减小抽样定时脉冲误差所带来的影响,即降低了码间干扰(ISI)。信号带限就会引入码间串扰(时域的离散化对应频域的周期化),会导致接收信号波形失真。但一般情况下,只需要在特定时刻的信号抽样值无失真,并不需要整个信号波形都无失真,而升余弦滤波器刚好就能对基带信号频谱进行带限,并且不影响信号在特定时刻的抽值。

2 成形滤波器的参数

函数:[yf,tf]=rcosine(Fd,Fs,‘fir/sqrt’,R,Delay)
Fd (Hz):码元速率
Fs (Hz):滤波器的采样频率 Fs/Fd 必须是一个正整数
滤波器的设计与RB无关,我们要保证的是Fs/Fd=常数,Fs/Fd就是上采样率。其值为一个码元的采样点数。
TYPE_FLAG:指定滤波器的选型或者设计 fir/sqrt 根升余弦
R :roll-off factor 滚降系数 ,它决定着H(f)的形状。滚降系数R的取值对系统性能有着重要影响,R通常在[0,1]之间取值。
R较大时:
优点:时域波形的衰减较快,振荡起伏小。有利于减小码间干扰和定时误差的影响。
缺点:系统占用频带带宽较宽,减小了频带利用率,且对后续模拟器件的要求越高。
R太小时:
缺点:
波形的振荡起伏很大,在过零点时,波形的坡度比较陡。由于接收端定时恢复单元给出的采样时刻存在误差,而且一点误差就会造成很大的码间干扰。
波形的拖尾比较长,在数字信号处理进行截断时,若滤波器的长度不够则信号的能量有较大的损失。

所以R的取值不能太大,也不能太小,要根据实际工程运用找出最佳的滚降系数,一般取0.35。
在这里插入图片描述

delay :delay决定了滤波器的群时延,时延的长度和滤波器的阶数有关,为滤波器阶数的一半,群时延的这部分数据需要舍弃掉。对于线性滤波器而言,群时延也是滤波器输入信号到脉冲响应峰值的时间延迟。根据滤波器的阶数公式N=delay*(Fs/Fd)*2+1。若delay的值越大,则滤波器的阶数越高,基带成型滤波后的信号越光滑。

3 低通滤波器的设计和滤波器的延时

在这里插入图片描述
在这里插入图片描述

4 源代码和仿真结果

源代码

%%%%%%%%%%%%%%%%%% 成形滤波器的设计与应用 %%%%%%%%%%%%%%%%%%%%%%
%%%% 仿真步骤
% 1、产生基带信号-1 1                2、成形滤波器的设计
% 3、对基带信号成形,画出信号波形    4、成形滤波后的信号进行BPSK调制
% 5、相干解调                        6、对解调后的信号进行低通滤波、成形滤波(可选)
% 7、抽样判决

clc;
clear all;
close all;


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
%                    参数设置 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N=20;               % 码元个数
fc=6e6;             % 载波信号频率
Fs =10*fc;          % 采样频率60M
RB=2e6;             % 码速率2M

count=Fs/RB;        % 每个码元的采样点数
n=N*count;          % 总的采样点数
ts=1/Fs;            % 最小采样间隔
Ts=1/Fs*count;      % 码元周期

t1=(1:N)*Ts;        % 码元持续时间
t2=(1:n)*ts;    	% 总的持续时间

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%               产生基带信号 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x=randi([0 1],1,N)*2-1;   % 产生双极性序列 1 -1 
figure(1); 
subplot(211);
stem(t1,x);grid on;
ylim([-1.2 1.2]);

% 将x的值插入到xt中,每count个插一个
for p=1:N	 
    xt(( (p-1)*count+1):( p*count) ) = x(p);
end   
subplot(212);
plot(t2,xt);grid on;
ylim([-1.2 1.2]);
title('基带信号时域波形');


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%            成型滤波的产生
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% [yf,tf]=rcosine(Fd,Fs,'fir/sqrt',R,Delay)
% % Fd (Hz):输入数字序列的采样率
% % Fs (Hz):滤波器的采样频率  Fs/Fd 必须是一个正整数
% % TYPE_FLAG指定滤波器的选型或者设计
% % R :roll-off factor 指定滤波器的过渡频带
% % DELAY :从滤波器的开始到脉冲响应峰值的时间延迟,必须为一个正整数
%%% DELAY的值越大,则滤波器的阶数越多,基带成型滤波后的信号越光滑
%%% 阶数N=delay*(Fs/Fd)*2+1 
DELAY=1;  
R=0.5; 
% [yf,tf]=rcosine(Fd,fs,'fir/sqrt',R,Delay); % 根升余弦
[yf,tf]=rcosine(RB,Fs,'fir/normal',R,DELAY); % 升余弦
  
YF=fftshift(fft(yf));   
L=length(yf);
P=2*abs(YF)/L;
f=(0:L-1)*Fs/L-Fs/2;
figure(2)
subplot(211);
t0=0:1/Fs:1/Fs*(length(yf)-1);
plot(t0,yf); grid on;
title('升余弦滤波器时域波形');
xlabel('时间/t');ylabel('幅度');

subplot(212);
plot(f,P);
title('升余弦滤波器频域波形');
xlabel('频率/Hz');ylabel('幅度');


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%        对基带信号成型,画出信号波形
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
y1=conv(yf,xt);
y1=y1((length(yf)-1)/2+1:end-(length(yf)-1)/2);
figure(3);  
plot(t2,y1); grid on;
legend('基带信号成形滤波后的信号时域波形');


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%               调制  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
y_carry=cos(2*pi*fc*t2);
y_bpsk=y1.*y_carry; % 调制

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%               相干解调  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
y_jietiao=y_bpsk.*y_carry;   % 相干解调


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%             低通滤波
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%LOW_PASS Returns a discrete-time filter object.

% MATLAB Code
% Generated by MATLAB(R) 9.5 and DSP System Toolbox 9.7.
% Generated on: 08-Nov-2021 09:39:21

% Equiripple Lowpass filter designed using the FIRPM function.

% All frequency values are in MHz.
Fs = 60;  % Sampling Frequency

N     = 50;  % Order
Fpass = 3;   % Passband Frequency
Fstop = 8;   % Stopband Frequency
Wpass = 1;   % Passband Weight
Wstop = 1;   % Stopband Weight
dens  = 20;  % Density Factor

% Calculate the coefficients using the FIRPM function.
b  = firpm(N, [0 Fpass Fstop Fs/2]/(Fs/2), [1 1 0 0], [Wpass Wstop],{dens});



%%% y = filter(b,a,X)滤波函数:保留前length(x)个点
%%%1个参数:设置好的滤波器  第3个参数:需要滤波的信号
% % 如果a(1)不等于1的话,则就利用a(1)标准化滤波器系数,可以利用多项式除法使分母变为1% % 如果 a(1) 等于0,滤波器返回错误值。
y_jietiao_lowpass=filter(b,1,y_jietiao);     % 低通滤波
% y_end=filter(yf,tf,y_jietiao_lowpass);     % 成型滤波  由于是升余弦 所以这里不需要



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                抽样
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 滤波器的延时等于滤波器阶数的一半
delay_time=round((DELAY*(Fs/RB)*2+1)/2+length(b)/2);        % 滤波器的延时

y_end=y_jietiao_lowpass((delay_time+count/2):count:end);    % 抽样

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%           判决
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:length(y_end)
    if y_end(i)>=0
       y_end(i)=1;
    else
       y_end(i)=-1;
    end
end


figure(4)
stem(y_end,'-k*');hold on;
stem(x,'-ro'); hold on;grid on;
legend('最后输出序列','基带序列');


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%               误码数 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
error=0;
for i=1:length(y_end)
    if ( y_end(i)~=x(i))
        error=error+1;
    end
end
fprintf('错误的码元个数为%g\n',error);


%%%%%%%%%%%%%%%%%%%%%%%%%% 结论 %%%%%%%%%%%%%%%%%%%%%%%%%
% 1、成型滤波的设计:滤波器的参数要根据系统参数来设定(码元速率、采样率)
%    对基带信号进行成型滤波时,首先要内插 ,目的在于使成型滤波基带信号平滑 
%    插入0的个数取决于一个码元采集了多少个样点
%    判断成型滤波器是否合适:滤波后信号是否平滑   基带信号的数据点是否在滤波后的波形上(见figure3)


仿真结果

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 41
    点赞
  • 353
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值