⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tfestplt.m

📁 ADSP TOOLBOX: Version 2.0 and gui m-files
💻 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 + -