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