% Script to construct a first derivative approximation filter % using FFT methods. clear match = 170; transit = 84; nfilt = 25; alpha = 6.2; % FFT properties blksize = 1000; nhfilt = floor(nfilt/2); % Build the ideal spectrum for a derivative operator spect = zeros(1,blksize); for term=2:blksize/2 ideal(term)=((term-1)*pi*2/blksize); spect(term) = -j * ideal(term); spect(blksize+2-term)=-spect(term); end % Window to desired spectrum band wind = platcos(match,transit,blksize); spect = spect .* wind; %figure(1) %plot(1:1000,abs(spect(1:1000)),'k') %title('Spectrum to fit') %pause(1.5) % Design filter seq = real(ifft(spect)); filter(1:nhfilt)=seq(blksize+1-nhfilt:blksize); filter(nhfilt+1:nfilt)=seq(1:nhfilt+1); wind = kaiser(nfilt,alpha); filter = filter' .* wind % Verify design [actual,w] = freqz(filter,[1],500); actual = abs(actual'); figure(1) plot(1:200,ideal(1:200),'g',1:500,actual(1:500),'b') title('Compare designed filter to ideal') %figure(2) %diff=actual-ideal; %plot(1:100,diff(1:100),'r') %title('Fit error')