134 lines · 4.0 KB · Objective-C
RawDownload
function f = make_filter (cycles, increment, atten, filename) # This works :# # f = make_filter (67, 128, 100.3) ;# f = make_filter (13, 128, 100.5) ;# f = make_filter (185, 4, 157.0) ;  #======================================================================= if nargin < 3,	error ('Try make_filter (12, 32, 88, "output.txt")') ;	endif if nargin < 4,	filename = 0 ;elseif (isstr (filename) == 0),	error ("Fourth parameter must be a file name.") ;	endif fudge_factor1 = 1.0 ;f1 = generate_filter (cycles, fudge_factor1, increment, atten) ;[stop_atten stop_band_start1 minus_3db] = measure_filter (f1, atten) ;printf ("    fudge_factor : %15.13f   stop_band_start : %15.13f   1\n", fudge_factor1, stop_band_start1) ; fudge_factor2 = 1.25 ;f2 = generate_filter (cycles, fudge_factor2, increment, atten) ;[stop_atten stop_band_start2 minus_3db] = measure_filter (f2, atten) ;printf ("    fudge_factor : %15.13f   stop_band_start : %15.13f   2\n", fudge_factor2, stop_band_start2) ; f = f1 ;fudge_factor = fudge_factor1 ;stop_band_start = stop_band_start1 ; while ((stop_band_start1 - stop_band_start2) > 0.0000000001)	if (stop_band_start1 < stop_band_start2)		printf ("stop_band_start1 < stop_band_start2\n") ;		break ;		endif 	fudge_factor = fudge_factor1 + (fudge_factor2 - fudge_factor1) / 2 ;	f = generate_filter (cycles, fudge_factor, increment, atten) ;	[stop_atten stop_band_start minus_3db] = measure_filter (f, atten) ;		if (stop_band_start > 1.0)		printf ("A %10.8f   %10.8f   %10.8f\n", fudge_factor1, fudge_factor, fudge_factor2) ;		continue ;		endif 	if (stop_band_start < 0.5 / increment)		f2 = f ;		stop_band_start2 = stop_band_start ;		fudge_factor2 = fudge_factor ;		choice = 2 ;	else		f1 = f ;		stop_band_start1 = stop_band_start ;		fudge_factor1 = fudge_factor ;		choice = 1 ;		endif 	printf ("    fudge_factor : %15.13f   stop_band_start : %15.13f   %d\n", fudge_factor, stop_band_start, choice) ;	endwhile printf ("\n") ; #-------------------------------------------------------------------------------# Grab only half the coefficients. N = length (f) ; f = increment * f' ; if rem (length (f), 2) == 0,	index = find (f == max (f)) ;	index = min (index) - 1 ;	half_f = f (index:length (f)) ;else	error ("Length should be even.") ;	endif trailing_zeros = 4 - rem (length (half_f), 4) ; #-------------------------------------------------------------------------------# Print analysis. printf ("# f = make_filter (%d, %d, %4.1f) ;\n", cycles, increment, atten) ;printf ("#   Coeff. count     : %d\n", N) ;printf ("#   Fudge factor     : %9.7f\n", fudge_factor) ;printf ("#   Pass band width  : %12.10f (should be %12.10f)\n", stop_band_start, 0.5 / increment) ;printf ("#   Stop band atten. : %5.2f dB\n", abs (stop_atten)) ;printf ("#   -3dB band Width  : %5.3f\n", 0.5 / increment / minus_3db) ;printf ("#   half length      : %d\n", length (half_f) + trailing_zeros) ;printf ("#   increment        : %d\n", increment) ; if filename,	file = fopen (filename, "w") ;	if file == 0,		str = sprintf ("Error, not able to open '%s'", filename)		error (str) ;		endif 	fprintf (file, "/*\n") ;	fprintf (file, "**  f = make_filter (%d, %d, %4.1f) ;\n", cycles, increment, atten) ;	fprintf (file, "**  Pass band width  : %9.7f (should be %9.7f)\n", stop_band_start, 0.5 / increment) ;	fprintf (file, "**  Stop band atten. : %5.2f dB\n", abs (stop_atten)) ;	fprintf (file, "**  -3dB band width  : %5.3f\n", 0.5 / increment / minus_3db) ;	fprintf (file, "**  half length      : %d\n", length (half_f)) ;	fprintf (file, "**  increment        : %d\n", increment) ;	fprintf (file, "*/\n\n") ; 	for val = half_f,		fprintf (file, "% 24.20e,\n", val) ;		endfor 	if trailing_zeros > 0,		for val = 2:trailing_zeros,			fprintf (file, " 0,\n") ;			endfor		fprintf (file, " 0\n") ;		endif 	fclose (file) ;	endif endfunction # Do not edit or modify anything in this comment block.# The arch-tag line is a file identity tag for the GNU Arch # revision control system.## arch-tag: 2f1ff4fa-ea6a-4e54-a5f8-dad55def9834 

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t