
clc;clear all;
%归一化模拟切比雪夫I型低通滤波器的设计
Wp=2pi1000;Ws=2pi1500;rp=3;rs=30;%设计滤波器的参数
wp=1;ws=Ws/Wp; %频带变换得到归一化滤波器
[N,wc]=cheb1ord(wp,ws,rp,rs,'s'); %计算滤波器阶数和3dB截止频率
[z,p,k]=cheb1ap(N,rp); %计算归一化滤波器的零极点
[b,a]=zp2tf(z,p,k); %计算归一化滤波器系统函数的系数
w0=0:005pi:2pi;
[h0,w0]=freqs(b,a,w0); %求频率响应
figure(1)
plot(w0,20log10(abs(h0)),'k');
title('归一化模拟且比雪夫I型低通滤波器');
xlabel('频率f/Hz');ylabel('幅度/dB');grid;
%一般低通切比雪夫低通滤波器的设计
[B,A]=lp2lp(b,a,Wp); %将归一化滤波器转换为一般模拟滤波器
w1=0:2pi100:2pi30000;
[h1,w1]=freqs(B,A,w1);
figure(2)
plot(w1/(2pi),20log10(abs(h1)),'k');
title('一般模拟且比雪夫I型低通滤波器');
xlabel('频率f/Hz');ylabel('幅度/dB');grid;
%冲激响应不变法设计低通巴特沃斯数字滤波器
Fs=10000; %采样频率
Wp1=Wp/Fs;Ws1=Ws/Fs;
rp1=3;rs1=30; %设计滤波器的参数
[N1,Wn]=cheb1ord(Wp,Ws,rp1,rs1,'s') %计算滤波器阶数
[b1,a1]=cheby1(N1,rp1,Wn,'s'); %样本AF的系数函数的分子分母系数
[bz,az]=impinvar(b1,a1,Fs); %冲激响应不变法从AF到DF变换
[C1,B1,A1]=dir2par(bz,az) %直接形式转换为并联型
w2=[Wp1,Ws1]; %数字临界频率
[H,f]=freqz(bz,az); %绘制数字滤波器的幅频特性和相频特性
[db,mag,pha,grd,f]=freqz_m(bz,az); %扩展函数检验滤波器的其他特性
figure(3)
plot(f/pi,db,'k');
title('冲激响应不变法设计低通切比雪夫I型数字滤波器');
xlabel('角频率w/pi');ylabel('振幅/dB');
axis([0,035,-30,5]);grid;
%用设计好的滤波器对信号进滤波处理
figure(4)
f1=500;f2=4000; %输入信号的频率
N=100; %数据长度
dt=1/Fs;n=0:N-1;t=ndt; %采样间隔和时间序列
x=sin(2pif1t)+05cos(2pif2t); %输入信号
subplot(2,1,1),plot(t,x),title('输入信号');
y=filtfilt(bz,az,x); %用滤波器进行滤波处理
y1=filter(bz,az,x); %进行滤波处理
subplot(2,1,2),plot(t,y,t,y1,':'),title('输出信号');xlabel('时间/s');
legend('filtfilt','filter') %加图例
freqz_mm文件
function[db,mag,pha,grd,w]=freqz_m(b,a)
[H,w]=freqz(b,a,1000,'whole');
mag=abs(H);
db=20log10((mag+eps)/max(mag));
pha=angle(H);
grd=grpdelay(pha);
dir2parm文件
function [C,B,A] = dir2par(b,a)
M=length(b);N=length(a);
[r1,p1,C]=residuez(b,a);
p=cplxpair(p1,10000000eps);
I=cplxcomp(p1,p);
r=r1(I);
K=floor(N/2);B=zeros(K,2);A=zeros(K,3);
if K2==N;
for i=1:2:N-2
Brow=r(i:1:i+1,:);
Arow=p(i:1:i+1,:);
[Brow,Arow]=residuez(Brow,Arow,[]);
B(fix((i+1)/2),:)=real(Brow);
A(fix((i+1)/2),:)=real(Arow);
end
[Brow,Arow]=residuez(r(N-1),p(N-1),[]);
B(K,:)=[real(Brow) 0];A(K,:)=[real(Arow) 0];
else
for i=1:2:N-1
Brow=r(i:1:i+1,:);
Arow=p(i:1:i+1,:);
[Brow,Arow]=residuez(Brow,Arow,[]);
B(fix((i+1)/2),:)=real(Brow);
A(fix((i+1)/2),:)=real(Arow);
end
end
cplxcompm文件
function I=cplxcomp(p1,p2)
I=[];
for j=1:1:length(p2)
for i=1:1:length(p1)
if(abs(p1(i)-p2(j))<00001)
I=[I,i];
end
end
end
I=I';
是这样的,如果你再程序开始添加holdon这个的画,表示这之后的每一次作图都保留以前的图,这样就可以连续画图了
反之holdoff,表示打开这个之后,每次画图,删除以前的图,
在MATLAB中,可以通过创建一个以m为文件扩展名的脚本文件来编写程序。下面是一个简单的例子,展示了如何编写一个名为roadm的MATLAB程序:
打开MATLAB编辑器或任何文本编辑器。
创建一个新文件,并将其命名为roadm,确保文件扩展名为m。
在roadm文件中输入以下MATLAB代码:
% roadm - 一个简单的MATLAB程序示例% 清空命令窗口和工作空间
clc;
clear;
% 输入用户姓名
name = input('请输入您的姓名: ', 's');
% 输出欢迎消息
fprintf('欢迎来到MATLAB的世界, %s!\n', name);
% 计算两个数的和
a = input('请输入第一个数: ');
b = input('请输入第二个数: ');
sum = a + b;
% 输出计算结果
fprintf('两个数的和是: %d\n', sum);
以上代码演示了一个简单的MATLAB程序,其中包含了输入、输出和简单的计算 *** 作。程序首先清空了命令窗口和工作空间,然后通过input函数获取用户输入的姓名和两个数,通过fprintf函数输出欢迎消息和计算结果。
注意:MATLAB中的注释使用%符号,用于注释掉代码中的一行或多行。注释可以帮助解释代码的作用和功能。
保存roadm文件后,您可以在MATLAB命令窗口中运行这个程序,通过输入road命令即可执行。程序会提示您输入姓名和两个数,然后输出欢迎消息和计算结果。您可以根据自己的需求和逻辑在roadm文件中编写更复杂的MATLAB程序。
以上就是关于帮忙编一个matlab的低通滤波器的程序全部的内容,包括:帮忙编一个matlab的低通滤波器的程序、matlab程序画图、MATLAB如何编写road.m程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)