信号からノイズを除去するための非常に単純なコードを書いています。信号はちょうど正弦波であり、雑音はランダム行列であり、雑音のある信号は両方の加算である。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。フィルタリングされた信号と元の信号の両方を比較する図である。常に下の画像のように表示されます。
私はWn
変数が適切ではないと信じて、私は正しい正規化された頻度を算出する方法がわかりません。 this example form Matlab's documentation後
をフィルタリングすることを右のそれをです信号にオフセットがありますか? – Tes3awy
['rand()'](https://www.mathworks.com/help/matlab/ref/rand.html)で追加するノイズは、 '(0,1)'の範囲で一様な分布をしています。入力を平均0.5でオフセットします。バイアスのないノイズの場合、 '(2 * rand(...)-1)'( '(-1,1)'の範囲内の一様分布)または 'randn(...)'(Gaussian分布)。 – SleuthEye
詳しい説明はありがたいです – Tes3awy