📄 tfestplt.m
字号:
function tfestplt
%TFESTPLT Support file for TFESTGUI
% ADSP Toolbox: Version 2.0
% For use with "Analog and Digital Signal Processing", 2nd Ed.
% Published by PWS Publishing Co.
%
% Ashok Ambardar, EE Dept. MTU, Houghton, MI 49931, USA
% http://www.ee.mtu/faculty/akambard.html
% e-mail: akambard@mtu.edu
% Copyright (c) 1998
f = gcf;
ui = get(f,'userdata');
num_edt = ui(3);
den_edt = ui(5);
noise_edt = ui(9);
wind_pop = ui(12);
sect_edt = ui(14);
over_edt = ui(17);
exact_mag = ui(20);
est_mag = ui(21);
exact_phs = ui(23);
est_phs = ui(24);
%%%%%%%%%%
if get(ui(5),'userdata')==1
set(f,'currentaxes',ui(19));
zoom out,zoom reset
set(f,'currentaxes',ui(22));
zoom out,zoom reset
end
%%%%%%%%%%%
% Verify Transfer Function
hn_st = get(num_edt,'string');
if isempty(hn_st)
errordlg('Nothing entered.','Input Error');
return
end
problem=0;if hn_st(1)=='W',
hn_st(1)=[];evalin('base',[hn_st ';'],'problem=1;')
if problem==0, num=evalin('base',hn_st);
if isstr(num), num=eval(['[',num,']'],'[]');end
else
errordlg('MATLAB Syntax error.','Input Error');
return
end
else
num = eval(['[',hn_st,']'],'[]');
end
if isempty(num)
errordlg('MATLAB Syntax error.','Input Error');
return
end
hd_st = get(den_edt,'string');
if isempty(hd_st)
errordlg('Nothing entered.','Input Error');
return
end
problem=0;if hd_st(1)=='W',
hd_st(1)=[];evalin('base',[hd_st ';'],'problem=1;')
if problem==0, den=evalin('base',hd_st);
if isstr(den), den=eval(['[',den,']'],'[]');end
else
errordlg('MATLAB Syntax error.','Input Error');
return
end
else
den = eval(['[',hd_st,']'],'[]');
end
if isempty(den)
errordlg('MATLAB Syntax error.','Input Error');
return
end
if ~any(num) | ~any(den) % String of zeros
errordlg('Num and Den must have nonzero elements.','Input Error');
return;
end
while num(1) == 0
num(1) = [];
end
while den(1) == 0
den(1) = [];
end
set(ui(30),'userdata',num);
set(ui(31),'userdata',den);
f1 = 0:0.005:0.5;
w = 2*pi*f1;
he = freqz(num,den,w);
% z_w = exp(sqrt(-1)*w);
% he = polyval(num,z_w)./polyval(den,z_w);
noise_val = str2num(get(noise_edt,'string'));
rand_noise = randn(1,noise_val);
filt = filter(num,den,rand_noise);
m = str2num(get(sect_edt,'string'));
over_val = str2num(get(over_edt,'string'));
d = fix(over_val/100 * m);
k = fix((noise_val - d)/(m - d));
nw = 0.5 * m - (0:m-1);
wind_typ = get(wind_pop,'value');
if wind_typ == 1, % vonhann
win = 0.5+0.5*cos(2*pi*nw/m);
elseif wind_typ == 2, % Hamming
win = 0.54+0.46*cos(2*pi*nw/m);
elseif wind_typ == 3, % Bartlett
win = 1-2*abs(nw)/m;
elseif wind_typ == 4, % Blackman
win = 0.42+0.5*cos(2*pi*nw/m)+0.08*cos(4*pi*nw/m);
else % Rectangular
win = ones(1,m);
end
l = 1:m;
sxx = 0;
syx = 0;
for i = 1:k,
xw = rand_noise(l).*win;
yw = filt(l).*win;
l = l+(m-d);
xf = fft(xw);
yf = fft(yw);
sxx = sxx + xf .* conj(xf);
syx = syx + yf .* conj(xf);
end
tf = syx./sxx;
f = (0:m-1)/m;
hfir=real(ifft(tf));
set(ui(32),'userdata',hfir);
tf = freqz(hfir,1,w);
f=f1;
%i=find(f<=0.5);f=f(i);tf=tf(i);
set(exact_mag,'xdata',f1,'ydata',abs(he));
set(est_mag,'xdata',f,'ydata',abs(tf));
Mmax=max([abs(he) abs(tf)]);
set(ui(19),'xlim',[0 0.5],'ylim',[0 Mmax]);
th=180*angle(tf)/pi;th=th.*(abs(th)>1e-6);
the=180*angle(he)/pi;the=the.*(abs(the)>1e-6);
Pmin=min([th the]);Pmax=max([th the]);
set(exact_phs,'xdata',f1,'ydata',the);
set(est_phs,'xdata',f,'ydata',th);
set(ui(22),'xlim',[0 0.5],'ylim',[Pmin Pmax]);
set(ui(33),'userdata',[abs(he(:)) the(:) f1(:)]);
set(ui(34),'userdata',[abs(tf(:)) th(:) f(:)]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -