2014-06-05 343 views
-3

我想设计在MATLAB一个过滤器,执行以下步骤:如何在MATLAB中使用滤波器限制信号中的特定频段?

  1. 首先,生成在UHF频带的随机数据(例如750兆赫〜800兆赫)
  2. 我想准确过滤我数据在790兆赫。

我是MATLAB新手,但是我使用rand生成了随机数据,但我的下一步是什么?

+1

进一步的解释,请..? –

+2

这个问题似乎是无关紧要的,因为它是关于滤波器设计,而不是软件编程。一旦你设计了一个过滤器,在MATLAB中实现该过滤器对于StackOverflow来说是一个合适的问题。您也可以在我们的姊妹网站[电气工程](http://electronics.stackexchange.com/)或[信号处理](http://dsp.stackexchange.com/)上询问 –

回答

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兆赫

您可以指定一个缺口滤波器滤波你的噪音。我们知道我们希望过滤的频率是790 MHz。因此:

notchFreq = (790/BW); 

我们还需要指定滤波器的带宽。通常情况下,我们设置这个值使Q因子达到35。因此:

bwFilter = notchFreq/35; 

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

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

现在,我们终于器过滤步骤#1的方法,像这样:

outFinal = filter(b2, a2, outFilter); 

这应该有希望给你你需要的东西。您可能需要稍微调整一下参数,因为我不知道它们是否适用于您的应用程序。信号处理的事情是,你需要不断调整你的参数,直到你的应用程序得到最好的结果。祝你好运!

参考

+0

谢谢uuuuu sir – user3607520

+0

@ user3607520您是最受欢迎的。如果这篇文章以任何方式帮助你,请考虑接受我的答案。您可以通过转到我的帖子顶部,在左侧上下箭头的位置点击复选标记。 – rayryeng

+0

先生,我想设计一个过滤器,你的回答对我来说最有帮助 – user3607520