matlab中传递函数拟合怎么做?有用过infreqs命令的么

matlab中传递函数拟合怎么做?有用过infreqs命令的么,第1张

不好意思,我没有找到infreqs这条命令,我猜想应该是自定义的函数吧。

你说的传递函数拟合是什么意思,我猜想是拟合吧。

拟合就是根据已有的数据(也许是数组 x, y,的实际数据,例如1000个对应的xy),然后根据算法找到一个函数,使得y=f(x),f 就是对应关系可以是很多种,可以是e的x次方型的,就是指数型的,或是一阶或高阶多项式的对应关系。通过数据,返回原始函数的方法就是拟合了。

在Matlab里可以用曲面拟合工具箱,英文就是,curve fitting toolbox。

在主界面点击,cftool, 就会出现工具窗。我的是英文版的,你看下。

这个工具箱就几个按键,输入数据,选择拟合方式,出结果,就画出来了。你可以试试。

希望解决了你的疑惑,谢谢。

clear; %清除变量

close all %关闭所有窗口

b=1000;a=[1,1000]; %模拟滤波器分子分母的系数

w=[0:10002pi]; %定义频带宽度

[hf,w]=freqs(b,a,w); %把频域转化到复频域

subplot(2,3,1) %分割窗口画图

plot(w/2/pi,abs(hf)); %画滤波器的幅频特性

title('模拟滤波器的幅频特性') %给这个图加个标题

grid on %打开网格

fs0=[1000,500]; %定义两个变化频率

for m=1:2

fs=fs0(m)

[d,c]=impinvar(b,a,fs) %脉冲响应不变法求滤波器系数

[f,e]=bilinear(b,a,fs) %双线性变化法求滤波器系数

wd=[0:512]pi/512; %频率归一化

hw1=freqz(d,c,wd); %求脉冲响应不变法的数字滤波器的频率分量

hw2=freqz(f,e,wd); %求双线性变化法的数字滤波器的频率分量

subplot(2,3,2); %分割窗口画图

plot(wd/pi,abs(hw1)/abs(hw1(1))); %画滤波器的幅频特性

hold on %保持图形不清除

grid on %打开网格

title('脉冲响应不变法'); %给这个图加个标题

subplot(2,3,3)%分割窗口画图

plot(wd/pi,abs(hw2)/abs(hw2(1))) %画滤波器的幅频特性

hold on; %保持图形不清除

title('双线性变化法'); %给这个图加个标题

end

>> %%生成50hz和100hz叠加的正弦波

Fs=1000;

T=1/Fs;

L=200;

t=(0:L-1)T;

y1=sin(2pi50t);

y2=sin(2pi100t);

y=y1+y2+randn(size(t));

subplot(5,1,1);

plot(t,y);

%%快速傅里叶变换

N=2^nextpow2(L);

Y=fft(y,N)/L;

f=Fs/2linspace(0,1,N/2+1);

subplot(5,1,2);

plot(f,2abs(Y(1:N/2+1)));

%%滤波器的设计 wp通带截止频率 ws阻带截止频率 rp通带最大衰减 as阻带最小衰减

%%滤掉100hz的信号

wp=250/Fs;

ws=280/Fs;

rp=1;

as=30;

[N,wc]=buttord(wp,ws,rp,as);

[b,a]=butter(N,wc);

[H,w]=freqz(b,a);

z=filter(b,a,y);

subplot(5,1,3);

plot(w,abs(H));

subplot(5,1,4);

plot(t,z);

%%对滤波后得到的正弦波进行快速傅里叶变换

N1=2^nextpow2(L);

Y1=fft(z,N1)/L;

f1=Fs/2linspace(0,1,N1/2+1);

subplot(5,1,5);

plot(f1,2abs(Y1(1:N1/2+1)));

>> %%生成50hz和100hz叠加的正弦波

Fs=1000;

T=1/Fs;

L=200;

t=(0:L-1)T;

y1=sin(2pi50t);

y2=sin(2pi100t);

y=y1+y2+randn(size(t));

subplot(5,1,1);

plot(t,y);

%%快速傅里叶变换

N=2^nextpow2(L);

Y=fft(y,N)/L;

f=Fs/2linspace(0,1,N/2+1);

subplot(5,1,2);

plot(f,2abs(Y(1:N/2+1)));

%%滤波器的设计 wp通带截止频率 ws阻带截止频率 rp通带最大衰减 as阻带最小衰减

%%滤掉100hz的信号

wp=250/Fs;

ws=280/Fs;

rp=1;

as=10;

[N,wc]=buttord(wp,ws,rp,as);

[b,a]=butter(N,wc);

[H,w]=freqz(b,a);

z=filter(b,a,y);

subplot(5,1,3);

plot(w,abs(H));

subplot(5,1,4);

plot(t,z);

%%对滤波后得到的正弦波进行快速傅里叶变换

N1=2^nextpow2(L);

Y1=fft(z,N1)/L;

f1=Fs/2linspace(0,1,N1/2+1);

subplot(5,1,5);

plot(f1,2abs(Y1(1:N1/2+1)));

>> %%生成50hz和100hz叠加的正弦波

Fs=1000;

T=1/Fs;

L=200;

t=(0:L-1)T;

y1=sin(2pi50t);

y2=sin(2pi100t);

y=y1+y2+randn(size(t));

subplot(5,1,1);

plot(t,y);

%%快速傅里叶变换

N=2^nextpow2(L);

Y=fft(y,N)/L;

f=Fs/2linspace(0,1,N/2+1);

subplot(5,1,2);

plot(f,2abs(Y(1:N/2+1)));

%%滤波器的设计 wp通带截止频率 ws阻带截止频率 rp通带最大衰减 as阻带最小衰减

%%滤掉100hz的信号

wp=250/Fs;

ws=280/Fs;

rp=1;

as=50;

[N,wc]=buttord(wp,ws,rp,as);

[b,a]=butter(N,wc);

[H,w]=freqz(b,a);

z=filter(b,a,y);

subplot(5,1,3);

plot(w,abs(H));

subplot(5,1,4);

plot(t,z);

%%对滤波后得到的正弦波进行快速傅里叶变换

N1=2^nextpow2(L);

Y1=fft(z,N1)/L;

f1=Fs/2linspace(0,1,N1/2+1);

subplot(5,1,5);

plot(f1,2abs(Y1(1:N1/2+1)));

>>

>> %%生成50hz和100hz叠加的正弦波

Fs=1000;

T=1/Fs;

L=200;

t=(0:L-1)T;

y1=sin(2pi50t);

y2=sin(2pi100t);

y=y1+y2+randn(size(t));

subplot(5,1,1);

plot(t,y);

%%快速傅里叶变换

N=2^nextpow2(L);

Y=fft(y,N)/L;

f=Fs/2linspace(0,1,N/2+1);

subplot(5,1,2);

plot(f,2abs(Y(1:N/2+1)));

%%滤波器的设计 wp通带截止频率 ws阻带截止频率 rp通带最大衰减 as阻带最小衰减

%%滤掉100hz的信号

wp=250/Fs;

ws=280/Fs;

rp=1;

as=10;

[N,wc]=buttord(wp,ws,rp,as);

[b,a]=butter(N,wc);

[H,w]=freqz(b,a);

z=filter(b,a,y);

subplot(5,1,3);

plot(w,abs(H));

subplot(5,1,4);

plot(t,z);

%%对滤波后得到的正弦波进行快速傅里叶变换

N1=2^nextpow2(L);

Y1=fft(z,N1)/L;

f1=Fs/2linspace(0,1,N1/2+1);

subplot(5,1,5);

plot(f1,2abs(Y1(1:N1/2+1)));

>>

wp=02pi;

ws=03pi;

Rp=1;

As=15;

[N,wn]=cheb1ord(wp,ws,Rp,As,'s')%计算N值

[B,A]=cheby1(N,Rp,wn,'s');%计算模拟滤波器的系统函数的分子,分母多项式系数

[Ha,w]=freqs(B,A);%计算模拟滤波器的幅频特性

Hb=20log10(abs(Ha));

w1=w/pi;

subplot(2,3,1);

plot(w1,Hb);axis([0 1 -30 10]);

[ha,x,t]=impulse(B,A)%计算模拟滤波器的单位冲击响应

subplot(2,3,2);

plot(t,ha)

fs=50

[bz,az]=impinvar(B,A)%用冲击响应不变法计算数字滤波器系数

[Hz,w]=freqz(bz,az)%计算数字滤波器的幅频特性

subplot(2,3,3);

w2=w/pi;

plot(w2,20log10(abs(Hz)))

axis([0 1 -30 10]);

xlabel('{\omega}(rad)');

ylabel('幅度(dB)');

title('低通');

[hn,t]=impz(bz,az,fs)%计算数字滤波器的单位抽样响应

subplot(2,3,4);

stem(hn)

[num,nun]=iirlp2hp(bz,az,02,02); %转高通

[hw,wd]=freqz(num,nun);

subplot(235)

plot(wd/pi,20log10(abs(hw)));axis([0 1 -80 10]);grid on;

xlabel('{\omega}(rad)');

ylabel('幅度(dB)');

title('高通');

hold off

[hw,t]=impz(num,nun,fs)%计算数字滤波器的单位抽样响应

subplot(2,3,6);

stem(hw)

就能出来了

加个循环行不行?

for N=1:6

[z,p,k]=buttap(N);

[b,a]=zp2tf(z,p,k);

[H,w]=freqs(b,a);

magH2=abs(H)^2;

hold on;

figure(1)

plot(w,magH2);

xlabel('w/wc');

ylabel('|H(jw)|^2');

title('Butterword滤波器幅频特性');

grid on;

end

figure(2)

hold on;

[z,p,k]=butter(N,02);

zplane(z,p);

xlabel('实部');ylabel('虚部');grid on;

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

原文地址: http://outofmemory.cn/langs/12176702.html

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

发表评论

登录后才能评论

评论列表(0条)

保存