需要设计一个滤波器,提出300~400Hz的基波,不知道怎么设计,也不知道怎么在编辑器中应用
下面是错误的滤波器设计
function Hd = filter1
%FILTER1 Returns a discrete-time filter object.
% MATLAB Code
% Generated by MATLAB(R) 9.6 and Signal Processing Toolbox 8.2.
% Generated on: 10-Jun-2022 10:53:11
% Butterworth Lowpass filter designed using FDESIGN.LOWPASS.
% All frequency values are in kHz.
Fs = 10000; % Sampling Frequency
Fpass = 3200; % Passband Frequency
Fstop = 3600; % Stopband Frequency
Apass = 0.1; % Passband Ripple (dB)
Astop = 80; % Stopband Attenuation (dB)
match = 'stopband'; % Band to match exactly
% Construct an FDESIGN object and call its BUTTER method.
h = fdesign.lowpass(Fpass, Fstop, Apass, Astop, Fs);
Hd = design(h, 'butter', 'MatchExactly', match);
% [EOF]
不知道使用哪种滤波器,也不知道怎么在编辑器中应用
设计一个滤波器,提出300~400Hz的基波,并在编辑器中应用
提出基波,是指 提取其中的 300-400Hz 基波吗?可以用带通滤波器,即指定频率区间的信号通过,其它频率的信号被抑制(过滤)\
参考一下这个例程:
clear all
clc
%% 生成信号
srate =100; % 采样率
speriod = 1/srate; % 采样周期
dur=10; % 采样时间(持续时间)
t=0:speriod:dur-speriod;
freq0=5; % 信号频率
freq=10; % 信号频率
freq1=15; % 信号频率
signal=sin(2*pi*freq0.*t) + sin(2*pi*freq.*t) + sin(2*pi*freq1.*t); % 离散正弦信号
plot(t,signal);
%% 傅里叶变换
FFT = fft(signal); % 傅里叶变换,求频率
signalspec = abs(FFT); % 取绝对值,能量
fftpts = length(signal); % 信号长度
hpts=fftpts/2; % 将 FFT 结果按 FFT 中使用的点数的一半进行缩放
signalspec=signalspec/hpts; % fft后的振幅要乘以2除以N(信号长度)才是振动信号的真实振幅
binwidth = srate/fftpts; % 采样率除以信号长度
f = 0:binwidth:srate-binwidth;
%% 滤波
signa2 = signal;
fs =100;
fl = 8;
fh = 12;
% wp 设置截止频率(带通或者带阻)
wp=[fl/(fs/2) fh/(fs/2)];
N=128;
% b=fir1(n,Wn,Window ) n滤波阶数,Wn截止频率,0≤Wn≤1,Wn=1对应于采样频率的一半。
% 当设计带通和带阻滤波器时, Wn=[W1 W2],W1≤ω≤W2。
% Window — 窗函数。窗函数的长度应等于FIR滤波器系数个数,即阶数 n+1。
% b返回滤波器系数
b=fir1(N,wp,blackman(N+1)); % blackman(n)产生一个长度为n的布拉克曼窗
% 零相位数字滤波, If you use an all-zero filter (FIR), enter 1 for a.
signa2 = filtfilt(b,1,signa2);
%% 傅里叶变换
FFT = fft(signa2); % 傅里叶变换,求频率
signalspec1 = abs(FFT); % 取绝对值,能量
fftpts = length(signa2); % 信号长度
hpts=fftpts/2; % 将 FFT 结果按 FFT 中使用的点数的一半进行缩放
signalspec1=signalspec1/hpts; % fft后的振幅要乘以2除以N(信号长度)才是振动信号的真实振幅
binwidth = srate/fftpts; % 采样率除以信号长度
f = 0:binwidth:srate-binwidth;
%% 作图
subplot(411);
plot(signal);
ylim([-1,1]);
subplot(412);
plot(f((1:hpts)),signalspec(1:hpts));
subplot(413);
plot(signa2);
ylim([-1,1]);
subplot(414);
plot(f((1:hpts)),signalspec1(1:hpts));