不好意思,我没有找到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;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)