1. 程式人生 > 其它 >【濾波器】基於matlab升餘弦濾波器【含Matlab原始碼 993期】

【濾波器】基於matlab升餘弦濾波器【含Matlab原始碼 993期】

一、簡介

1 作用
升餘弦濾波器常常作為傳送端的成型濾波器,用來抑制訊號帶外輻射。

2 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來視覺化濾波器特性。

二、原始碼

%%升餘弦滾降系統示意圖
clear all;
close all;
Ts=1;
N_sample=17;
dt=Ts/N_sample;
df=1.0/(20.0*Ts);
t=-10*Ts:dt:10*Ts;
f=-2/Ts:df:2/Ts;
 alpha=[0,0.5,1];
 for n=1:length(alpha)
     for k=1:length(f)
         if abs(f(k))>0.5*(1+alpha(n))/Ts
             Xf(n,k)=0;
         elseif abs(f(k))<0.5*(1-alpha(n))/Ts
             Xf(n,k)=Ts;
         else
             Xf(n,k)=0.5*Ts*(1+cos(pi*Ts/(alpha(n)+eps)*(abs(f(k))-0.5*(1-alpha(n))/Ts)));
         end
     end
     xt(n,:)=sinc(t/Ts).*(cos(alpha(n)*pi*t/Ts))./(1-4*alpha(n)^2*t.^2/Ts^2+eps);
 end
%設定參量,採用8倍取樣速率,滾降係數為0.5
Fd=1; Fs=4; Delay=2;  R=0.5;
%建立升餘弦滾降濾波器
[yf,tf]=rcosine(Fd,Fs,'fir/normal',R,Delay);
%畫圖得到升餘弦滾降濾波器波形
%b1=ones(1,length(t2));% 濾波器輸入矩形脈衝
figure(1);
subplot(3,1,1);
plot(yf);
grid;
xlabel('Time');
ylabel('Amplitude');
title('升餘弦滾降濾波器h(t)');
%定義一個與二元序列對應的時間序列作為原始訊號
x=[zeros(1,10),ones(1,10),ones(1,10),zeros(1,10),zeros(1,10),zeros(1,10)];   
 
subplot(3,1,2);
plot(x);

三、執行結果



四、備註

版本:2014a
完整程式碼或代寫加1564658423