我想在MATLAB中设计一个过滤器,执行以下步骤:
我是MATLAB的新手,但我使用rand
生成了随机数据,但下一步是什么?
答案 0 :(得分:1)
在我们开始之前,我假设这是一个数字滤波器。因此,我假设您需要知道您正在获取数据的采样频率。我们暂时调用此Fs
。此外,我们必须确保您的采样频率至少是带宽的两倍。在这种情况下,它应该是> 1600 MHz
。现在回答你的问题:
您可以使用加性高斯白噪声生成方法(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);
您可以指定缺口过滤器来为您过滤噪音。我们知道我们希望过滤的频率是790 MHz。就这样:
notchFreq = (790 / BW);
我们还需要指定过滤器的带宽。通常,我们将其设置为满足Q因子35。就这样:
bwFilter = notchFreq / 35;
因此,我们使用二阶IIR陷波滤波器生成方法构建我们的陷波滤波器
[b2,a2] = iirnotch(notchFreq, bwFilter);
现在,我们最终过滤了步骤#1中的方法,如下所示:
outFinal = filter(b2, a2, outFilter);
希望能满足您的需求。您可能需要稍微调整一下参数,因为我不知道它们对您的应用程序是什么。信号处理的一点是,您需要不断调整参数,直到您的应用程序获得最佳结果。祝你好运!