[已解决] matlab高通滤波器出错

[复制链接]
scj12345 发表于 2023-2-9 13:43:03
设计了一个3dB,截止频率4bpm的高通滤波器
报错:出错 gaotong (line 23)
b  = firpm(N, Fo, Ao, W, {dens});

版本是2017b

  1. function Hd = gaotong
  2. %GAOTONG Returns a discrete-time filter object.

  3. % MATLAB Code
  4. % Generated by MATLAB(R) 9.3 and Signal Processing Toolbox 7.5.
  5. % Generated on: 09-Feb-2023 13:12:43

  6. % Equiripple FIR Lowpass filter designed using the FIRPM function.

  7. % All frequency values are in Hz.
  8. Fs = 10;  % Sampling Frequency

  9. Fpass = 3;            % Passband Frequency
  10. Fstop = 0.6;           % Stopband Frequency
  11. Dpass = 0.057501127785;  % Passband Ripple
  12. Dstop = 0.0001;          % Stopband Attenuation
  13. dens  = 16;              % Density Factor

  14. % Calculate the order from the parameters using FIRPMORD.
  15. [N, Fo, Ao, W] = firpmord([Fpass, Fstop]/(Fs/2), [1 0], [Dpass, Dstop]);

  16. % Calculate the coefficients using the FIRPM function.
  17. b  = firpm(N, Fo, Ao, W, {dens});
  18. Hd = dfilt.dffir(b);

  19. % [EOF]
复制代码


最佳答案


songzy41 发表于 2023-2-11 08:25:40

Fpass 需要低于Fstop并没有错(对于低通滤波器),但在笫1层的程序中似乎不是应该修改Fpass,而是应该修改Fstop
LZ原设计中是设置低通滤波器的通带为3Hz,LZ把阻带频率设成过渡带的带宽Fstop = 0.6。实际上应把阻带设为
Fstop = 3.6,这样运行笫1层程序就没问题了

4 条回复


卿猫小咪 发表于 2023-2-10 14:23:08
Fpass 需要低于Fstop吧

scj12345 发表于 2023-2-10 14:39:14
卿猫小咪 发表于 2023-2-10 14:23
Fpass 需要低于Fstop吧

我把Fpass设成了0
  1. % All frequency values are in Hz.
  2. Fs = 10;  % Sampling Frequency

  3. N     = 10;   % Order
  4. Fstop = 0.06;  % Stopband Frequency
  5. Fpass = 0;    % Passband Frequency
  6. Wstop = 3;    % Stopband Weight
  7. Wpass = 1;    % Passband Weight
  8. dens  = 20;   % Density Factor

  9. % Calculate the coefficients using the FIRPM function.
  10. b  = firpm(N, [0 Fstop Fpass Fs/2]/(Fs/2), [0 0 1 1], [Wstop Wpass], ...
  11.            {dens});
  12. Hd = dfilt.dffir(b);

  13. % [EOF]
复制代码


错误使用 firpminit (line 62)
Frequencies must be non-decreasing.

出错 firpm (line 135)
[nfilt,ff,grid,des,wt,ftype,sign_val,hilbert,neg] = firpminit(order, ff, aa, varargin{:});

出错 gaotong (line 21)
b  = firpm(N, [0 Fstop Fpass Fs/2]/(Fs/2), [0 0 1 1], [Wstop Wpass], ...

卿猫小咪 发表于 2023-2-10 14:49:19
我这边看是没问题的呢

songzy41 发表于 2023-2-11 08:25:40

Fpass 需要低于Fstop并没有错(对于低通滤波器),但在笫1层的程序中似乎不是应该修改Fpass,而是应该修改Fstop
LZ原设计中是设置低通滤波器的通带为3Hz,LZ把阻带频率设成过渡带的带宽Fstop = 0.6。实际上应把阻带设为
Fstop = 3.6,这样运行笫1层程序就没问题了
回复此楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表