matlab中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')

一共4*6+1個採樣點
normal升餘弦濾波器

rf = 0.25;
span = 4;
sps = 3;

h1 = rcosdesign(rf,span,sps,'normal');
fvtool(h1,'impulse')

normal 升餘弦濾波器
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升餘弦濾波器係數
從圖中可以看出,濾波器係數並沒有完全重合,這是因爲normal升餘弦濾波器是無限長度的,我們可以通過增加span截斷的符號範圍來使得兩者之間更接近。
span取50
當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個流程:

  1. 上採樣xin,上採樣控制係數爲p(通過插入0來實現)
  2. 利用脈衝響應係數h對上採樣後數據進行濾波
  3. 下采樣濾波結果,下采樣控制係數爲q(通過刪除部分結果實現)
    後續補充例子

參考文章

[1]https://blog.csdn.net/lanluyug/article/details/80401943
[2]https://ww2.mathworks.cn/help/signal/ref/rcosdesign.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章