2009-11-15 19 views
5

¿Cómo puedo hacer un filtro FIR de paso bajo simple usando Matlab (sin usar la función incorporada)?¿Cómo hacer un filtro FIR simple usando Matlab?

Problema ejemplo:

Implement a FIR LPF with cut-off frequency 250Hz 

También puede ser necesario que, Muestreo PCM se da ...

intento de solución o de lo que ya sé:

x = [...] -> input signal 
A = 1; -> Since this is FIR 
B = [?????] 
y = filter(B, A, x) -> Output signal 

Que yo sepa, B debe contener los coeficientes para el filtro FIR. Pero; ¿Cómo calculo estos coeficientes dado que solo tengo la frecuencia de corte?

Respuesta

11

Lo más sencillo es un filtro "sinc con ventana":

fs = 44100; 
cutoff = 250; 
t = -256:256; % This will be a 513-tap filter 
r = 2*cutoff/fs; 
B = sinc(r*t).*r .* blackman(length(t))'; 
freqz(B); 

La longitud del filtro (ver t=...) controla la anchura de la banda de transición. cutoff es en este caso el punto de -6 dB. blackman es el nombre de una ventana popular. Puede consultar this página de Wikipedia para obtener más información sobre las funciones de la ventana. Básicamente tienen diferentes compensaciones entre el ancho de la banda de transición y el rechazo de la banda de stop.

+0

no puedo utilizar el construido en funciones de abeto como ya he indicado en la pregunta ... –

+0

lo siento por eso. Cambié mi respuesta – sellibitze

+0

Gracias :) Tendré que investigar sobre las funciones de la ventana ... –

0

Si no desea una forma diferente del espectro de amplitud, haga exactamente lo que sugería sellibitze, solo reemplace la función sinc con la parte real de la transformada de Fourier inversa de la respuesta de amplitud deseada (retardada para obtener un impulso simétrico causal respuesta).

0

Dado que los coeficientes de un filtro LTI son la respuesta de impulso en el dominio de tiempo, puede crear la respuesta de frecuencia en matlab especificando un vector de amplitud y Fase Vector, luego FFT inversa para obtener sus coeficientes, por ejemplo, soemthing como A = [ 1 .9 .8 .5 .2 .1 0], theta=[0 0 0 0 0 0 0], a continuación, a continuación, H=A.*exp(j*theta)coefs = ifft(H)

Cuestiones relacionadas