?? transform.m
字號:
% 《數字信號處理教程——MATLAB釋義與實現》第八章模擬濾波器頻帶變換演示程序的子程序
% 電子工業出版社出版 陳懷琛編著 2004年9月
% transform.m 坐標的變換,低通到高通,帶通,帶阻
%
function [out]=transform(pl1,f0,omegac,string)
sq=f0^2;
pb=[-fliplr(pl1),pl1(2:length(pl1))];
%omegac=2;%低通濾波器變換到低通濾波器時的擴張系數
if(string == 'lp2lp')
plp1=omegac*pb;
out=plp1;
elseif(string=='lp2hp')
%低通到高通時坐標的對應關系!
for i=1:length(pb)
if i==length(pl1); %在這里當低通濾波器的坐標為零時
a=100; %把高通的坐標作為一個比較大的數處理,如:100
php1(i)=a;
else
a=1/pb(i);
php1(i)=a;
end
end
%php1=fliplr(php1); %這里將從低通對應過來的坐標進行排序
%php1=[php1(length(pl1)+1:length(pb)),php1(1:length(pl1))]; %坐標方向為:從大到小。考慮到繪圖時的點點對應,可以注釋掉!
out=php1; %對于輸出都取正半部分的坐標
%低通到帶通時的對應關系!
elseif(string=='lp2bp')
for i=1:length(pb);
a=roots([1,-pb(i),-sq]);
if (i<length(pl1))
pbp1(i)=a(2);
pbp2(i)=a(1);
else
pbp1(i)=a(1);
pbp2(i)=a(2);
end
end
out=pbp1; %對于輸出都取正半部分的坐標
%低通到帶阻時坐標的對應關系!
else
for i=1:length(pb)
b=roots([pb(i),-1,-sq*pb(i)]);
if(i<length(pl1))
pbs1(i)=b(2);
pbs2(i)=b(1);
elseif (i==length(pl1)) % 當低通濾波器的坐標為零時,
pbs1(i)=b(1); %方程只有一個根
pbs2(i)=b(1);
else
pbs1(i)=b(1);
pbs2(i)=b(2);
end
end
%pbs1=fliplr(pbs1);pbs2=fliplr(pbs2);
%pbs1=[pbs1(length(pl1):length(pb)),pbs1(1:length(pl1)-1)]; %這里進行變換的原因是由于低通濾波器的負半部分對應于上帶阻的下部分
%pbs2=[pbs2(length(pl1)+1:length(pb)),pbs2(1:length(pl1))]; %而正半部分對應于上部分,坐標方向為:從大到小。考慮到繪圖時的點點對應,可以注釋掉!!
out=fliplr(pbs1); %對于輸出都取正半部分的坐標
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -