2016-12-11 3 views
1

信号からノイズを除去するための非常に単純なコードを書いています。信号はちょうど正弦波であり、雑音はランダム行列であり、雑音のある信号は両方の加算である。MATLABのローパスバターワースフィルタ

コードは次のとおり

close all;clear;clc; 

%% Declarations 

ts = 0.001; 
fs = 1/ts; 
fc = 5; 
t = 0:ts:2; 
Wn = pi*fc/(2*fs); 
n = 3; 

%% Preparation 

signal = cos(2*pi*fc*t); 
noise = rand(1, length(signal)); % Generating Random Noise 
noisySignal = signal + noise; 

%% Filtering Stage 

[b,a] = butter(n, Wn, 'low'); 
filteredSignal = filter(b, a, noisySignal); 
filteredSignal = filteredSignal - mean(filteredSignal); % Subtracting the mean to block DC Component 

%% Plotting 

figure(1) 
subplot(3,1,1) 
plot(t, signal, 'linewidth', 1.5) 
title('Signal') 
ylim([-1.5 1.5]) 
grid minor 

subplot(3,1,2) 
plot(t, noise) 
title('Noise') 
ylim([-1.5 2]) 
grid minor 

subplot(3,1,3) 
plot(t, noisySignal) 
title('Noisy Signal') 
ylim([-1.5 1.5]) 
grid minor 

figure(2) 
plot(t, filteredSignal, 'r', 'linewidth', 1.5) 
hold on 
plot(t, signal, 'linewidth', 1.5) 
hold off 
legend('Filtered Signal', 'Original Signal') 
grid minor 
ylim([-1.5 1.5]) 

図2。フィルタリングされた信号と元の信号の両方を比較する図である。常に下の画像のように表示されます。

comparison

私はWn変数が適切ではないと信じて、私は正しい正規化された頻度を算出する方法がわかりません。 this example form Matlab's documentation

答えて

2

、あなたがfsヘルツのサンプリング周波数でfc Hzであることを、カットオフ周波数をしたい場合は、あなたが使用する必要があります。

Wn = fc/(fs/2); 
[b,a] = butter(n, Wn, 'low'); 

あなたは、これはとバターワースフィルタを生成することに注意すべきであるがカットオフ周波数で3dBの減衰。あなたがより少ない信号の減衰をしたい場合は、フィルターのカットオフ周波数を上げる必要がある

Filtered signal at cutoff frequency

:あなたの正弦波信号を周波数fcで生成されるため、フィルターの正弦波は、元の信号の約70%の振幅を持っているでしょう。もちろんそうすることで、より多くのノイズを通過させるので、正確な量は、アプリケーションが許容できる信号減衰量と、取り除く必要のあるノイズ量のトレードオフです。例えば1Hzのマージンを追加し、あなたを与えるだろう

Wn = (fc+1)/(fs/2); 
n = 7; 
[b,a] = butter(n, Wn, 'low'); 

で(同じマージンのためにあなたに少ない減衰を与える)フィルタ次数を増やす:

Filtered signal with some margin

+0

をフィルタリングすることを右のそれをです信号にオフセットがありますか? – Tes3awy

+0

['rand()'](https://www.mathworks.com/help/matlab/ref/rand.html)で追加するノイズは、 '(0,1)'の範囲で一様な分布をしています。入力を平均0.5でオフセットします。バイアスのないノイズの場合、 '(2 * rand(...)-1)'( '(-1,1)'の範囲内の一様分布)または 'randn(...)'(Gaussian分布)。 – SleuthEye

+0

詳しい説明はありがたいです – Tes3awy