How to design a low pass filter with rectangular window?

88 ビュー (過去 30 日間)
Kalasagarreddi Kottakota
Kalasagarreddi Kottakota 2023 年 7 月 7 日
Hello all, Here, I have a lowpass filter with butter 15Hz cutoff freqeuncy. But I am looking for a low pass filter using rectangular window implimentation.
clear all;
% close all; clc;
%-------------------------------------------------------------
% System definition %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%-------------------------------------------------------------
fs=8192; % sampling frequency
dt = 1/fs; % sample time
T=3; % duration of the signal
Nt = T*fs; % total number of samples
t = 0:dt:T-dt; % time vector
% Source definition
f0 = 900; % initial angular speed in Hz
fT = 2700; % final angular speed in Hz
finst = linspace(f0,fT,Nt);
phi = 2*pi*cumsum(finst)*dt;
a1 = 45;
b1 = 5000;
c1 = 2;
c2 = 1.5;
d1 = 2+3*1j;
% Definition of envelop
int_phi0 = 3*pi/4;
A = d1+(a1 * exp(-b1 * (t - T/c1).^2 + 1j * int_phi0));
% Definition of source signal
q = A.'.*exp(1j*phi).';
filtorder =6; fc =15;%----------------------------------% fc-cutoff
[bcoeff,acoeff] = butter(filtorder,fc/fs*2);
Afilt = filtfilt(bcoeff,acoeff,q.*exp(-1j*phi).');
figure()
plot(t,q,'k')
Warning: Imaginary parts of complex X and/or Y arguments ignored.
hold on
plot(t,abs(Afilt),'r','LineWidth',2)
grid on; box on;
legend('q(t)','A(t)')
xlabel('s')
ylabel('Amp')
title('q(t) and A(t) - filtered')
set(gca,'FontSize',15)
xlim([1.2 1.8])

回答 (1 件)

N A POORNA CHANDRA
N A POORNA CHANDRA 2023 年 7 月 7 日
hi kalasagarreddi, here is the code for low pass filter with rectangular window
clear all;
clc;
fs = 8192; % Sampling frequency
dt = 1/fs; % Sample time
T = 3; % Duration of the signal
Nt = T*fs; % Total number of samples
t = 0:dt:T-dt; % Time vector
f0 = 900; % Initial angular speed in Hz
fT = 2700; % Final angular speed in Hz
finst = linspace(f0,fT,Nt);
phi = 2*pi*cumsum(finst)*dt;
a1 = 45;
b1 = 5000;
c1 = 2;
c2 = 1.5;
d1 = 2+3*1j;
%envelop
int_phi0 = 3*pi/4;
A = d1 + (a1 * exp(-b1 * (t - T/c1).^2 + 1j * int_phi0));
% source signal
q = A.'.*exp(1j*phi).';
% Low-pass filter using Kaiser window
fc = 15; % Cutoff frequency in Hz
normalized_fc = fc / (fs/2); % Normalized cutoff frequency
filter_order = 50; % Filter order
beta = kaiser(filter_order+1, 8); % Kaiser window with beta = 8
h = fir1(filter_order, normalized_fc, 'low', beta); % Filter coefficients
Afilt = filtfilt(h, 1, q.*exp(-1j*phi).');
figure();
plot(t, q, 'k');
hold on;
plot(t, abs(Afilt), 'r', 'LineWidth', 2);
grid on;
box on;
legend('q(t)', 'A(t)');
xlabel('s');
ylabel('Amp');
title('q(t) and A(t) - filtered');
set(gca,'FontSize',15);
xlim([1.2 1.8]);
  1 件のコメント
Kalasagarreddi Kottakota
Kalasagarreddi Kottakota 2023 年 7 月 7 日
Hi @N A POORNA CHANDRA, I think there is a issue with this type of filtering. The result it produces is not even near to the result, I have shown in my question.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeDigital Filtering についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by