Hello everyone, I am trying to design a low pass decimator filter in MATLAB. I am supposed to decimate a signal sampled at 200MHz down to 10MHz. The signal bandwidth is 8 MHz and the signal spectra is centred at the sampling frequency. I began with the following code: --------------------------------------------------------------- Fs_adc = 200e6; % ADC Sampling Frequency Fpass1 = 4e6; % Passband Frequency Fstop1 = 5e6; % Stopband Frequency Astop1 = 80; % Aliasing Attenuation(dB) M1 = 20; % Decimation Factor TW1 = Fstop1 - Fpass1; % Transition Width (Hz) dlow1 = fdesign.decimator(M1, 'nyquist', M1, TW1, Astop1, Fs_adc); hlow1 = design(dlow1); % Lowpass prototype Hlpf1 = mfilt.firdecim(M1, hlow1.Numerator); fs_ds = dlow1.Fs_out; decimated_signal = filter(Hlpf1, sampled_signal); --------------------------------------------------------------- This gave me a Direct Form FIR Polyphase Decimator. Now when I look at the Hbpf1 variable, it shows me 1005 coefficients (Hbpf1.Numerator variable). Considering I have to implement this filter on FPGA, this appears to be a very huge number for the taps. A little reading on Polyphase FIR filters indicated me that the total number of taps *per every sub-filter* in a polyphase structure should be ceil(1005/M1) = 50 and so I would have M1=20 such filters. Would this mean that implementing the above filter in polyphase form has reduced the number of taps? I still have 1005 different coefficients in the polyphase structure. Or is it that since I would only be using 50 taps at a time, I only need 50 multipliers in the hardware which should be time-multiplexed with 20 sets of 50 coefficients, hence saving the hardware on a XILINX Virtex5 FPGA. Further the rate of time-multiplexing the filter coefficients is 10 MHz. Or if this is not the good way to decimate the signal while also achieving a good quality of output signal, kindly let me know other ideas. I have also tried CIC-Compensator-HalfBand combination but I really liked the response of the Polyphase FIR Decimator. Or should I try more than one stage of polyphase FIR Decimator (say, decimate by 5 followed by decimate by 4) to further reduce the number of taps? Regards, vizziee.
How to interpret polyphase coefficients generated in MATLAB
Started by ●July 6, 2009
Reply by ●July 6, 20092009-07-06
vizziee wrote:> Hello everyone, > > I am trying to design a low pass decimator filter in MATLAB."MATLAB does all thinking for us" (TM)> I am > supposed to decimate a signal sampled at 200MHz down to 10MHz. The > signal bandwidth is 8 MHz and the signal spectra is centred at the > sampling frequency.How do you manage 8 MHz of bandwidth at 10 MHz sampling rate? VLV
Reply by ●July 6, 20092009-07-06
> be ceil(1005/M1) = 50 and so I would have M1=20 such filters. WouldA correction here: ceil(1005/M1) = 51. Regards, vizziee.
Reply by ●July 6, 20092009-07-06
On Jul 6, 11:50�am, Vladimir Vassilevsky <antispam_bo...@hotmail.com> wrote:> > I am > > supposed to decimate a signal sampled at 200MHz down to 10MHz. The > > signal bandwidth is 8 MHz and the signal spectra is centred at the > > sampling frequency. > > How do you manage 8 MHz of bandwidth at 10 MHz sampling rate? > > VLVThanks VLV for your reply. The sampling rate is 200MHz. So an 8MHz BW signal occupies -pi/25 to pi/25 frequency range. When I downsample this signal by 20, the signal occupies -4pi/5 to 4pi/5 frequency range at 10MHz. Is there something that I am missing here? vizziee
Reply by ●July 6, 20092009-07-06
vizziee wrote:> On Jul 6, 11:50 am, Vladimir Vassilevsky <antispam_bo...@hotmail.com> > wrote: >>> I am >>> supposed to decimate a signal sampled at 200MHz down to 10MHz. The >>> signal bandwidth is 8 MHz and the signal spectra is centred at the >>> sampling frequency. >> How do you manage 8 MHz of bandwidth at 10 MHz sampling rate? >> >> VLV > > Thanks VLV for your reply. > > The sampling rate is 200MHz. So an 8MHz BW signal occupies -pi/25 to > pi/25 frequency range. When I downsample this signal by 20, the signal > occupies -4pi/5 to 4pi/5 frequency range at 10MHz. Is there something > that I am missing here?Yes. The bandwidth is not changed by downsampling. The 8 MHz signal lies between 196 and 204 MHz when sampled and between 6 and 14 MHz after downsampling. Jerry -- Engineering is the art of making what you want from things you can get. �����������������������������������������������������������������������
Reply by ●July 6, 20092009-07-06
> Yes. The bandwidth is not changed by downsampling. The 8 MHz signal lies > between 196 and 204 MHz when sampled and between 6 and 14 MHz after > downsampling. > > JerryThanks Jerry. I think I did a mistake in my description. The signal bandwidth is 8 MHz and the signal spectrum is centred at zero rather than the sampling frequency. So, initially the signal lies between -4MHz and 4MHz in the -100MHz to 100MHz range of sampled signal spectrum. So, after downsampling by 20, the spectrum should lie between -4MHz and 4MHz in the -5MHz to 5MHz range of downsampled signal spectrum. Does this make sense now? Regards, vizziee.
Reply by ●July 6, 20092009-07-06
vizziee wrote:>> Yes. The bandwidth is not changed by downsampling. The 8 MHz signal lies >> between 196 and 204 MHz when sampled and between 6 and 14 MHz after >> downsampling. >> >> Jerry > > Thanks Jerry. I think I did a mistake in my description. The signal > bandwidth is 8 MHz and the signal spectrum is centred at zero rather > than the sampling frequency. > So, initially the signal lies between -4MHz and 4MHz in the -100MHz to > 100MHz range of sampled signal spectrum. So, after downsampling by 20, > the spectrum should lie between -4MHz and 4MHz in the -5MHz to 5MHz > range of downsampled signal spectrum. Does this make sense now?That part does. Are you complex shifting? If not, how do you separate positive from negative frequencies? The usual way, a sample raye exceeding twice the bandwidth, evidently doesn't apply. Jerry -- Engineering is the art of making what you want from things you can get. �����������������������������������������������������������������������
Reply by ●July 6, 20092009-07-06
> That part does. Are you complex shifting? If not, how do you separate > positive from negative frequencies? The usual way, a sample raye > exceeding twice the bandwidth, evidently doesn't apply.The signal is symmetric in spectrum. So the entire information is available in one half of the spectrum. So coming to my original question, how should I interpret the polyphase coefficients. Regards, vizziee.
Reply by ●July 6, 20092009-07-06
>>A little reading on Polyphase FIR filters indicated me that the total >>number of taps *per every sub-filter* in a polyphase structure should >>be ceil(1005/M1) = 50 and so I would have M1=20 such filters. Would >>this mean that implementing the above filter in polyphase form has >>reduced the number of taps? I still have 1005 different coefficients >>in the polyphase structure.The polyphase implementation will certainly reduce the hardware complexity. But polyphase length of 51 is still very demanding in terms of both power and area consumption. You can read this document : http://www.altera.com/literature/hb/stx/ch_7_vol_2.pdf starting from page 17. It really helped me to understand how polyphase filters are implemented in FPGAs. You can also use MATLAB generatehdl function, provided that You have the corresponding license, and examine the HDL code generated for the mfilt object. Matlab generates quite readable code for the polyphase interpolators (some manual tuning is necessary, of course), and I believe that the same applies to decimators as well. -- Alexander
Reply by ●July 6, 20092009-07-06
On Jul 6, 3:49 pm, vizziee <vizz...@gmail.com> wrote:> > That part does. Are you complex shifting? If not, how do you separate > > positive from negative frequencies? The usual way, a sample raye > > exceeding twice the bandwidth, evidently doesn't apply. > > The signal is symmetric in spectrum. So the entire information is > available in one half of the spectrum. > > So coming to my original question, how should I interpret the > polyphase coefficients. > > Regards, > vizziee.It has been quite a while since I have designed a poly phase fir filter, but if you are going to decimate by 20, don't you need a multiple of 20 coefficients? Otherwise you can't distribute the taps between the phases. A poly phase filter does not reduce the number of taps. It simply takes advantage of the fact that when you decimate the output of the FIR filter, you only need to calculate the outputs that you will be retaining. This reduces the number of calculations performed. If you had 100 taps and the filter produced an output for every input, you would perform 100 multiplies and 99 adds for each output point. The poly phase filter calculates the filter output in pieces so that for a 20x decimation the filter only does 5 multiplies and 4 adds for each input value, but still does 100 multiplies and 99 adds (counting the combining of the phases) for each output. So I don't see how you can use 1005 coefficients in a 20x polyphase filter. I may be missing something, but I don't think so. Also note that for most FIR filters you don't need to store the full number of coefficients. I don't recall the requirement to make this true, but often the coefficients are symmetrical so that coef(0) = coef (n-1). This can be true even if you have an odd number of taps, the middle coefficient is not used twice. To picture what is happening in a poly phase filter, try drawing a diagram of some sort showing which inputs are multiplied by which coefficients and how the phases are added to produce an output. When I did my first poly phase filter I didn't have this fully in hand and I mixed up the phases. The result was not pretty and hard to debug. Rick