Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于傅立叶变换和MATLAB的信号噪声滤波_Matlab_Plot_Filter_Signals_Fft - Fatal编程技术网

基于傅立叶变换和MATLAB的信号噪声滤波

基于傅立叶变换和MATLAB的信号噪声滤波,matlab,plot,filter,signals,fft,Matlab,Plot,Filter,Signals,Fft,所以,我得到了三个不同的MATLAB(我使用的是MatlabR2014B)文件,其中的信号含有噪声。我只是简单地绘制了第一部分给出的值。例如,第一个信号的曲线图如下所示 然后,我对信号进行傅里叶变换,并绘制这些值,以确定噪声和信号在频谱中的位置。为了显示这一点,我在下面添加了第一个信号的绘图图像 最后,我将使用基本的MATLAB命令创建一个滤波器,将信号图中的噪声过滤掉,然后再次对信号进行傅里叶变换并绘制结果。过滤器部分看起来像这样 b = fir1(n,w,'type'); freqz(b

所以,我得到了三个不同的MATLAB(我使用的是MatlabR2014B)文件,其中的信号含有噪声。我只是简单地绘制了第一部分给出的值。例如,第一个信号的曲线图如下所示

然后,我对信号进行傅里叶变换,并绘制这些值,以确定噪声和信号在频谱中的位置。为了显示这一点,我在下面添加了第一个信号的绘图图像

最后,我将使用基本的MATLAB命令创建一个滤波器,将信号图中的噪声过滤掉,然后再次对信号进行傅里叶变换并绘制结果。过滤器部分看起来像这样

b = fir1(n,w,'type');
freqz(b,1,512);
in = filter(b,1,in);

其中n是滤波器的阶数,w是截止频率(截止频率除以采样率的一半),而“类型”是指低/高/停止/等的影响。。。所以,我的问题是,我如何计算我正在创建的过滤器的n、w和type值应该是什么?!提前感谢您的帮助

如果第二个图是正确的,在x轴上,我可以假设:

A.采样频率为2000 Hz

B.“噪音”处于低频。从原始信号来看,似乎还需要对低频基线进行滤波

如果是这样,您需要高通滤波器,所以“type”=“high”

顺序取决于您希望过滤的清晰度。从图上看,似乎可以使用'n'=12或20


如果低频中的峰值确实是要过滤的噪声,并且如果1000Hz的x轴确实是奈奎斯特频率,则截止频率假设为0.1左右。

我相信高频分量是噪声,但它实际上取决于数据

看这个例子

Fs = 2000;
L = 200;
t = (0 : L - 1)/Fs;
data = chirp(t,20,.05,50) + chirp(t,500,.1,700);
subplot(411)
plot(t,data,'LineWidth',2);
title('Original Data') 
N = 2^nextpow2(L);
y = fft(data,N)/L;
f = Fs/2 * linspace(0,1,N/2+1);
subplot(412)
plot(f,abs(y(1:N/2+1)))
title('Spectrum of Original Data')
b = fir1(40,2*[1 200]/Fs); 
newd = filter(b,1,data);
subplot(413)
plot(t,newd)
title('Filtered Data')
newy = fft(newd,N)/L;
subplot(414)
plot(f,abs(newy(1:N/2+1)))
title('Spectrum of Filtered Data')


您可以使用
b=fir1(40,2*[200800]/Fs)用于高通滤波器。

啊,所以我完全理解你所说的一切,除了截止频率。它需要精确到0.1。现在我有这个,
b=fir1(20100/(2000/2),“高”);freqz(b,1512);in=过滤器(b,1,in)