📄 addwindowdft.m
字号:
% AddWindowDFT
clear;
disp('用DFT对离散信号进行谱分析');
disp('通过选用不同的加窗函数来抑制信号截断造成的频谱泄漏');
Repeat = 1;
disp('输入信号x(n),n为下标');
n = input('n=');
L = length(n);
x = input('x=');
disp(sprintf('输入截取信号的长度N(即窗长),N<%d',L));
N = input('N=');
x1 = x(1:N);
k = 0:L-1;
Xk = dft(x,L);
Xk1 = dft(x1,L);
figure;
subplot(2,1,1),stem(n,x),title('原始信号');
subplot(2,1,2),stem(k,abs(Xk)),title('原始信号频谱');
figure;
subplot(2,1,1),stem(n,[x1,zeros(1,L-N)]),title('不加窗的截断信号');
subplot(2,1,2),stem(k,abs(Xk1)),title('不加窗的信号频谱');
while Repeat == 1
disp('选择窗函数');
disp('1:boxcar');
disp('2:triang');
disp('3:hanning');
disp('4:hamming');
disp('5:blackman');
Ans = input('Choose=');
switch Ans
case 1
w = (boxcar(N))';
x2 = x1.*w;
Xk2 = dft(x2,L);
figure;
subplot(2,1,1),stem(n,[x2,zeros(1,L-N)]),title('用boxcar截断信号');
subplot(2,1,2),stem(k,abs(Xk2)),title('加窗后的信号频谱');
case 2
w = (triang(N))';
x2 = x1.*w;
Xk2 = dft(x2,L);
figure;
subplot(2,1,1),stem(n,[x2,zeros(1,L-N)]),title('用triang截断信号');
subplot(2,1,2),stem(k,abs(Xk2)),title('加窗后的信号频谱');
case 3
w = (hanning(N))';
x2 = x1.*w;
Xk2 = dft(x2,L);
figure;
subplot(2,1,1),stem(n,[x2,zeros(1,L-N)]),title('用hanning截断信号');
subplot(2,1,2),stem(k,abs(Xk2)),title('加窗后的信号频谱');
case 4
w = (hamming(N))';
x2 = x1.*w;
Xk2 = dft(x2,L);
figure;
subplot(2,1,1),stem(n,[x2,zeros(1,L-N)]),title('用hamming截断信号');
subplot(2,1,2),stem(k,abs(Xk2)),title('加窗后的信号频谱');
case 5
w = (blackman(N))';
x2 = x1.*w;
Xk2 = dft(x2,L);
figure;
subplot(2,1,1),stem(n,[x2,zeros(1,L-N)]),title('用blackman截断信号');
subplot(2,1,2),stem(k,abs(Xk2)),title('加窗后的信号频谱');
%otherwise
%disp('请选择窗函数');
end
Repeat = input('Still want to continue,Yes=1 No=0? Ans=');
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -