【问题标题】:How to change value of a signal's range in Matlab如何在 Matlab 中更改信号范围的值
【发布时间】:2017-05-19 16:23:43
【问题描述】:

假设我在 Matlab 中有这样的信号

x = cos(2*pi*10*t) + cos(2*pi*20*t) + cos(2*pi*50*t);

我想将 20 到 30 赫兹之间的值更改为 0。我该怎么做?我的意思是,那些从 x 公式生成的值,我想稍微改变一下。

【问题讨论】:

  • 提示:使用logical operators。
  • @kedarps 哦,它们也适用于信号吗?我可以运行 x(0.4:0.6) = 0 之类的东西吗?
  • 抱歉,我编辑了我的问题并使其更清晰
  • 我假设,你有一个时间向量,t。从时间向量中获取索引,例如idx = (t >= 0.2) & (t <= 0.3)。现在使用这些索引来改变你的信号向量,比如x(idx) = 0。
  • 谢谢。它确实改变了它,但它根据x轴的值改变了它。我要改变的是根据hz。带通滤波器。这样生成的信号本身在 5 到 15 赫兹(例如)之间变为 0。而不必使用时间向量。

标签: matlab signals signal-processing


【解决方案1】:

您可以通过在 x 上执行 FFT 并将 20 到 30 Hz 之间的值设置为零然后对先前的值应用 FFT 倒数来做到这一点,您应该得到没有这些频率的信号。但是,您可能会丢失有价值的信息,或者信号可能看起来不像您希望的那样。因此,我建议您使用“带阻滤波器”。带阻滤波器将接收截止频率(您要使用的限制频率)和一些其他参数。带阻滤波器基本上会从信号中去除您指定的频率。好的部分是它可以像下面这样简单地完成:

  1. 首先您必须构建过滤器。为此,您需要指明可以根据需要定义的过滤器顺序。通常第二个订单效果很好。此外,您必须了解您的采样率 Fs。

    d = designfilt('bandstopiir','FilterOrder',2, ... 'HalfPowerFrequency1',20,'HalfPowerFrequency2',30, ... 'SampleRate',Fs);

  2. 现在您只需将过滤器应用于您想要的信号。

    filtered_signal_x = filtfilt(d, x)

现在,filtered_signal_x 不应包含您要删除的频率。通过使用带阻,您不必弄乱 FFT 之类的东西,而且速度更快,所以我认为它是最好的选择。

【讨论】:

  • 如何使所有其他值等于另一个值(例如 20-40 hz 之间)使它们全部为 1?还是其他价值?
【解决方案2】:

您可以使用过滤器,也可以通过进入傅立叶空间并明确将所需频率上的信号设置为零来自行过滤。之后,您需要回到时域。这是一个代码:

t=0:0.01:0.99;  % time
x = cos(2*pi*10*t) + cos(2*pi*20*t) + cos(2*pi*50*t); %signal
xf=fftshift(fft(x)); %Fourier signal 
N=size(x,2); % Size of the signal
frequency=2*pi*[-N/2:N/2-1]; %frequency range
frequencyrangeplus=find(frequency/(2*pi)>=20 & frequency/(2*pi)<=30); %find     positive frequencies in the required range
frequencyrangeminus=find(frequency/(2*pi)<=-20 & frequency/(2*pi)>=-30);     %find negative frequencies in the required range
xf(frequencyrangeplus)=0; %set signal to zero at positive frequencies range
xf(frequencyrangeminus)=0; %set signal to zero at nagative frequencies range
xnew=ifft(ifftshift(xf)); %get the new signal in time domain
xcheck= cos(2*pi*10*t) + cos(2*pi*50*t); % to check the code
max(abs(xcheck-xnew)) % maximum difference

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-26
    • 2013-07-11
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多