帮忙编一个matlab的低通滤波器的程序

帮忙编一个matlab的低通滤波器的程序,第1张

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程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9401896.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存