rcosdesign函数
整理原因
最近需要完成一个fir的作业,具体上就是需要将进行8-PAM调制,4倍上采样,完成C和verilog程序设计,并通过仿真显示出C程序和Verilog滤波波形。课上给出的参考程序中涉及到该函数,与此同时,我对8-PAM不了解,所以打算整理一下,然后看看和8-PAM是否有关联,我从google上同时查找8-PAM和rcosdesign,发现没有和两个词都相关的内容,先留一个坑,等有时间把调制方式的内容学习整理下。
rcosdesign
用法
b = rcosdesign(beta,span,sps,shape)
beta: 滚降系数,取值0~1之间,决定频宽和陡峭程度。取值一般大于0.2。
span: 表示截断的符号范围。
sps: 单个符号范围的采样个数。
shape:可选参数。可不加,可加上’normal’,可加上’sqrt’。
平方根升余弦滤波器
h = rcosdesign(0.25,6,4);
mx = max(abs(h-rcosdesign(0.25,6,4,'sqrt'))) %mx = 0默认情况为平方根升余弦滤波器
fvtool(h,'impulse')
normal升余弦滤波器
rf = 0.25;
span = 4;
sps = 3;
h1 = rcosdesign(rf,span,sps,'normal');
fvtool(h1,'impulse')
normal升余弦滤波器等价于两个级联的平方根升余弦滤波器。
测试代码
rf = 0.25;
span = 4;
sps = 3;
h1 = rcosdesign(rf,span,sps,'normal'); % normal升余弦滤波器
fvtool(h1,'impulse')
h2 = rcosdesign(rf,span,sps,'sqrt'); % 平方根升余弦滤波器
fvtool(h2,'impulse') % 显示滤波器脉冲系数
h3 = conv(h2,h2); % 级联平方根升余弦滤波器
% 取和normal升余弦滤波器相同数量的系数
p2 = ceil(length(h3)/2);
m2 = ceil(p2-length(h1)/2);
M2 = floor(p2+length(h1)/2);
ct = h3(m2:M2);
% 绘制normal升余弦滤波器和级联平方根滤波器
stem([h1/max(abs(h1));ct/max(abs(ct))]','filled')
xlabel('Samples')
ylabel('Normalized amplitude')
legend('h1','h2 * h2')
从图中可以看出,滤波器系数并没有完全重合,这是因为normal升余弦滤波器是无限长度的,我们可以通过增加span截断的符号范围来使得两者之间更接近。
当span取50时,基本看不出任何区别
附录
randi()函数
用法
r=randi(imax); % 产生1-imax之间的整型标量
r=randi(imax,10,1); % 产生1-imax之间的整型10*1矩阵
r=randi([imin,imax],10,1) % 产生仅包含0,1的整型10*1矩阵
upfirdn()函数
用法
yout = upfirdn(xin,h) %xin为输入信号,h为脉冲响应
yout = upfirdn(xin,h,p)
yout = upfirdn(xin,h,p,q) %p为上采样系数,q为下采样系数
说明
包含3个流程:
- 上采样xin,上采样控制系数为p(通过插入0来实现)
- 利用脉冲响应系数h对上采样后数据进行滤波
- 下采样滤波结果,下采样控制系数为q(通过删除部分结果实现)
后续补充例子
参考文章
[1]https://blog.csdn.net/lanluyug/article/details/80401943
[2]https://ww2.mathworks.cn/help/signal/ref/rcosdesign.html