Building Low-pass filter with Sinc function
Afficher commentaires plus anciens
Dear Community,
I am trying to build a low-pass filter by using a sinc function for my homework assignment. I then use convolution to later filter an audio sample with this filter. However, when I plot the filter in a bode plot it looks like a high-pass filter. Can anyone tell me what I'm doing wrong?
Thanks in advance!
%% Downsampled by K with low-pass filter
% Build filter
clear all; close all
K = 2;
fs = 1600;
N = 51;
n = (-(N-1)/2:1:(N-1)/2);
h = (1/K) * sinc((pi/K)*n);
% Plot frequency response filter
[H, H_vec] = fftFreq(h, fs, 1 );
figure
plot(H_vec*2*pi/fs, abs(H))
filt_tf =tf(h,1,1/fs,'Variable','z^-1');
figure
bode(filt_tf)
function [ X , f ] = fftFreq( data , fs, w )
% Number of FFT points
NFFT = length( data );
% calculate FFT
X = fft(data .* w);
% calculate frequency spacing
df = fs/NFFT;
% calculate unshifted frequency vector
f = (0:(NFFT-1)) * df;
end

1 commentaire
Bas Zweers
le 22 Sep 2020
You need to use fftshift for the correct frequency plot
Réponse acceptée
Plus de réponses (1)
Preston Pan
le 1 Juil 2022
Consider removing the pi in the argument of sinc. I get that scaling is necessary to respect the fourier scaling relationship and preserve unit gain in the passband but I think that would just be rect(K*t) <--> 1/|K| * sinc(f/K).
When I removed it and did
h=(1/K)*sinc(n/K)
the filter produced the desired behavior.
Catégories
En savoir plus sur Digital Filter Analysis dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!