## [191c94]: fourier / plotfftreal.m  Maximize  Restore  History

### 141 lines (117 with data), 4.0 kB

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139``` ```function plotfftreal(coef,varargin) %PLOTFFTREAL Plot the output from FFTREAL % Usage: plotfftreal(coef); % plotfftreal(coef,fs); % % `plotfftreal(coef)` plots the output from the |fftreal| function. The % frequency axis will use normalized frequencies between 0 and 1 (the % Nyquist frequency). It is assumed that the length of the original % transform was even. % % `plotfftreal(coef,fs)` does the same for the |fftreal| of a signal % sampled at a sampling rate of *fs* Hz. % % `plotfftreal(coef,fs,dynrange)` additionally limits the dynamic range of the % plot. See the description of the `'dynrange'` parameter below. % % `plotfftreal` accepts the following optional arguments: % % 'dynrange',r Limit the dynamical range to `r` by using a colormap in % the interval `[chigh-r,chigh]`, where `chigh` is the highest % value in the plot. The default value of `[]` means to not % limit the dynamical range. % % 'db' Apply \$20\cdot \log_{10}\$ to the coefficients. This makes % it possible to see very weak phenomena, but it might show % too much noise. This is the default. % % 'dbsq' Apply \$10\cdot \log_{10}\$ to the coefficients. Same as the % `'db'` option, but assumes that the input is already squared. % % 'lin' Show the coefficients on a linear scale. This will % display the raw input without any modifications. Only works for % real-valued input. % % 'linsq' Show the square of the coefficients on a linear scale. % % 'linabs' Show the absolute value of the coefficients on a linear % scale. % % 'N',N Specify the transform length *N*. Use this if you are % unsure if the original input signal was of even length. % % 'dim',dim If `coef` is multidimensional, `dim` indicates the % dimension along which are the individual channels oriented. % Value 1 indicates columns, value 2 rows. % % % In addition to these parameters, `plotfftreal` accepts any of the flags % from |normalize|. The coefficients will be normalized as specified % before plotting. % % See also: plotfft, fftreal if nargin<1 error('%s: Too few input parameters.',upper(mfilename)); end; definput.import={'ltfattranslate','normalize'}; definput.importdefaults={'null'}; definput.flags.log={'db','dbsq','lin','linsq','linabs'}; definput.keyvals.fs=[]; definput.keyvals.dynrange=[]; definput.keyvals.opts={}; definput.keyvals.N=[]; definput.keyvals.dim=[]; [flags,kv,fs]=ltfatarghelper({'fs','dynrange'},definput,varargin); % if ~isvector(coef) % error('%s: Input is multidimensional.',upper(mfilename)); % end; [coef,~,Lc]=assert_sigreshape_pre(coef,[],kv.dim,upper(mfilename)); N=kv.N; if isempty(N) N=2*(Lc-1); end N2=floor(N/2)+1; if N2~=Lc error('%s: Size mismatch.',upper(mfilename)); end; coef=normalize(coef,flags.norm); % Apply transformation to coefficients. if flags.do_db coef=20*log10(abs(coef)+realmin); end; if flags.do_dbsq coef=10*log10(abs(coef)+realmin); end; if flags.do_linsq coef=abs(coef).^2; end; if flags.do_linabs coef=abs(coef); end; if flags.do_lin if ~isreal(coef) error(['Complex valued input cannot be plotted using the "lin" flag.',... 'Please use the "linsq" or "linabs" flag.']); end; end; % 'dynrange' parameter is handled by thresholding the coefficients. if ~isempty(kv.dynrange) maxclim=max(coef(:)); coef(coef