问一下程序是否正确?有何遗漏

clear
T=1
t=linspace(0,T,1000);
triang=zeros(size(t));

max_harmonics=10;
a=zeros(1,max_harmonics+1);
b=zeros(1,max_harmonics+1);
synth_triang=zeros(size(t));
for n =0:max_harmonics
if mod (n,10)
b(n+1)=1/n;
synth_triang=synth_triang+b(n+1)sin(2pin(1/T)t);
end
end
t=linspace(0,10
T,10*1000);
triang=repmat(triang,10,10);
synth_triang=repmat(synth_triang,10,10);
plot(t,triang,'b-',t,synth_triang,'r--')
legend('Triangular wave', 'Synthesised triangular wave')

img


将这个号函数进行合成

还想加一个显示频谱图的程序不知道怎么加

你好大玉米同学,给你的程序改了两处:
第一是奇偶判断,第二是repmat那个地方

clear
T=1;
t=linspace(0,T,1000);
triang=zeros(size(t));

max_harmonics=10;
a=zeros(1,max_harmonics+1);
b=zeros(1,max_harmonics+1);
synth_triang=zeros(size(t));
for n =0:max_harmonics
    if mod(n,2)==1 % 这里奇数进行计算
        b(n+1)=1/n;
        synth_triang=synth_triang+b(n+1)*sin(2*pi*n*(1/T)*t);
    end
end
t=linspace(0,10*T,10*1000);
triang=repmat(triang,1,10); % 这里还是用110synth_triang=repmat(synth_triang,1,10); %这里还是用110plot(t,triang,'b-',t,synth_triang,'r--')
legend('Triangular wave', 'Synthesised triangular wave')

然后使用频谱图可以考虑fft,即在你的代码后面加上

% 比如对synth_triang进行fft变换
Y = fft(synth_triang);
L = length(synth_triang);
Fs = 1/mean(diff(t));
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = Fs*(0:(L/2))/L;
figure
plot(f,P1) 
title('Single-Sided Amplitude Spectrum of synth\_triang')
xlabel('f (Hz)')
ylabel('|P1(f)|')
axis([0 max_harmonics, -inf, inf])

效果:

img