M-point moving-average(M点滑动平均)Matlab 实现
生活随笔
收集整理的這篇文章主要介紹了
M-point moving-average(M点滑动平均)Matlab 实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
1. M點滑動平均
2. Matlab 實現過程
3. 濾波器的表示
4. 總體代碼以及實現結果
1. M點滑動平均
由于觀測的信號被噪聲污染,需要對其進行噪聲的濾除,M 點滑動平均則是對該信號的某一個點及其前面的共 M 點取平均,從而得到該信號大致的樣本值
2. Matlab 實現過程
由于該平均方法是對一個被噪聲污染的信號進行操作,所以首先我們可以得到一個原始信號,在此處我們取一個簡單的正弦信號
n = -100:100;Sn = sin(0.1*pi*n); %original signal figure stem(n,Sn,'.') axis([0,100,-1.1,1.1]) title('Original signal')上述代碼得到的信號如下:
得到原始信號后對其進行加噪處理,生成噪聲我們采用隨機函數 randn
Rn = 0.15*randn(size(Sn)); %noise signal(得到噪聲信號) stem(Rn,'r.') axis([0,100,-0.5,1]) title('Noise')X = Sn + Rn; %input signal(將樣本信號和隨機噪聲結合起來) stem(X,'.') axis([0,100,-1.3,1.3]) title('Signal added noise')以上代碼的效果如下:
我們知道,滑動平均就是對多個點進行取平均操作,得到一個均值,所以我們可以采用一個循環來進行這個操作過程,對原序列的每一個點進行平均操作,而平均的次數則是 M 次:
S = zeros(1,100); for n = 1:100for i = 0:7S(n) = S(n) + X(n + i);endS(n) = 1/8*S(n); end經過取平均操作后得到的信號可以使用如下代碼表示
subplot(2,4,4) stem(S,'.') axis([0,100,-1.3,1.3]) title('Signal after filtering')效果如下:
這樣就大致完成了滑動平均
3. 濾波器的表示
由前面的表達式可以看出,該濾波器的單位沖擊響應是單位階躍函數的一段,可以用下面的代碼塊表示
d = zeros(100,1); d(1:5) = 0.2; subplot(2,4,7) stem(d,'.') axis([0,10,0,0.3]) title('Unit impulse response')其中的每一個點的值為 1/M,點數為 M 個
得到的單位沖激響應如下
對其進行快速傅里葉變換得到系統的頻響:
f = fft(d); subplot(2,4,8) plot(abs(f)) title('Ferquency response')4. 總體代碼以及實現結果
n = -100:100;Sn = sin(0.1*pi*n); %original signal figure subplot(2,4,1) stem(n,Sn,'.') axis([0,100,-1.1,1.1]) title('Original signal')Rn = 0.15*randn(size(Sn)); %noise signal subplot(2,4,2) stem(Rn,'r.') axis([0,100,-0.5,1]) title('Noise')X = Sn + Rn; %input signal subplot(2,4,3) stem(X,'.') axis([0,100,-1.3,1.3]) title('Signal added noise')S = zeros(1,100); for n = 1:100for i = 0:4S(n) = S(n) + X(n + i);endS(n) = 1/5*S(n); endsubplot(2,4,4) stem(S,'.') axis([0,100,-1.3,1.3]) title('Signal after filtering')a = fft(X); b = fft(S); subplot(2,4,5) plot(abs(a)) title('Signal X in Frequency domain')subplot(2,4,6) plot(abs(b)) title('Signal S in Frequency domain')d = zeros(100,1); d(1:5) = 0.2; subplot(2,4,7) stem(d,'.') axis([0,10,0,0.3]) title('Unit impulse response')f = fft(d); subplot(2,4,8) plot(abs(f)) title('Ferquency response')總結
以上是生活随笔為你收集整理的M-point moving-average(M点滑动平均)Matlab 实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matlab 进行离散时间信号序列的生成
- 下一篇: 机器学习实战(一)—— K-近邻算法(K