- Design the Bandpass FIR Filter: Given your specifications, you need to create a filter that stops frequencies below 100 Hz and above 4000 Hz, with a transition band from 100 Hz to 200 Hz on the low end. This can be achieved using the 'firpm' function in MATLAB. Please refer to the following documentation for more information: https://www.mathworks.com/help/signal/ref/firpm.html
- Apply the Filter to the WAV File: Once you have designed the filter, you can apply it to your downsampled WAV file using the filter function. Please refer to the following documentation for more information: https://www.mathworks.com/help/matlab/ref/filter.html
FIR filtering using firpm
18 次查看(过去 30 天)
显示 更早的评论
Hello, i've been asked to make a bandpass FIR filter, in order to filter a wav file. Firstly the wav file had saple rate Fs=20000 and i had to convert it at Fs=8000. I did that using these commands: [zeroA, Fs] = wavread('C:\Users\matlab\sounds\ZA');% to load file ZA.wav Z=zeroA(1:2.5:end);%to convert the sample rate. Now i have to design a band pass FIR filter using the command firpm, in order to eliminate the DC at 60hz and the high frequency noise. the filter features are: stopband: 0=<|F|<=100 Hz, transition zone: 100=<|F|<=200 Hz, passband: 200=<|F|<=4000 Hz. Then i have to filter the wav file whith this FIR filter. I woulb be grateful if you could help me. Thanks in advance.
0 个评论
回答(1 个)
Akshat Dalal
2024-8-22
Hi John,
You can use the 'firpm' function to create a bandpass FIR filter to eliminate DC at 60 Hz and high-frequency noise. The steps for designing the filter and applying it to a WAV file are given below:
I am also attaching a sample code for the above steps:
% Define filter specifications
Fs = 8000; % Sampling frequency
Fstop1 = 100; % First stopband edge
Fpass1 = 200; % First passband edge
Fpass2 = 4000; % Second passband edge
Fstop2 = 4100; % Second stopband edge
Astop1 = 60; % First stopband attenuation (dB)
Apass = 1; % Passband ripple (dB)
Astop2 = 60; % Second stopband attenuation (dB)
% Normalize frequencies to Nyquist frequency (Fs/2)
nyquist = Fs / 2;
frequencies = [0 Fstop1 Fpass1 Fpass2 Fstop2 nyquist] / nyquist;
amplitudes = [0 0 1 1 0 0];
weights = [10^(Astop1/20) 1 10^(Astop2/20)];
% Design the filter using firpm
n = 100; % Filter order (adjust as needed)
b = firpm(n, frequencies, amplitudes, weights);
% Load and downsample the WAV file
[zeroA, originalFs] = audioread('C:\Users\matlab\sounds\ZA.wav');
Z = zeroA(1:2.5:end); % Downsample to 8000 Hz
% Filter the signal
filtered_signal = filter(b, 1, Z);
% Save the filtered signal to a new WAV file
audiowrite('C:\Users\matlab\sounds\ZA_filtered.wav', filtered_signal, Fs);
Hope this helps!
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Digital Filter Design 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!