Reconstruct FIR frequency response from the coefficients
You can try to window the filter with some window function, i.e. Gaussian, to get rid of small coefficients (taper them). Although it won't really work very well and you might really want to think about redesigning your filter - it's the best solution in my opinion. 

Here is an example for a bandpass filter, showing that it is not really working well and is affecting the frequency response. Everything is done in Python so presumably  it's meeting your requirements of not spending a single penny.



Code is as follows:

import numpy as np
import matplotlib.pyplot as plt

# Some sampling frequency
fs = 48000.0    
# Size of FFT analysis
N = 1024

def fir_freqz(b):
    # Get the frequency response
    X = np.fft.fft(b, N)
    # Take the magnitude
    Xm = np.abs(X)
    # Convert the magnitude to decibel scale
    Xdb = 20*np.log10(Xm/Xm.max())
    # Frequency vector
    f = np.arange(N)*fs/N        

    return Xdb, f

if __name__ == "__main__":

    # FIR filter coefficients
    b = np.array([-0.0159147603287189,  0.000745724267485,  
                   0.0404251831063147,  0.019042013872129,  
                  -0.0644535904607569, -0.054523709591490,
                   0.0787623967281351,  0.105430811100048,
                  -0.0645610841865355, -0.148306808873938,
                   0.0257418551415616,  0.166568575042643,
                   0.0257418551415616, -0.148306808873938,
                  -0.0645610841865355,  0.105430811100048,
                   0.0787623967281351, -0.054523709591490,
                  -0.0644535904607569,  0.019042013872129,
                   0.0404251831063147,  0.000745724267485,
                  -0.0159147603287189])

    # Window to be used
    win = np.kaiser(len(b), 15)
    # Windowed filter coefficients
    b_win = win*b

    # Get frequency response of filter
    Xdb, f = fir_freqz(b)
    # ... and it mirrored version
    Xdb_win, f = fir_freqz(b_win)


    # Plot the impulse response
    plt.subplot(211)
    plt.stem(b, linefmt='b-', markerfmt='bo', basefmt='k-', label='Orig. coeff.')
    plt.grid(True)
    plt.hold(True)
    plt.stem(b_win, linefmt='r-', markerfmt='ro', basefmt='k-', label='Windowed coeff.')
    plt.plot(win*b.max(), '--g', label='Window function')

    plt.title('Impulse reponse')
    plt.xlabel('Sample')
    plt.ylabel('Amplitude')
    plt.legend()

    # Plot the frequency response
    plt.subplot(212)
    plt.plot(f, Xdb, 'b', label='Orig. coeff.')
    plt.grid(True)
    plt.hold(True)
    plt.plot(f, Xdb_win, 'r', label='Windowed coeff.')

    plt.title('Frequency reponse')
    plt.xlabel('Frequency [Hz]')
    plt.ylabel('Amplitude [dB]')
    plt.xlim((0, fs/2)) # Set the frequency limit - being lazy
    plt.legend()

    plt.show()