信號與系統實驗
1.諧波的疊加
2.方波的函數逼近
3.吉布斯現象的驗證
題目描述
1.寫出由程序
t=-2*pi:0.001:2*pi;
y=sawtooth(0.5*t,1);
plot(t,y)
形成的信號經週期延拓得到的週期信號的時域表達式;手動計算函數的傅里葉係數,再代入方程,用MATLAB編程計算其指數形式的傅里葉係數(計算至11次諧波),畫出前11次諧波疊加的波形,瞭解並指出吉布斯現象。
信號波形:
t1=-2*pi:0.001:2*pi;
y1=sawtooth(0.5*t1,1);
subplot(2,1,1);
plot(t1,y1);
週期延拓 :
t2=-8*pi:0.001:8*pi;
y2=sawtooth(0.5*mod(t2,4*pi),1);
subplot(2,1,2);
plot(t2,y2);
諧波疊加:
t=-2*pi:0.001:2*pi;
g=zeros(size(t));
f=zeros(size(t));
for n=-11:11
g=1j/(n*pi);
f=f+g*exp(1j*0.5*t*n);
end
y=sawtooth(0.5*t,1);
xlabel('t');
plot(t,y);
hold on;
plot(t,f);
legend('y 原函數','f 諧波疊加波形圖');
2. 利用square_wave函數f=,將t從0到4π等間隔取1001個值,輸入非負整數n,輸出爲1001列的行向量,計算f對於不同輸入n的輸出,我們可以通過調用n=20或更大的函數來測試函數,並繪製波形圖,讀出 n = 200 時 square_wave 函數生成的波形,觀察並記錄該波形的參數,如幅度、週期等,用MATLAB的square函數畫出一致的波形。
t = linspace(0, 4*pi, 1001);
n = 200;
for t1 = 1 : length(t)
t2= t(t1);
k = 1 : n;
a = sin(t2* (2*k-1));
b = 2 * k - 1;
theSum(t1) = sum(a ./ b);
end
plot(t,theSum);
hold on;
f=0.8*square(t);
plot(t,f);
axis([0 4*pi -1 1]);
legend('square-wave','square');
3.
(1)根據傅里葉級數反推出原函數f(t)的閉合形式;
(2)計算函數f(t)的傅里葉級數的三角形式,與上面的進行對比,觀察原函數的傅里葉級數的cos項的係數。畫出一些不同N值對應的的波形圖,與原函數f(t)波形圖進行對比,觀察在哪些時刻f(t)與值相差最大,隨着,二者的差值是逐漸趨近於一個確定的值還是無窮大,如果是一個確定的值,計算出來它,結合吉布斯現象,畫差值與N的波形圖。
(3)畫出一些不同N值對應的的波形圖,將其與的波形圖進行對比,利用所學的信號與系統和數學知識分析它們不同的原因。畫出一些不同N值對應的的波形圖,與原函數f(t)波形圖進行對比,觀察在哪些時刻f(t)與值相差最大,隨着,二者的差值是逐漸趨近於一個確定的值還是無窮大,如果是一個確定的值,計算出來它,結合吉布斯現象,畫差值與N的波形圖。
(4)畫出一些不同N值對應的的波形圖,將其與的波形圖進行對比,利用所學的信號與系統和數學知識分析它們不同的原因。
(1)t=-pi:0.001:pi;
y=-pi/2*sawtooth(t);
n=5;
f = zeros(size(t));
for n0=1:n
f=f+(sin(n0*t))/n0;
end
plot(t,f);
hold on;
plot(t,y);
title(['n=', num2str(n)]);
(3)
t=-pi:0.001:pi;
N=input(‘N=’);
for j=1: N
f = zeros(size(t));
for i=1:j
f = f + (sin(i*t))/i;
end
fmax(j) = (max(f)-pi/2)/pi;
end
figure(1); plot(t, f, 'r');
hold on;
y=-pi/2*sawtooth(t);
plot(t,y);axis([-4 4 -2 2]) ;
title(['N=', num2str(N)]);
figure(2); plot(fmax) ;
legend('(f_{n}-f)/f(max)');
axis([0 200 -0.2 0.15]);
title('吉布斯現象');
(4)
t=-pi:0.001:pi;
N=input(‘N=’);;
F0= zeros(size(t));
for j=1:N
f = zeros(size(t));
for i=1:j
f = f + (sin(i*t))/i;
F0=F0+(sin(i*t))/i;
end
end
F=F0/n;
y=-pi/2*sawtooth(t);
plot(t, f);hold on;
plot(t,y);
plot(t,F) ;title(['n=', num2str(n)]);
legend('f_{N}(t)','sawtooth','F_{N}(t)');
|