⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 some filter.txt

📁 设计的带通滤波器方法 改变参数就行了 里面有几种方法
💻 TXT
字号:
matlab设计的带通滤波器方法  改变参数就行了

cheb1 
% wp1=0.45*pi;wp2=0.65*pi;ws1=0.3*pi;ws2=0.75*pi;Rp=1;Rs=40 
% =============双线型变换法========================================= 
wp1=0.45*pi; wp2=0.65*pi; 
ws1=0.3*pi; ws2=0.75*pi; 
Rp=1; Rs=40; 
Wp1=tan(wp1/2); Wp2=tan(wp2/2); 
Ws1=tan(ws1/2); Ws2=tan(ws2/2); 
BW=Wp2-Wp1; W0=Wp1*Wp2; W00=sqrt(W0); 
WP=1; WS=WP*(W0^2-Ws1^2)/(Ws1*BW); 
[N,Wn]=cheb1ord(WP,WS,Rp,Rs,'s'); 
[B,A]=cheby1(N,Rp,Wn,'s'); 
[BT,AT]=lp2bp(B,A,W00,BW); 
[num,den]=bilinear(BT,AT,0.5); 
[h,omega]=freqz(num,den,64); 

subplot(2,2,1);stem(omega/pi,abs(h)); 
xlabel('\omega/\pi');ylabel('|H(z)|'); 

subplot(2,2,2);stem(omega/pi,20*log10(abs(h))); 
xlabel('\omega/\pi');ylabel('增益.dB'); 
% =============直接法================================= 
wp1=0.45*pi; wp2=0.65*pi; 
ws1=0.3*pi; ws2=0.75*pi; 
Rp=1; Rs=40; 
Wp=[wp1/pi,wp2/pi]; Ws=[ws1/pi,ws2/pi]; 
[N,Wn]=cheb1ord(Wp,Ws,Rp,Rs); 
[B,A]=cheby1(N,Rp,Wn); 
[h,omega]=freqz(B,A,64); 

subplot(2,2,3);stem(omega/pi,abs(h)); 
xlabel('\omega/\pi');ylabel('|H(z)|'); 

subplot(2,2,4);stem(omega/pi,20*log10(abs(h))); 
xlabel('\omega/\pi');ylabel('增益.dB'); 
%cheby2% 
% wp1=0.45*pi;wp2=0.65*pi;ws1=0.3*pi;ws2=0.75*pi;Rp=1;Rs=40 
% =============双线型变换法========================================= 
wp1=0.45*pi; wp2=0.65*pi; 
ws1=0.3*pi; ws2=0.75*pi; 
Rp=1; Rs=40; 
Wp1=tan(wp1/2); Wp2=tan(wp2/2); 
Ws1=tan(ws1/2); Ws2=tan(ws2/2); 
BW=Wp2-Wp1; W0=Wp1*Wp2; W00=sqrt(W0); 
WP=1; WS=WP*(W0^2-Ws1^2)/(Ws1*BW); 
[N,Wn]=cheb2ord(WP,WS,Rp,Rs,'s'); 
[B,A]=cheby2(N,Rs,Wn,'s'); 
[BT,AT]=lp2bp(B,A,W00,BW); 
[num,den]=bilinear(BT,AT,0.5); 
[h,omega]=freqz(num,den,64); 

subplot(2,2,1);stem(omega/pi,abs(h)); 
xlabel('\omega/\pi');ylabel('|H(z)|'); 

subplot(2,2,2);stem(omega/pi,20*log10(abs(h))); 
axis([0 1 -100 0]);xlabel('\omega/\pi');ylabel('增益.dB'); 
% =============直接法================================= 
wp1=0.45*pi; wp2=0.65*pi; 
ws1=0.3*pi; ws2=0.75*pi; 
Rp=1; Rs=40; 
Wp=[wp1/pi,wp2/pi]; Ws=[ws1/pi,ws2/pi]; 
[N,Wn]=cheb2ord(Wp,Ws,Rp,Rs); 
[B,A]=cheby2(N,Rs,Wn); 
[h,omega]=freqz(B,A,64); 

subplot(2,2,3);stem(omega/pi,abs(h)); 
xlabel('\omega/\pi');ylabel('|H(z)|'); 

subplot(2,2,4);stem(omega/pi,20*log10(abs(h))); 
axis([0 1 -100 0]);xlabel('\omega/\pi');ylabel('增益.dB'); 
%椭圆% 
% wp1=0.45*pi;wp2=0.65*pi;ws1=0.3*pi;ws2=0.75*pi;Rp=1;Rs=40 
% =============双线型变换法========================================= 
wp1=0.45*pi; wp2=0.65*pi; 
ws1=0.3*pi; ws2=0.75*pi; 
Rp=1; Rs=40; 
Wp1=tan(wp1/2); Wp2=tan(wp2/2); 
Ws1=tan(ws1/2); Ws2=tan(ws2/2); 
BW=Wp2-Wp1; W0=Wp1*Wp2; W00=sqrt(W0); 
WP=1; WS=WP*(W0^2-Ws1^2)/(Ws1*BW); 
[N,Wn]=ellipord(WP,WS,Rp,Rs,'s'); 
[B,A]=ellip(N,Rp,Rs,Wn,'s'); 
[BT,AT]=lp2bp(B,A,W00,BW); 
[num,den]=bilinear(BT,AT,0.5); 
[h,omega]=freqz(num,den,64); 

subplot(2,2,1);stem(omega/pi,abs(h));grid; 
xlabel('\omega/\pi');ylabel('|H(z)|'); 

subplot(2,2,2);stem(omega/pi,20*log10(abs(h)));grid; 
xlabel('\omega/\pi');ylabel('增益.dB'); 
% =============直接法================================= 
wp1=0.45*pi; wp2=0.65*pi; 
ws1=0.3*pi; ws2=0.75*pi; 
Rp=1; Rs=40; 
Wp=[wp1/pi,wp2/pi]; Ws=[ws1/pi,ws2/pi]; 
[N,Wn]=ellipord(Wp,Ws,Rp,Rs); 
[B,A]=ellip(N,Rp,Rs,Wn); 
[h,omega]=freqz(B,A,64); 

subplot(2,2,3);stem(omega/pi,abs(h));grid; 
xlabel('\omega/\pi');ylabel('|H(z)|'); 

subplot(2,2,4);stem(omega/pi,20*log10(abs(h)));grid; 
xlabel('\omega/\pi');ylabel('增益.dB');
参考资料:bdqi




matlab中的快速傅立叶变换函数fft - []2006-05-09居然花了两天的时间研究fft算法。绕了一大圈,发现matlab中的fft函数便能了结一切,其效果相当于几十行的C代码,足见matlab作为数学软件的异常强大。只是在用fft函数的时候,居然也花了很大的功夫去弄明白为什么对N个点的信号离散序列用fft()做计算的结果也是N个复数序列。后来才想起所谓的奈归斯特频率和采样频率的关系,也就是说,该N点复数序列只有前fix((N+1)/2)点有意义,后面的负频率在物理上毫无意义,而且这前半序列对应的是0,1,2……次谐波的极坐标表示,如c=a+bi,这就是傅立叶复指数形式表示时的常数c。 

%%%%%%%  傅立叶分解程序 %%%%%%%

function [u2]= dft(u)
[m,n]=size(u);
for k=1:m
    u2(k,:)=fft(u(k,:));
end

%%%%%%% 逆变换 %%%%%%%%%

function [xn,xK] = idfs(Xk,K) % xn为重建的信号,xK为k次谐波
N = length(Xk);
n = [0:1:N-1];              % row vector for n
k = [0:1:N-1];              % row vector for k
WN = exp(-j*2*pi/N);        % Wn factor
nk = n'*k;                  % creates a N by N matrix of nk values
WNnk = WN.^(-nk);           % IDFS matrix
xn = (Xk*WNnk)/N;           % row vector for IDFS values
if (K>0)
    xK =2* (Xk(K+1)*WNnk(:,K+1))/N;         

end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -