最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【建議收藏】用MATLAB自動生成濾波器的傻瓜方法

2020-01-04 21:46 作者:不妙脆角  | 我要投稿

本文介紹MATLAB中濾波器的定義和設(shè)置,以及各個參數(shù)的含義。


一、讀取信號

>> [y,Fs] =?audioread(filename)

y是信號,F(xiàn)s是采樣率,filename是音頻文件路徑。

二、傅里葉變換

>> Fs = 1000; ? ? ? ? ? ?%采樣率? ? ? ? ? ? ?

>> T = 1/Fs; ? ? ? ? ? ? %采樣周期?? ??

>> L = 1500; ? ? ? ? ? ? %信號長度

>> t = (0:L-1)*T; ? ? ? ?%時間向量

%構(gòu)造一個信號,其中包含振幅為 0.7 的 50 Hz 正弦信號和振幅為?1 的 120 Hz 正弦信號。

S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);

%傅里葉變換

>> Y = fft(S);?

>> P2 = abs(Y/L);?

>> P1 = P2(1:L/2+1);?

>> P1(2:end-1) = 2*P1(2:end-1);?

>> plot(f,P1)?

>> title('Single-Sided Amplitude Spectrum of S(t)')?

>> xlabel('f (Hz)') ylabel('|P1(f)|')


見說明文檔:

三、自相關(guān)

互相關(guān)用于拾取相似信號。

>> r = xcorr(signal1,signal2);

>> plot(r);

四、濾波器

簡單來說濾波器就是濾掉特定頻率范圍的信號,例如對于一首歌,我們可以濾掉人聲的頻率范圍,以得到純音樂。

濾波器:

我們可以使用MATLAB的濾波器設(shè)計(jì)器,在命令行中輸入

>> designfilt

然后就會彈出濾波器類型:

低通(Lowpass),高通(Highpass),帶通(Bandpass),帶阻(Bandstop)等等。其中FIR和IIR分別是有限/無限(Finite,Infinite)脈沖響應(yīng)的意思。

我們選用常用的低通濾波器,也就是只允許某個????頻率以下的成分通過。點(diǎn)擊確認(rèn)彈出界面:

注意到有一些參數(shù)

1.Frequency Units:頻率單位。這里建議選擇具體的頻率,即Hz

2.Input sample rate:輸入的信號采樣率,也就是一秒鐘采樣多少個點(diǎn)。采樣率越高信號質(zhì)量越好。

3.Passband frequency和Stopband frequency:有人問,低通濾波不就一個低通上限嗎,為什么是兩個參數(shù)。這是因?yàn)槟隳X子里的這種只有一個低通上限的濾波器是理想矩形濾波器,即低于上限頻率的全通過,高于上限頻率的全不通過;

理想濾波器

而實(shí)際上,上面的濾波器是做不出來的。上限頻率是一個范圍,是逐漸衰減的。因此你要選擇從多大的頻率衰減,到多大的頻率衰減到0.如下圖所示:

一般來說,你要確保截止頻率以上的頻率成分全都不能通過,因此你就要設(shè)置Stop Frequency為截止頻率。而Pass frequency設(shè)多少,取決于你自己的需求:設(shè)置得越陡峭,對截止頻率以下的成分的影響越小,則濾波效果越好,而濾波器的階數(shù)也越高,則計(jì)算時間也越長;反之,設(shè)置得越平緩,則對截止頻率附近的信號影響越大。


下面是振幅參數(shù):

Passband ripple和Stopband attenuation就是下面的意思:說白了就是描述你截止頻率附近的起伏大小,也就是對截止頻率附近信號成分的畸變作用的大小。

最后是選擇算法

請注意,如果你看不懂下面的內(nèi)容,你根本無需在意選擇哪種算法:

Kaiser window就是用Kaiser窗函數(shù)來濾波,它使得信號主瓣和旁瓣的能量比最大,也就是說,抑制旁瓣能量。

而equiripple,顧名思義,就是讓ripple等大小波動,這是為了抑制截止頻率附近的信號畸變。

設(shè)置完成!點(diǎn)擊OK后matlab會自動計(jì)算符合條件的濾波器,請耐心等待。

計(jì)算完成后會把設(shè)計(jì)好的濾波器輸出在命令行中:

生成的第一行就是我們要的濾波器代碼

>> designfilt('lowpassfir', 'PassbandFrequency', 10, 'StopbandFrequency', 12, 'PassbandRipple', 1, 'StopbandAttenuation', 60, 'SampleRate', 1000);

然后怎么用呢?

1.首先令myfilt=前面一串,定義了名字為"myfilt"的濾波器

>>? myfilt=designfilt('lowpassfir', 'PassbandFrequency', 10, 'StopbandFrequency', 12, 'PassbandRipple', 1, 'StopbandAttenuation', 60, 'SampleRate', 1000);

注意到參數(shù)實(shí)際上是可以直接在這里改的。

2.查看濾波器,以檢查是否滿足你的需求

>>?fvtool(myfilt);

3.進(jìn)行零相移濾波

>> signal_filt=filtfilt(myfilt,signal);

注意你信號的采樣率要和你之前設(shè)計(jì)的濾波器的采樣率一樣。

什么叫零相移濾波呢,就是說濾波以后信號不因?yàn)V波器的影響發(fā)生相移。MATLAB的實(shí)現(xiàn)方法就是濾波兩次,使得相移相抵消。


貼一段MATLAB官方教程演示這個問題:

>> wform = ecg(500);?

>> plot(wform);

>> axis([0 500 -1.25 1.25]);

>> text(155,-0.4,'Q');

>> text(180,1.1,'R');

>> text(205,-1,'S')

生成模擬信號:

>> rng default

>> x = wform' + 0.25*randn(500,1);?

>> d = designfilt('lowpassfir', ... ? ?'PassbandFrequency',0.15,'StopbandFrequency',0.2, ... ? ?'PassbandRipple',1,'StopbandAttenuation',60, ... ? ?'DesignMethod','equiripple');

>> y = filtfilt(d,x);?

>> y1 = filter(d,x);?

>> subplot(2,1,1)?

>> plot([y y1])

>> title('Filtered Waveforms')

>> legend('Zero-phase Filtering','Conventional Filtering')?

>> subplot(2,1,2)

>> plot(wform)

>> title('Original Waveform')

零相移濾波器和非零相移濾波器的濾波結(jié)果與原始信號對比,結(jié)果顯示非零相移濾波器導(dǎo)致信號峰值位置發(fā)生移動,也就是所謂“相移”。


至于高通濾波、帶通濾波,和低通濾波的定義大同小異,都是要設(shè)置開始衰減的頻率,和結(jié)束衰減的頻率。

【建議收藏】用MATLAB自動生成濾波器的傻瓜方法的評論 (共 條)

分享到微博請遵守國家法律
子长县| 浪卡子县| 襄城县| 县级市| 图们市| 安岳县| 玉龙| 广河县| 葫芦岛市| 淮阳县| 富顺县| 昌黎县| 木兰县| 东山县| 河源市| 宝坻区| 稷山县| 佛冈县| 武穴市| 四川省| 洛川县| 乳源| 黔西| 玉溪市| 台江县| 东至县| 乌兰察布市| 洱源县| 康定县| 安阳县| 泉州市| 海伦市| 交口县| 仲巴县| 饶平县| 东阳市| 朝阳市| 志丹县| 海南省| 龙游县| 礼泉县|