⽤以演⽰增采样、减采样的MATLAB 程序以下MATLAB程序经作者核查⽆误,请放⼼使⽤% 演⽰增采样、减采样的过程,给出信号及其频谱。%
h_fig1 = figure;
set(h_fig1, 'unit', 'normalized', 'position', [0.0, 0.0, 0.99, 0.94]);set(h_fig1, 'defaultuicontrolunits', 'normalized');
h_text1 = uicontrol(gcf, 'Style', 'text', 'Position', [0.22, 0., 0.62, 0.07],...
'String', '演⽰信号的增采样与减采样', 'FontName', '⿊体', 'ForegroundColor', 'r', ...'FontSize', 32, 'FontWeight', 'Bold', 'BackgroundColor', [1, 1, 1]); set(gcf, 'color', 'w')h_pushbutton1 = uicontrol(h_fig1, 'Style', 'PushButton', 'Position', [0.8, 0.9, 0.08, 0.07],...
'string', '往下页', 'BackgroundColor', 'y', 'ForegroundColor', 'r', 'FontSize', 14, 'FontWeight', 'Bold',...'callback', ['set(h_fig1,''visible'', ''off''),',...'set(h_fig2,''visible'', ''on'')'] )
h_pushbutton2 = uicontrol(h_fig1, 'Style', 'PushButton', 'Position', [0.9, 0.9, 0.08, 0.07],...
'string', '退出', 'BackgroundColor', [0.8 0.9 0.8], 'ForegroundColor', 'r', 'FontSize', 14, 'FontWeight', 'Bold',...'callback', ['delete(h_fig1),', 'delete(h_fig2)'])
h_axes01 = axes('Box', 'on', 'Position', [0.07, 0.17, 0.25, 0.2], 'FontSize', 8) % 在第2 个图形窗中创建轴对象h_axes02 = axes('Box', 'on', 'Position', [0.4, 0.17, 0.25, 0.2], 'FontSize', 8) % 在第2 个图形窗中创建轴对象h_axes03 = axes('Box', 'on', 'Position', [0.72, 0.17, 0.25, 0.2], 'FontSize', 8) % 在第2 个图形窗中创建轴对象h_axes04 = axes('Box', 'on', 'Position', [0.07, 0.52, 0.25, 0.2], 'FontSize', 8) % 在第2 个图形窗中创建轴对象h_axes05 = axes('Box', 'on', 'Position', [0.4, 0.52, 0.25, 0.2], 'FontSize', 8) % 在第2 个图形窗中创建轴对象h_axes06 = axes('Box', 'on', 'Position', [0.72, 0.52 0.25, 0.2], 'FontSize', 8) % 在第2 个图形窗中创建轴对象h_fig2 = figure
set(h_fig2, 'unit', 'normalized', 'position', [0.0, 0.0, 0.99, 0.94]);set(h_fig2, 'defaultuicontrolunits', 'normalized');
h_text2 = uicontrol(h_fig2, 'Style', 'text', 'Position', [0.22, 0.92, 0.62, 0.07],...'String', '演⽰信号的增采样与减采样', 'FontName', '⿊体', 'ForegroundColor', 'r', ...'FontSize', 28, 'FontWeight', 'Bold', 'BackgroundColor', [1, 1, 1]); set(gcf, 'color', 'w')h_pushbutton3 = uicontrol(h_fig2, 'Style', 'PushButton', 'Position', [0.8, 0.92, 0.08, 0.07],...'string', '往前页', 'BackgroundColor', 'y', 'ForegroundColor', 'r', 'FontSize', 14, 'FontWeight', 'Bold',...'callback', ['set(h_fig2,''visible'', ''off''),',...'set(h_fig1,''visible'', ''on'')'])
h_pushbutton4 = uicontrol(h_fig2, 'Style', 'PushButton', 'Position', [0.9, 0.92, 0.08, 0.07],...
'string', '退出', 'BackgroundColor',[0.8 0.9 0.8], 'ForegroundColor', 'r', 'FontSize', 14, 'FontWeight', 'Bold',...'callback', ['delete(h_fig1),', 'delete(h_fig2)'])set(gcf, 'color', 'w')
h_axes1 = axes('Box', 'on', 'Position', [0.07, 0.07, 0.25, 0.2], 'FontSize', 8) % 在第2 个图形窗中创建轴对象h_axes2 = axes('Box', 'on','Position', [0.4, 0.07, 0.25, 0.2], 'FontSize', 8) % 在第2 个图形窗中创建轴对象h_axes3 = axes('Box', 'on', 'Position', [0.72, 0.07, 0.25, 0.2],'FontSize', 8) % 在第2 个图形窗中创建轴对象h_axes4 = axes('Box', 'on', 'Position', [0.07, 0.37, 0.25, 0.2], 'FontSize', 8) % 在第2 个图形窗中创建轴对象h_axes5 = axes('Box', 'on', 'Position', [0.4, 0.37, 0.25, 0.2], 'FontSize', 8) % 在第2 个图形窗中创建轴对象h_axes6 =axes('Box', 'on', 'Position', [0.72, 0.37 0.25, 0.2], 'FontSize', 8) % 在第2 个图形窗中创建轴对象h_axes7 = axes('Box', 'on', 'Position',[0.07, 0.67, 0.25, 0.2], 'FontSize', 8) % 在第2 个图形窗中创建轴对象h_axes8 = axes('Box', 'on', 'Position', [0.4, 0.67, 0.25, 0.2],
'FontSize', 8) % 在第2 个图形窗中创建轴对象h_axes9 = axes('Box', 'on', 'Position', [0.72, 0.67, 0.25, 0.2], 'FontSize', 8) % 在第2 个图形窗中创建轴对象
set(0, 'CurrentFigure', h_fig1);
% ----------------------------------------------------% 产⽣复合正弦序列x(n)n1 = 0:15;
x = sin(pi*n1/8) + 2*sin(pi*n1*2/8);w = [0:1:500]*2*pi/500;
% 求⼀个复合正弦序列x(n) 的DTFTX = x*exp(-j*n1'*w);magX = abs(X);
% 通过FFT 求周期(16点)的复合正弦序列x(n) 的DFTk = 0:15;Xk = fft(x,16);
magXk = abs(Xk(1:1:16));% 显⽰复合正弦序列x(n)subplot(h_axes04)
H=stem(n1,x); grid; set(H,'markersize',2);line([0 16],[0 0]); axis([0,15,-3.1,3.1]);
xlabel('n', 'FontSize', 12); ylabel('x(n)', 'FontSize', 12);title('(1)给定的复合正弦序列', 'FontSize', 12);set(h_axes04, 'LineWidth', 2)
% ----------------------------------------------------% 显⽰复合正弦序列x(n) 的DTFT 模值subplot(h_axes05)plot(w/pi, magX,'b'); grid;
set(gca, 'XTickMode', 'manual', 'XTick', [0,0.125,0.5,1,1.5,1.875,2]);xlabel('w / \\pi', 'FontSize', 12); ylabel('|X(exp(jw))|', 'FontSize', 12);title('(2)x(n) 的DTFT 模值', 'FontSize', 12);% 显⽰复合正弦序列x(n) 的DFTsubplot(h_axes06)
H=stem(k, magXk, 'b'); grid; set(H,'markersize', 2);xlabel('k', 'FontSize', 12); ylabel('|X(k)|', 'FontSize', 12');title('(3)x(n) 的DFT 模值', 'FontSize', 12); axis([0, 16, 0, 20]);set(h_axes05, 'LineWidth', 2)
% ----------------------------------------------------% 在序列x(n) 的每两个样点之间插⼊两个零值样点,得扩张序列w(n)x1 = [1 0 0];w1 = x1'* x;w = (w1(:)');subplot(h_axes01)% 显⽰w(n)
H = stem(w,'b'); grid; set(H,'markersize', 2); axis([0,48,-4.1,4.1]);line([0 48], [0 0]); text(25, 3, 'U = 3', 'FontWeight', 'Bold');xlabel('n', 'FontSize', 12); ylabel('w(n)', 'FontSize', 12);title('(4)x(n) 的样点之间补两个零值样点', 'FontSize', 12);% 求w(n) 的DTFTm = length(w);n2 = 0:m-1;
w2 = [0:1:500]*2*pi/500;W=w*exp(-j*n2'*w2);magW = abs(W);
% 通过FFT 求w(n) 的DFTk1 = 0:47;Wk = fft(w);
magWk = abs(Wk(1:1:48));% 显⽰w(n) 的DTFTsubplot(h_axes02)
plot(w2 / pi, magW, 'b'); grid;
xlabel('w / \\pi', 'FontSize', 12); ylabel('|W(exp(jw))|', 'FontSize', 12);title('(5)w(n) 的DTFT', 'FontSize', 12);set(h_axes02, 'LineWidth', 2)% 显⽰w(n) 的DFTsubplot(h_axes03)
H=stem(k1, magWk, 'b'); grid; set(H,'markersize', 2); axis([0, 48, 0, 20]); xlabel('k', 'FontSize', 12); ylabel('|W(k)|', 'FontSize', 12);title('(6)w(n) 的DFT', 'FontSize', 12);set(h_axes01, 'LineWidth', 2)
% ----------------------------------------------------set(0, 'CurrentFigure', h_fig2);% 求理想低通滤波器的冲激响应N = 48; wc = pi/4;n3 = 0:N-1;r = (N-1)/2;
hdn = sin(wc *(n3-r))/ pi./(n3-r); % 理想低通滤波器的冲激响应if rem(N,2)~=0hdn(r+1) = wc / pi;end
wn1 = boxcar(N); % 矩形窗
hn1 = hdn.*wn1' % 将冲激响应序列加窗(矩形窗),得序列hn1wn2 = hamming(N); % Hamming 窗
hn2 = 3*hdn.*wn2'; % 将冲激响应序列加窗(Hamming 窗),得序列hn2m1 = length(hn2);n4 = 0:m1-1;
w3 = [0:1:500]*2*pi/500;
H=hn2 * exp(-j*n4'*w3); % hn2 的DTFTmagH = abs(H); % 得hn2 的DTFT 的模值k2 = 0:47;
Hk = fft(hn2); % 求hn2 的DFT
magHk = abs(Hk(1:1:48)); % 得hn2 的DFT 的模值subplot(h_axes7); % 显⽰加窗后的冲激响应序列hn2H = stem(hn2,'.'); grid; axis([0,48,-0.2,0.8]);
line([0 48],[0 0]); xlabel('n', 'FontSize', 12); ylabel('h(n)', 'FontSize', 12');title('(7)加窗后的滤波器冲激响应序列', 'FontSize', 12);set(h_axes7, 'LineWidth', 2)
subplot(h_axes8); % 显⽰加窗后的冲激响应序列hn2 的DTFT 模值plot(w3/pi,magH,'b'); grid;
xlabel('w / \\pi', 'FontSize', 12); ylabel('|H(exp(jw))|', 'FontSize', 12);title('(8)滤波器冲激响应序列的DTFT', 'FontSize', 12);set(h_axes8, 'LineWidth', 2)
set(gca, 'XTickMode', 'manual', 'XTick', [0,0.25,0.5,1,1.5,1.75,2]);subplot(h_axes9); % 显⽰加窗后的冲激响应序列hn2 的DFT 模值H = stem(k2,magHk,'b'); grid; set(H,'markersize', 2); axis([0,48,0,3.5]);xlabel('k', 'FontSize', 12); ylabel('|H(k)|', 'FontSize', 12);title('(9)滤波器冲激响应序列的DFT', 'FontSize', 12);set(h_axes9, 'LineWidth', 2)
% ----------------------------------------------------k2 = 0:47;
Vk = Wk .* Hk; % 对扩张序列w(n) 进⾏低通滤波(使⽤经Hamming 窗加窗的冲激响应序列)magVk =abs(Vk(1:1:48));
v = ifft(Vk, 48); % 进⾏IFFT运算,得滤波序列vm2 = length(v);
n5 = 0:m2-1;
w3 = [0:1:500]*2*pi/500;
V = v * exp(-j*n5'*w3); % 求滤波序列v 的DTFTmagV = abs(V);
subplot(h_axes4) % 显⽰滤波序列v 的DFT 模值
H = stem(k2, magVk,'b'); grid; set(H,'markersize',2); axis([0,48,0,60]);xlabel('k', 'FontSize', 12); ylabel('|V(k)|', 'FontSize', 12);title('(10)滤波序列v(n) 的DFT 模值', 'FontSize', 12);set(h_axes4, 'LineWidth', 2)
subplot(h_axes5) % 显⽰滤波序列v 的DTFT 模值plot(w3/pi,magV,'b'); grid;
xlabel('w / \\pi', 'FontSize', 12); ylabel('|V(exp(jw))|', 'FontSize', 12);title('(11)滤波序列v(n) 的DTFT 模值', 'FontSize', 12);set(h_axes5, 'LineWidth', 2)subplot(h_axes6) % 显⽰滤波序列v
H = stem(n5,v,'b'); grid; set(H,'markersize', 2); axis([0,48,-3.1,3.1]);xlabel('n', 'FontSize', 12); ylabel('v(n)', 'FontSize', 12);title('(12)滤波序列', 'FontSize', 12);set(h_axes6, 'LineWidth', 2)line([0 48],[0 0]);
% ----------------------------------------------------y = v(1:4:length(v)); % 对滤波序列v 进⾏抽取(因⼦D = 4), 得序列y m3 = length(y);n6 = 0:m3-1;
w3 = [0:1:500]*2*pi/500;
Y=y*exp(-j*n6'*w3); % 求序列y 的DTFTmagY = abs(Y);k1 = 0:11;
Yk = fft(y); % 求序列y 的DFTmagYk = abs(Yk(1:1:12));
subplot(h_axes1); % 显⽰抽取原序列yH = stem(n6,y,'b'); grid; set(H,'markersize',2);xlabel('n', 'FontSize', 12); ylabel('y(n)', 'FontSize', 12);
title('(13)抽取所得的序列', 'FontSize', 12); text(3, 2.5, 'D = 4', 'FontWeight', 'Bold'); set(h_axes1, 'LineWidth', 2)subplot(h_axes2); % 显⽰抽取原序列y 的DTFT 模值plot(w3/pi,magY,'b'); grid;
xlabel('w / \\pi', 'FontSize', 12); ylabel('|Y(exp(jw))|', 'FontSize', 12);title('(14)抽取所得序列的DTFT 模值', 'FontSize', 12);set(h_axes2, 'LineWidth', 2)
% xlabel('frequency in unit of pi'); ylabel('|y|'); title('Y(exp(jw)');subplot(h_axes3); % 显⽰抽取原序列y 的DFT 模值
H = stem(k1,magYk,'b'); grid; set(H,'markersize',2); axis([0,12,0,15]);xlabel('k', 'FontSize', 12); ylabel('|Y(k)|', 'FontSize', 12);title('(15)抽取所得序列的DFT 模值', 'FontSize', 12);set(h_axes3, 'LineWidth', 2)
% ----------------------------------------------------set(0, 'CurrentFigure', h_fig1);set(h_fig2,'Visible',off');
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务