商丘做網(wǎng)站用什么程序好南京seo公司排名
文章目錄
- 前言
- 一、 什么是補(bǔ)零
- 二、案例
- 三、補(bǔ)零前仿真及分析
- 1、補(bǔ)零前 MATLAB 源碼
- 2、仿真及結(jié)果分析
- 四、補(bǔ)零后仿真及分析
- 1、補(bǔ)6000個(gè)零且1000采樣點(diǎn)
- ①、 MATLAB 源碼
- ②、仿真及結(jié)果分析
- 2、波形分辨率
- 3、補(bǔ)6000個(gè)零且7000采樣點(diǎn)
- ①、 MATLAB 源碼
- ②、仿真及結(jié)果分析
- 4、補(bǔ)7000個(gè)零且7000采樣點(diǎn)
- ①、 MATLAB 源碼
- ②、仿真及結(jié)果分析
- 五、補(bǔ)零的好處
- 六、資源自取
前言
本文對(duì)信號(hào)補(bǔ)零前與補(bǔ)零后分別做 FFT,對(duì)頻譜進(jìn)行分析。
先拋出結(jié)論:
補(bǔ) 1 次零相當(dāng)于在原始頻譜圖中每?jī)蓚€(gè)頻率之間插入1個(gè)頻率值,補(bǔ) 2 次零相當(dāng)于在原始頻譜圖中每?jī)蓚€(gè)頻率之間插入 2 個(gè)頻率值,并且原始頻率值的位置及其幅值保持不變。因此, 補(bǔ)零會(huì)使頻譜圖中的頻率點(diǎn)的數(shù)量增加,從而使得頻譜圖更加的光滑連續(xù),但是補(bǔ)零不能對(duì)頻譜圖中的頻率分辨率、頻率值以及幅值有所改善。
一、 什么是補(bǔ)零
FFT 運(yùn)算點(diǎn)數(shù)( M M M) > 采樣點(diǎn)數(shù)( N N N)時(shí), f f t ( x n , M ) fft(xn,M) fft(xn,M) 函數(shù)對(duì)信號(hào) x n x_n xn? 進(jìn)行尾補(bǔ)零操作即在該信號(hào)尾部添加多個(gè)值為 0 的數(shù)據(jù)點(diǎn)以使信號(hào)總點(diǎn)數(shù) N N N 增至 FFT 運(yùn)算所需點(diǎn)數(shù) M M M。
二、案例
目前有一個(gè)信號(hào) ,這個(gè)信號(hào)中僅包含兩個(gè)正(余)弦波,一個(gè)是 1 M H z 1MHz 1MHz,一個(gè)是 1.5 M H z 1.5MHz 1.5MHz,即 x = c o s ( 2 π ? 1000000 t ) + c o s ( 2 π ? 1050000 t ) x=cos(2\pi*1000000t)+cos(2\pi*1050000t) x=cos(2π?1000000t)+cos(2π?1050000t)。設(shè)定采樣頻率為 F s = 100 M H z F_s=100MHz Fs?=100MHz,如果采 1000 個(gè)點(diǎn),那么時(shí)域信號(hào)的時(shí)長就有 10 μ s 10\mu s 10μs。(采樣率*采樣時(shí)間=采樣點(diǎn)數(shù))
三、補(bǔ)零前仿真及分析
直接對(duì)這 1000 個(gè)數(shù)據(jù)點(diǎn)做 FFT
1、補(bǔ)零前 MATLAB 源碼
%% [預(yù)處理]
clc; % 清除命令窗口
clear; % 清除工作空間的變量和函數(shù)
clf; % 清除當(dāng)前圖形%% [采樣參數(shù)]
fs = 100e6; % 采樣頻率 (Hz)
ts = 1/fs; % 采樣周期 (s)
N = 1000; % 采樣點(diǎn)數(shù) (個(gè))
n = 0:N-1; % 采樣點(diǎn)索引
t = n*ts; % 采樣時(shí)間軸%% [未補(bǔ)零 被采信號(hào) && 繪制時(shí)域波形]
fa = 1e6; % 信號(hào) a 的頻率
fb = 1.05e6; % 信號(hào) b 的頻率
xn = cos(2*pi*fa*t) + cos(2*pi*fb*t); % 被采信號(hào) = 信號(hào)a + 信號(hào)bfigure(1);
plot(t, xn);
axis([0 10e-6 -inf inf]); % x 軸范圍設(shè)置成[0,10us],y 軸范圍最小值和最大值都為無窮
title('xn 時(shí)域圖');
ylabel('幅度/V');
xlabel('時(shí)間/s');%% [未補(bǔ)零 被采信號(hào) && 繪制頻譜圖]
M = 1000; % FFT 運(yùn)算點(diǎn)數(shù)
X = fft(xn, M); % FFT 輸出值
X = [X(1)/N,X(2:M)*2/N]; % 幅度軸,對(duì)FFT輸出值進(jìn)行歸一化處理,得到幅度軸上的值。
k = 0:M-1; % 頻率點(diǎn)索引
f = fs*k/(M-1); % 頻率軸figure(2);
plot(f, abs(X));
axis([0.5e6 1.5e6 0 1.5]); % x 軸范圍設(shè)置成[0.5e6,1.5e6],y 軸范圍設(shè)置成[0,1.5]
title('xn 頻譜圖');
ylabel('X(f)');
xlabel('頻率/Hz');
2、仿真及結(jié)果分析
①、 x n x_n xn? 時(shí)域圖
②、 x n x_n xn? 頻譜圖
如上圖所示,直接對(duì)這 1000 個(gè)數(shù)據(jù)點(diǎn)做快速傅里葉變換,將得到頻譜,只有一個(gè)譜峰,在 1 M H z 1MHz 1MHz 的地方,由于頻譜點(diǎn)稀疏,在 1 M H z 1MHz 1MHz 根本無法將 1 M H z 1MHz 1MHz 和 1.05 M H z 1.05MHz 1.05MHz 的兩個(gè)頻率分開,這是因?yàn)轭l率分辨率不夠,采樣率 100 M H z 100MHz 100MHz,FFT 點(diǎn)數(shù) 1000 個(gè)點(diǎn),頻率分辨率 = 采樣率 /FFT 點(diǎn)數(shù) = 100 K H z 100 KHz 100KHz,所以無法區(qū)分 50 K H z 50KHz 50KHz。
四、補(bǔ)零后仿真及分析
對(duì)數(shù)據(jù)補(bǔ)零,增加 FFT 點(diǎn)數(shù),比如補(bǔ) 6000 個(gè)零,做 7000 個(gè)點(diǎn)的 FFT。
1、補(bǔ)6000個(gè)零且1000采樣點(diǎn)
①、 MATLAB 源碼
%% [預(yù)處理]
clc; % 清除命令窗口
clear; % 清除工作空間的變量和函數(shù)
clf; % 清除當(dāng)前圖形%% [采樣參數(shù)]
fs = 100e6; % 采樣頻率 (Hz)
ts = 1/fs; % 采樣周期 (s)
N = 1000; % 采樣點(diǎn)數(shù) (個(gè))
n = 0:N-1; % 采樣點(diǎn)索引
t = n*ts; % 采樣時(shí)間軸%% [被采信號(hào) && 繪制時(shí)域波形]
fa = 1e6; % 信號(hào) a 的頻率
fb = 1.05e6; % 信號(hào) b 的頻率
xn = cos(2*pi*fa*t) + cos(2*pi*fb*t); % 被采信號(hào) = 信號(hào)a + 信號(hào)bfigure(1);
plot(t, xn);
axis([0 10e-6 -inf inf]); % x 軸范圍設(shè)置成[0,10us],y 軸范圍最小值和最大值都為無窮
title('xn 時(shí)域圖');
ylabel('幅度/V');
xlabel('時(shí)間/s');%% [尾補(bǔ)零 被采信號(hào) && 繪制時(shí)域波形]
xnwei=[xn zeros(1,6000)]; % 補(bǔ)6000個(gè)零
M = length(xnwei); % FFT 運(yùn)算點(diǎn)數(shù)
X = fft(xnwei, M); % FFT 輸出值
X = [X(1)/N,X(2:M)*2/N]; % 幅度軸,對(duì)FFT輸出值進(jìn)行歸一化處理,得到幅度軸上的值。
k = 0:M-1; % 頻率點(diǎn)索引
f = fs*k/(M-1); % 頻率軸figure(2);
plot(f, abs(X));
axis([0.5e6 1.5e6 0 1.5]); % x 軸范圍設(shè)置成[0.5e6,1.5e6],y 軸范圍設(shè)置成[0,1.5]
title('補(bǔ)零后共7000個(gè)數(shù)據(jù)點(diǎn)做FFT的頻譜');
ylabel('X(f)');
xlabel('頻率/Hz');
②、仿真及結(jié)果分析
可以看到信號(hào)頻譜變得平滑了,但是仍然無法區(qū)分 1 M H z 1MHz 1MHz 和 1.05 M H z 1.05MHz 1.05MHz
這里就要引出一個(gè)波形分辨率的概念,雖然補(bǔ)零了,提高了頻譜分辨率,但是無法提高波形分辨率
2、波形分辨率
發(fā)現(xiàn)頻率成分無法被區(qū)分開,第一反應(yīng)就是:頻率分辨率不夠,那么,如何提高頻率分辨率呢?首先要清楚,這里存在兩種類型的頻率分辨率。
一種叫波形分辨率,其由原始數(shù)據(jù)的時(shí)間長度決定:
Δ R w = 1 T \Delta R_w=\frac{1}{T} ΔRw?=T1?
另一種可以稱之為視覺分辨率或FFT分辨率,其由采樣頻率和參與 FFT 的數(shù)據(jù)點(diǎn)數(shù)決定:
Δ R f f t = F s N f f t \Delta R_{fft}=\frac{F_s}{N_{fft}} ΔRfft?=Nfft?Fs??
之所以要區(qū)分,就是因?yàn)楹竺嬉M(jìn)行 “補(bǔ)零” 操作。如果不補(bǔ)零,直接對(duì)原始數(shù)據(jù)做 FFT,那么這兩種分辨率是相等的。
例如上面,有:
Δ R w = 1 10 μ s = Δ R f f t = 100 M H z 1000 = 100 K H z \Delta R_w=\frac{1}{10\mu s}=\Delta R_{fft}=\frac{100MHz}{1000}=100KHz ΔRw?=10μs1?=ΔRfft?=1000100MHz?=100KHz
所以要想提高波形分辨率,必須提高信號(hào)數(shù)據(jù)本身的長度
3、補(bǔ)6000個(gè)零且7000采樣點(diǎn)
采樣 7000 個(gè)信號(hào)數(shù)據(jù)做 FFT,還是補(bǔ) 6000 個(gè)零 ,做 7000 個(gè)點(diǎn)的 FFT
①、 MATLAB 源碼
%% [預(yù)處理]
clc; % 清除命令窗口
clear; % 清除工作空間的變量和函數(shù)
clf; % 清除當(dāng)前圖形%% [采樣參數(shù)]
fs = 100e6; % 采樣頻率 (Hz)
ts = 1/fs; % 采樣周期 (s)
N = 7000; % 采樣點(diǎn)數(shù) (個(gè))
n = 0:N-1; % 采樣點(diǎn)索引
t = n*ts; % 采樣時(shí)間軸%% [被采信號(hào) && 繪制時(shí)域波形]
fa = 1e6; % 信號(hào) a 的頻率
fb = 1.05e6; % 信號(hào) b 的頻率
xn = cos(2*pi*fa*t) + cos(2*pi*fb*t); % 被采信號(hào) = 信號(hào)a + 信號(hào)bfigure(1);
plot(t, xn);
axis([0 10e-6 -inf inf]); % x 軸范圍設(shè)置成[0,10us],y 軸范圍最小值和最大值都為無窮
title('xn 時(shí)域圖');
ylabel('幅度/V');
xlabel('時(shí)間/s');%% [尾補(bǔ)零 被采信號(hào) && 繪制時(shí)域波形]
xnwei=[xn zeros(1,6000)]; % 補(bǔ)6000個(gè)零
M = length(xnwei); % FFT 運(yùn)算點(diǎn)數(shù)
X = fft(xnwei, M); % FFT 輸出值
X = [X(1)/N,X(2:M)*2/N]; % 幅度軸,對(duì)FFT輸出值進(jìn)行歸一化處理,得到幅度軸上的值。
k = 0:M-1; % 頻率點(diǎn)索引
f = fs*k/(M-1); % 頻率軸figure(2);
plot(f, abs(X));
axis([0.5e6 1.5e6 0 1.5]); % x 軸范圍設(shè)置成[0.5e6,1.5e6],y 軸范圍設(shè)置成[0,1.5]
title('采樣點(diǎn)7000且補(bǔ)零后共7000個(gè)數(shù)據(jù)點(diǎn)做FFT的頻譜');
ylabel('X(f)');
xlabel('頻率/Hz');
②、仿真及結(jié)果分析
因?yàn)榇藭r(shí)的波形分辨率為: Δ R w = 1 70 μ s ≈ 14 K H z \Delta R_w=\frac{1}{70 \mu s}\approx14KHz ΔRw?=70μs1?≈14KHz,小于 1 M H z 1MHz 1MHz 和 1.05 M H z 1.05MHz 1.05MHz 這兩個(gè)頻率成分之間的舉例 50 K H z 50KHz 50KHz,所以可以看出有兩個(gè)明顯的峰值。
但是會(huì)發(fā)現(xiàn) 1 M H z 1MHz 1MHz 對(duì)應(yīng)的幅值為 1,與原始信號(hào)中該頻率成分的幅值一致,但是 1.05 M H z 1.05MHz 1.05MHz 對(duì)應(yīng)的幅值明顯低于 1,但是其周邊的點(diǎn)上確有不小的幅值,這就是所謂的頻譜泄露,因?yàn)閿?shù)據(jù)點(diǎn)的個(gè)數(shù)影響,使得在 1 M H z 1MHz 1MHz 處有譜線存在,但在 1.05 M H z 1.05MHz 1.05MHz 處沒有譜線存在,使測(cè)量結(jié)果偏離實(shí)際值,同時(shí)在實(shí)際頻率點(diǎn)的能量分散到兩側(cè)的其他頻率點(diǎn)上,并出現(xiàn)一些幅值較小的假譜。
這是因?yàn)樵? 1.05 M H z 1.05MHz 1.05MHz 那個(gè)地方剛好有個(gè)頻點(diǎn),也就是出現(xiàn)了所謂的頻譜泄漏,還是數(shù)據(jù)長度不夠,但這時(shí)是可以通過補(bǔ)零來達(dá)到目的。補(bǔ)零 1000 個(gè)點(diǎn),做 8000 點(diǎn)的FFT。
4、補(bǔ)7000個(gè)零且7000采樣點(diǎn)
采樣 7000 個(gè)信號(hào)數(shù)據(jù)做 FFT,補(bǔ) 7000 個(gè)零 ,做 8000 點(diǎn)的 FFT
①、 MATLAB 源碼
%% [預(yù)處理]
clc; % 清除命令窗口
clear; % 清除工作空間的變量和函數(shù)
clf; % 清除當(dāng)前圖形%% [采樣參數(shù)]
fs = 100e6; % 采樣頻率 (Hz)
ts = 1/fs; % 采樣周期 (s)
N = 7000; % 采樣點(diǎn)數(shù) (個(gè))
n = 0:N-1; % 采樣點(diǎn)索引
t = n*ts; % 采樣時(shí)間軸%% [被采信號(hào) && 繪制時(shí)域波形]
fa = 1e6; % 信號(hào) a 的頻率
fb = 1.05e6; % 信號(hào) b 的頻率
xn = cos(2*pi*fa*t) + cos(2*pi*fb*t); % 被采信號(hào) = 信號(hào)a + 信號(hào)bfigure(1);
plot(t, xn);
axis([0 10e-6 -inf inf]); % x 軸范圍設(shè)置成[0,10us],y 軸范圍最小值和最大值都為無窮
title('xn 時(shí)域圖');
ylabel('幅度/V');
xlabel('時(shí)間/s');%% [尾補(bǔ)零 被采信號(hào) && 繪制時(shí)域波形]
xnwei=[xn zeros(1,7000)]; % 補(bǔ)7000個(gè)零
M = length(xnwei); % FFT 運(yùn)算點(diǎn)數(shù)
X = fft(xnwei, M); % FFT 輸出值
X = [X(1)/N,X(2:M)*2/N]; % 幅度軸,對(duì)FFT輸出值進(jìn)行歸一化處理,得到幅度軸上的值。
k = 0:M-1; % 頻率點(diǎn)索引
f = fs*k/(M-1); % 頻率軸figure(2);
plot(f, abs(X));
axis([0.5e6 1.5e6 0 1.5]); % x 軸范圍設(shè)置成[0.5e6,1.5e6],y 軸范圍設(shè)置成[0,1.5]
title('采樣點(diǎn)7000且補(bǔ)零后共8000個(gè)數(shù)據(jù)點(diǎn)做FFT的頻譜');
ylabel('X(f)');
xlabel('頻率/Hz');
②、仿真及結(jié)果分析
FFT 分辨率為 F s / N = 100 M H z / 8000 = 12.5 K H z F_s/ N=100MHz/8000=12.5KHz Fs?/N=100MHz/8000=12.5KHz,是這兩個(gè)頻率的公約數(shù), 1 M H z = 80 ? 12.5 K H z 1MHz = 80*12.5KHz 1MHz=80?12.5KHz, 1.05 M H z = 84 ? 12.5 K H z 1.05MHz=84*12.5KHz 1.05MHz=84?12.5KHz,所以譜線同時(shí)經(jīng)過 1 M H z 1MHz 1MHz 和 1.05 M H z 1.05MHz 1.05MHz 這兩個(gè)點(diǎn)。
從上圖也可以看到效果也比較理想,將 1 M H z 1MHz 1MHz 和 1.05 M H z 1.05MHz 1.05MHz 的兩個(gè)信號(hào)頻率分開。
五、補(bǔ)零的好處
- 使數(shù)據(jù) N 為 2 的整次冪,便于使用 FFT
- 補(bǔ)零后,其實(shí)是對(duì) DFT 結(jié)果做了插值,克服“柵欄"效應(yīng),使譜外觀平滑化。我把“柵欄"效應(yīng)形象理解為,就像站在柵欄旁邊透過柵欄看外面風(fēng)景,柵欄會(huì)擋住比較多風(fēng)景,此時(shí)就可能漏掉較大頻域分量,但是補(bǔ)零以后,相當(dāng)于你站遠(yuǎn)了,風(fēng)景就看的越來越清楚了。
- 由于對(duì)時(shí)域數(shù)據(jù)的截短必然造成頻譜泄露,因此在頻譜中可能出現(xiàn)難以辨認(rèn)的譜峰,補(bǔ)零在一定程度上能消除這種現(xiàn)象。
對(duì)信號(hào)進(jìn)行頭補(bǔ)零或尾補(bǔ)零再得到的幅頻響應(yīng)相等,相頻響應(yīng)不同
補(bǔ)零會(huì)使頻譜圖中的頻率點(diǎn)的數(shù)量增加,從而使得頻譜圖更加的光滑連續(xù),但是補(bǔ)零不能對(duì)頻譜圖中的頻率分辨率、頻率值以及幅值有所改善。
- 補(bǔ)零(Zero-padding)是在FFT計(jì)算中向輸入信號(hào)序列的末尾添加零值,從而增加信號(hào)的長度。這樣做的主要目的是在頻域中插入更多的零頻率樣本,以獲得更好的頻譜分析圖。
- 補(bǔ)零可以在一定程度上改善頻譜圖的可視化效果,使頻譜圖在頻率軸上呈現(xiàn)更平滑的外觀。這是因?yàn)檠a(bǔ)零增加了離散傅里葉變換(DFT)點(diǎn)數(shù),從而在頻率軸上產(chǎn)生更多的插值點(diǎn)。然而,這并不意味著補(bǔ)零改善了頻率分辨率或精確性。
- 頻率分辨率由采樣率和FFT長度決定,而補(bǔ)零并不改變采樣率。補(bǔ)零只是對(duì)現(xiàn)有的采樣點(diǎn)進(jìn)行插值,不會(huì)增加頻率分辨率。實(shí)際上,補(bǔ)零只是在現(xiàn)有的頻率分辨率上插入了更多的點(diǎn),而不是提高了分辨率本身。
- 頻率值和幅值也不會(huì)因?yàn)檠a(bǔ)零而改變。補(bǔ)零只是在現(xiàn)有的頻率軸上插入了更多的點(diǎn),對(duì)原有的頻率值和幅值進(jìn)行了插值。這些插值點(diǎn)的值是通過對(duì)原始采樣點(diǎn)進(jìn)行插值計(jì)算得到的,而不是通過補(bǔ)零本身引入的信息。
- 如果希望改善頻率分辨率或精確性,需要增加采樣率或使用更長的FFT長度。
六、資源自取
信號(hào)補(bǔ)零對(duì)信號(hào)頻譜的影響
我的qq:2442391036,歡迎交流!