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

📄 dfftplt.m

📁 trabajos en matlab para verificar son muy buenos
💻 M
字号:
function dfftplt(mode)
% DFFTPLT Support file for DFFTGUI


% 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


if nargin==0,mode=0;end

f = gcf;
ui = get(f,'userdata');
sample_edt = ui(24);
duration_txt = ui(30);
len_edt = ui(27);
axis_edt = ui(32);
range_edt = ui(52);
window_popup = ui(34);
beta_uis    = ui(62:63);
ripple_uis  = ui(64:65);
harris_uis  = ui(66:67);


ct_lines = ui(36:39);
ct_axes  = ui(35);
fft_axes = ui(40);
fft_line = ui(41:42);
fft_alias_axes = ui(43);
fft_alias_line = ui(44:45);
mag_lin    = ui(50);

%%%%%%%%
if get(ui(58),'userdata')==1
set(f,'currentaxes',ui(35));
zoom out,zoom reset
set(f,'currentaxes',ui(40));
zoom out,zoom reset
set(f,'currentaxes',ui(43));
zoom out,zoom reset
end
%%%%%%%%%



ele_mat = get(ui(1),'userdata');
[r,c] = size(ele_mat);
i = sqrt(-1);

% if no signal, get out.
if ~length(ele_mat),
   dtstem(fft_line,0,0);
   dtstem(fft_alias_line,0,0);
   dtstem(ct_lines(2:3),0,0);
   set(ct_lines(1),'xdata',0,'ydata',0);
   set(ct_lines(4),'xdata',0,'ydata',0);
   return;
end

axis_val = get(axis_edt,'value');
sample_freq = str2num(get(sample_edt,'string'));
len_val = eval(['[',get(len_edt,'string'),']']);
len=len_val(1);
if length(len_val)==2
zplen=len_val(2);
else
zplen=len;
end

duration = len/sample_freq;
set(duration_txt,'string',num2str(duration,5));

[new_y,t_vec,alias_y,n_vec,new_sig] = dfftgen;
len_disp = length(n_vec);
if len_disp > 20
   len_disp = 20;
end
disp_max = len_disp/sample_freq;

set(ct_lines(1),'xdata',t_vec,'ydata',new_y);
dtstem(ct_lines(2:3),n_vec,alias_y,1);
set(ct_lines(4),'xdata',t_vec,'ydata',new_sig);
set(ct_axes,'xlim',[0, disp_max]);
set(ui(54),'userdata',[new_y(:) new_sig(:) t_vec(:)]);
set(ui(55),'userdata',[alias_y(:) n_vec(:)]);

range = eval(['[',get(range_edt,'string'),']']);
beta = str2num(get(beta_uis(2),'string'));
ripple = str2num(get(ripple_uis(2),'string'));
harris = str2num(get(harris_uis(2),'string'));
window_type = get(window_popup,'value');

% compute N+1 point window and delete last sample
window_type=window_type-1;
wind_y = alias_y;
if any(window_type == [(1:3)]),
   win = winwind(window_type,len+1);

elseif window_type == 4,
   win = winwind(window_type,len+1,beta);

elseif window_type == 5, % Cheby
   if rem(len,1)
      errordlg('Chebyshev Window requires Even Length.','Input Error');
      return
   end
   win = winwind(window_type,len+1,ripple);

elseif window_type == 6,
   win = winwind(window_type,len+1,harris);
end

if window_type>0   
wind = win(1:len);
wind_y = wind.*alias_y;
end

% analog freq axis
if axis_val == 1
   freq_axis = (0:zplen-1);max_xaxis=zplen-1;
fft_tit = 'FFT Index   [k]';
elseif axis_val==2
   freq_axis = (0:zplen-1)/zplen;max_xaxis=(zplen-1)/zplen;
fft_tit = 'Digital Frequency   [F]';
elseif axis_val == 3
   freq_axis = (0:zplen-1)*sample_freq/zplen;
max_xaxis=(zplen-1)*sample_freq/zplen;
fft_tit = 'Analog Frequency   [Hz]';
end


fft_y = abs(fft(alias_y,zplen));
fft_y=fft_y.*(abs(fft_y)>1e-6);

fft_wind_y = abs(fft(wind_y,zplen));
fft_wind_y=fft_wind_y.*(abs(fft_wind_y)>1e-6);

%dB only if length > 128
   if get(mag_lin,'value')==2,

      if zplen < 128,
         errordlg('Need zeropadded length >= 128 for dB plot.','Input Error');
         set(mag_lin,'value',1);
         return;
      end
      if ~any(fft_y),
         errordlg('Cannot plot in dB. All FFT values are zero!.','Input Error');
         set(mag_lin,'value',1);
         return;
      end

      i=find(fft_y==0);
      fft_y(i)=100*eps*ones(size(i));
      i=find(fft_wind_y==0);
      fft_wind_y(i)=100*eps*ones(size(i));
      fft_y=20*log10(fft_y); fft_y=fft_y-max(fft_y);
      fft_wind_y=20*log10(fft_wind_y); fft_wind_y=fft_wind_y-max(fft_wind_y);

   end

   dtstem(fft_line,freq_axis,fft_y);
   dtstem(fft_alias_line,freq_axis,fft_wind_y);

fft_ind=0:zplen-1;
set(ui(56),'userdata',[fft_y(:) fft_wind_y(:) freq_axis(:)]);

set(fft_axes,'xlim',[0,max_xaxis]);set(fft_alias_axes,'xlim',[0,max_xaxis]);

set(get(fft_axes,'xlabel'),'string',fft_tit);

set(get(fft_alias_axes,'xlabel'),'string',fft_tit);



if get(mag_lin,'value')==1,
max_fft=max(fft_y);max_fftw=max(fft_wind_y);
   set(fft_axes,'ylim',[0,max_fft+(max_fft==0)]);
   set(fft_alias_axes,'ylim',[0,max_fftw+(max_fftw==0)]);
else
   set(fft_axes,'ylim',[max(fft_y)-80,0]);
   set(fft_alias_axes,'ylim',[max(fft_wind_y)-80,0]);
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -