如何使用MATLAB中的滤波器限制信号中的特定频段?

时间:2014-06-05 14:03:10

标签: matlab signal-processing

我想在MATLAB中设计一个过滤器,执行以下步骤:

  1. 首先,在UHF频段(例如750 MHz至800 MHz)中生成随机数据
  2. 我想在790 MHz处完全过滤我的数据。
  3. 我是MATLAB的新手,但我使用rand生成了随机数据,但下一步是什么?

1 个答案:

答案 0 :(得分:1)

在我们开始之前,我假设这是一个数字滤波器。因此,我假设您需要知道您正在获取数据的采样频率。我们暂时调用此Fs。此外,我们必须确保您的采样频率至少是带宽的两倍。在这种情况下,它应该是> 1600 MHz。现在回答你的问题:

步骤#1 - 产生噪音

您可以使用加性高斯白噪声生成方法(awgn)为您完成此操作。我正在使用AWGN,因为这是一个很好的模型,用于对通信系统中的大多数噪声进行建模。这个在信号上添加 AWGN噪声,因此如果您只想要噪声分量,只需指定作为输入。您需要指定SNR,并且您需要事先了解这一点。但是,如果我们想要一个非常嘈杂的信号,让我们将SNR指定为0 dB。 AWGN噪声的功率谱密度在所有频率下都是完全平坦的频带。因此,一旦您创建了AWGN噪声信号,就可以对噪声进行带通滤波,使其位于750到800 MHz之间。我也选择AWGN作为它的灵活性,你可以在任何你喜欢的地方进行带通,因为它具有平坦的功率谱密度。您可以使用butter命令为带通滤波器创建分子和分母系数。你这样称呼它:

[b,a] = butter(n, Wn, 'ftype');
对我们来说,

Wn是一个2元素向量,对应于您希望过滤的低频和高频。这也必须归一化,以便为采样频率指定频率为1.因此,归一化范围内的低频和高频应如下所示:

BW = Fs / 2; %// Units of MHz
lower = (750/BW); 
upper = (800/BW);

'ftype'是您想要的过滤器类型。在这种情况下,您需要带通滤波器,因此请指定'bandpass'作为标志。至于订单n,你必须要玩。首先尝试7或9之类的东西。这完全取决于您的信号频率分布情况。

现在已经建立,调用butter函数来获取滤波器系数。

n = 7;
[b,a] = butter(n, [lower upper], 'bandpass');

现在完成了,过滤你的信号就好了。让我们说x是您通过AWGN生成的信号。你会这样做:

numPoints = 1000; %// Need to know number of points before hand
x = awgn(zeros(numPoints,1), 0);

现在,过滤你的信号:

outFilter = filter(b, a, x);

步骤#2 - 精确过滤790 MHz

您可以指定缺口过滤器来为您过滤噪音。我们知道我们希望过滤的频率是790 MHz。就这样:

notchFreq = (790 / BW);

我们还需要指定过滤器的带宽。通常,我们将其设置为满足Q因子35。就这样:

bwFilter = notchFreq / 35;

因此,我们使用二阶IIR陷波滤波器生成方法构建我们的陷波滤波器

[b2,a2] = iirnotch(notchFreq, bwFilter);

现在,我们最终过滤了步骤#1中的方法,如下所示:

outFinal = filter(b2, a2, outFilter);

希望能满足您的需求。您可能需要稍微调整一下参数,因为我不知道它们对您的应用程序是什么。信号处理的一点是,您需要不断调整参数,直到您的应用程序获得最佳结果。祝你好运!

参考