Building Low-pass filter with Sinc function
Mostra commenti meno recenti
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 Commento
Bas Zweers
il 22 Set 2020
You need to use fftshift for the correct frequency plot
Risposta accettata
Più risposte (1)
Preston Pan
il 1 Lug 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.
Categorie
Scopri di più su Digital Filter Analysis in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!