M-point moving-average(M点滑动平均)Matlab 实现
目錄
1. M點(diǎn)滑動(dòng)平均
2. Matlab 實(shí)現(xiàn)過(guò)程
3. 濾波器的表示
4. 總體代碼以及實(shí)現(xiàn)結(jié)果
1. M點(diǎn)滑動(dòng)平均
由于觀測(cè)的信號(hào)被噪聲污染,需要對(duì)其進(jìn)行噪聲的濾除,M 點(diǎn)滑動(dòng)平均則是對(duì)該信號(hào)的某一個(gè)點(diǎn)及其前面的共 M 點(diǎn)取平均,從而得到該信號(hào)大致的樣本值
2. Matlab 實(shí)現(xiàn)過(guò)程
由于該平均方法是對(duì)一個(gè)被噪聲污染的信號(hào)進(jìn)行操作,所以首先我們可以得到一個(gè)原始信號(hào),在此處我們?nèi)∫粋€(gè)簡(jiǎn)單的正弦信號(hào)
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')上述代碼得到的信號(hào)如下:
得到原始信號(hào)后對(duì)其進(jìn)行加噪處理,生成噪聲我們采用隨機(jī)函數(shù) randn
Rn = 0.15*randn(size(Sn)); %noise signal(得到噪聲信號(hào)) stem(Rn,'r.') axis([0,100,-0.5,1]) title('Noise')X = Sn + Rn; %input signal(將樣本信號(hào)和隨機(jī)噪聲結(jié)合起來(lái)) stem(X,'.') axis([0,100,-1.3,1.3]) title('Signal added noise')以上代碼的效果如下:
我們知道,滑動(dòng)平均就是對(duì)多個(gè)點(diǎn)進(jìn)行取平均操作,得到一個(gè)均值,所以我們可以采用一個(gè)循環(huán)來(lái)進(jìn)行這個(gè)操作過(guò)程,對(duì)原序列的每一個(gè)點(diǎn)進(jìn)行平均操作,而平均的次數(shù)則是 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經(jīng)過(guò)取平均操作后得到的信號(hào)可以使用如下代碼表示
subplot(2,4,4) stem(S,'.') axis([0,100,-1.3,1.3]) title('Signal after filtering')效果如下:
這樣就大致完成了滑動(dòng)平均
3. 濾波器的表示
由前面的表達(dá)式可以看出,該濾波器的單位沖擊響應(yīng)是單位階躍函數(shù)的一段,可以用下面的代碼塊表示
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')其中的每一個(gè)點(diǎn)的值為 1/M,點(diǎn)數(shù)為 M 個(gè)
得到的單位沖激響應(yīng)如下
對(duì)其進(jìn)行快速傅里葉變換得到系統(tǒng)的頻響:
f = fft(d); subplot(2,4,8) plot(abs(f)) title('Ferquency response')4. 總體代碼以及實(shí)現(xiàn)結(jié)果
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')總結(jié)
以上是生活随笔為你收集整理的M-point moving-average(M点滑动平均)Matlab 实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Matlab 进行离散时间信号序列的生成
- 下一篇: M 点滑动平均 Python 实现