本文是DSP Arduino系列的續篇。上文中,我們介紹了傅立葉變換的基礎知識,並使用MATLAB學習了如何將正弦訊號從時域變換到頻域。這次,在添加了失真濾波器後,我們將在MATLAB中創建一個簡單的GUI來記錄我們的語音訊號!
在前文中,我們已經得到了一個通過了40階低通濾波器的訊號。在此步中,我們需要添加另一個會使訊號失真的濾波器。這可以通過MATLAB中的filter函數來完成。您可能已經想到了,我們還需要添加下文所示的係數。
[s,fe2,bits] = wavread(‘s’);
sound(s,fe2);
pause(9)
b = [0.1662, -0.0943, 0.2892, -0.1227, 0.2348, 0.0180, 0.0415, 0.1388, -0.0616, 0.1290, -0.0434, 0.0420, -0.0010, -0.0009, 0.0032, -0.0015, 0.0056] ;
a = [1.0000, -0.7548, 3.4400, -1.6385, 4.8436, -0.8156, 3.2813, 1.2582, 0.6571, 2.1922, -0.4792, 1.4546, -0.2905, 0.4693, -0.0208, 0.0614, 0.0120] ;
x = filter(b,a,s);
figure
plot(t1,s2,t1,x),grid
title(‘The initial signal vs the distorted signal’);
sound(x,fe2);
pause(9)
audiowrite(‘x.wav’,x,fe2);
請注意,s是指在上一步中應用了低通濾波器之後獲得的訊號。在圖1中,藍色訊號代表原始訊號,綠色訊號代表失真訊號。與藍色訊號相比,綠色訊號具有較低的幅度。
為了進一步進行檢驗,我們將使用FFT演算法。
為了更好地進行比較,我們對兩個訊號分別進行了繪製。下面的兩個圖將會說明在時域和頻域中兩者之間的差異。
% s si x signals (time-frequency domain)
t1=(0:length(s)-1)/(fe2);
figure
subplot(2,1,1), plot(t1,s),grid
title(‘s signal in time domain(low-pass filter)’);
xlabel(‘Time’)
ylabel(‘Amplitude’)
t2=(0:length(x)-1)/(fe2);
subplot(2,1,2), plot(t2,x),grid
title(‘x signal in time domain(distorted)’);
xlabel(‘Time’)
ylabel(‘Amplitude’)
在時域中,圖形發生了很大的變化:s訊號幅度較小(雖然這兩張圖在視覺可能會給您一種x訊號具有較高幅值的感覺)。如果您仔細看一下y軸的比例,就可以看出兩者幅度的差異。對於這一現象,您可能會想知道是應用了哪種濾波,以及是什麼修改方式導致的這些系數值。
答案可以在頻域中找到:
figure
s1 = abs(fft(s,NS));
subplot(2,1,1), plot((0:(NS-1))/NS*fe2, s1), grid
title(‘Single-Sided Amplitude Spectrum of s(t)’)
xlabel(‘Frequency (Hz)’)
ylabel(‘|s(k)|’)
x1 = abs(fft(x,NS));
subplot(2,1,2), plot((0:(NS-1))/NS*fe2, x1), grid
title(‘Single-Sided Amplitude Spectrum of x(t)’)
xlabel(‘Frequency (Hz)’)
ylabel(‘|X(k)|’)
我們應用傅立葉變換來得到等效頻率。正如您在圖3中看到的那樣,y軸對稱的中心點大約是取樣速率的1/2。
這兩個訊號具有不同的頻譜
研究此頻率範圍內的樣本點是很困難的。因此,讓我們將目標鎖定在2000 Hz左右處,對該範圍內的幅值進行研究。
如果我們仔細觀察幅值變化,可以看出兩個訊號具有相同的形狀,而它們在圖3中看起來並不相似。上一張圖像中的兩個訊號之所以看起來不同是因為它們的坐標軸比例設置不同。
從兩個圖中,我們可以觀察到振幅降低了。可是我們還是不知道濾波器的頻率回應是什麼,以及它對我們的訊號帶來了其他什麼變化。在這種情況下,我們使用Matlab對其進行繪製。
[h1,w1] = freqz(b,a,NS,fe2);
figure
plot(w1,abs(h1)), grid
xlabel(‘Frequency (Hz)’)
ylabel(‘Frequency response’)
這個新的濾波器稱為帶通濾波器。因為這是第一次使用該濾波器,所以在應用之前,我們先瞭解一下它的一些屬性:
您可以看到,圖6中的濾波器和圖5中的濾波器具有相似的形狀。因此,我們已經獲得了一個新的濾波器。