本文主要是介绍Matlab-奈奎斯特滤波器实现《一》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
所谓算法,其核心思想也是理论思想,剩下的编程就当然不在话下。技术在于积累,编程就是一门技术吧。刚开始的时候,有很多编程地方不会处理,积累多了自然也就会得多了。不管是什么编程语言,亦或理论思想。最大的避讳就是不求甚解,而且不求甚解给自己带来的弊端将是长久的。我就是深受毒害,所以每当遇到问题都时刻提醒自己,不要以为结果实现了就可以不去理会它,要去求甚解。废话好像多了点,还是直接进入正题吧。从上面一篇文章“Matlab无线通信仿真之奈奎斯特准则”,讲解了无码间干扰的基本准则,但在通信系统传输过程中常用的是根升余弦滤波器,具体内容参考《通信原理》(北邮版)。
根升余弦滚降滤波器的冲击响应表达式为:
从上面的表达式可以看出,存在着极限点,关于其极限值的推导比较简单,运用洛必达法则,即可以得到。所以,在matlab编程时候要将极限值提出来单独计算。
上图就是得到的根升余弦滤波器时域冲击响应图。其中横坐标为:t/Ts,Ts定义的传输符号周期。
编程核心:时域响应中的 t = ym * tstp ;其中tstp为时间隔,也可以理解为最小分辨率。ym 为和中点0时刻点相距的点数。带入h(t)中,就可以得到离散的冲击响应。
%***************************************************
% hrollfcoef.m
% 功能:产生奈奎斯特滤波器的系数
% Author:dfj
% Date:2017-04-2
% Email:jlm.guan@163.com
%***************************************************function [xh] = hrollfcoef2(irfn,ipoint,sr,alfs)%****************** 输入变量 *************************
% irfn : 滤波器阶数
% ipoint : 每个符号的插值点数
% sr : 符号速率 1/Ts
% alfs : 滚降系数α
% *****************************************************
tr = sr ;
tstp = 1.0 ./ tr ./ ipoint; %时间分辨率,最小的时间单元
n = ipoint .* irfn; %总共采样点数
mid = ( n ./ 2 ) + 1; %采样中间点
sub1 = 4.0 .* alfs .* tr; % 4*alpha*R_s 4α/Tbfor i = 1 : n icon = i - mid;ym = icon; %公式 t= tstp*ym;if abs(icon )< eps %eps为matlab自带精度2.2204e-016xt = (1.0-alfs+4.0.*alfs./pi).* tr; % h(0) else sub2 =16.0.*alfs.*alfs.*ym.*ym./ipoint./ipoint; % tr <= ipointif abs(sub2-1)>epsx1=sin(pi*(1.0-alfs)/ipoint*ym)./pi./(1.0-sub2)./ym./tstp;x2=cos(pi*(1.0+alfs)/ipoint*ym)./pi.*sub1./(1.0-sub2);xt = x1 + x2; % h(t)elsext=alfs.*tr.*((1.0-2.0/pi).*cos(pi/4.0/alfs)+(1.0+2.0./pi).*sin(pi/4.0/alfs))./sqrt(2.0)end % if sub2 ~= 1.0 end % if icon == 0.0 xh(i) = xt./tr;end % for i = 1 : n %******************** end of file ***************************
这篇关于Matlab-奈奎斯特滤波器实现《一》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!