Triangle Wave

简单题,但是要写聪明些可不太简单。

大多数人都是分两部写:

#include <stdio.h>
int main(void)
{
    int n, fre, amp;
    scanf("%d", &n);
    while (n--) {
        scanf("%d%d", &fre, &amp);
        while (amp--) {
            int i, j;
            for (i = 1; i <= fre; i++) {
                for (j = 1; j <= i; j++)
                    printf("%d", i);
                printf("\n");
            }
            for (i = fre-1; i >= 1; i--) {
                for (j = 1; j <= i; j++)
                    printf("%d", i);
                printf("\n");
            }
            if (amp)
                printf("\n");
        }
        if (n)
            printf("\n");
    }
    return 0;
}

其实还可以这样写:

#include <stdio.h>
#include <stdlib.h>
int main(void)  
{  
    int n, fre, amp;
    scanf("%d", &n);  
    while (n--) {  
        scanf("%d%d", &fre, &amp);
        fre--;
        while (amp--) {  
            int x, y, n = 1;
            for (y = -fre; y <= fre; y++, n++) {
            	for (x = 0; x <= fre; x++)
            		if (x+abs(y) <= fre)
            			printf("%d", fre-abs(y)+1);
				printf("\n");
			}
            if (amp)  
                printf("\n");  
        }  
        if (n)  
            printf("\n");  
    }  
    return 0;  
}

以下是一个Python的GUI程序,用于生成和绘制三角波,并对其进行FFT变换。你可以通过交互式的方式改变三角波的基本频率和幅度,并观察其对应的频域幅值谱的变化。 ```python import numpy as np import matplotlib.pyplot as plt import tkinter as tk from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg class FFTTriangleGUI: def __init__(self): self.fig, self.axs = plt.subplots(2, 1, figsize=(8, 6)) self.canvas = FigureCanvasTkAgg(self.fig, master=root) self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1) self.freq_slider = tk.Scale(root, from_=1, to=20, resolution=0.1, orient=tk.HORIZONTAL, label='Frequency (Hz)', command=self.update_triangle) self.freq_slider.pack(side=tk.TOP, fill=tk.BOTH, padx=5, pady=5) self.amp_slider = tk.Scale(root, from_=0, to=1, resolution=0.01, orient=tk.HORIZONTAL, label='Amplitude', command=self.update_triangle) self.amp_slider.pack(side=tk.TOP, fill=tk.BOTH, padx=5, pady=5) self.freq = 5 self.amp = 0.5 self.update_triangle(None) def update_triangle(self, event): t = np.linspace(0, 1, 400, endpoint=False) x = np.concatenate((t, np.flip(t))) x -= np.mean(x) x *= self.amp x *= np.sin(2 * np.pi * self.freq * t) self.axs[0].clear() self.axs[0].plot(t, x[:len(t)]) self.axs[0].set_xlabel('Time (s)') self.axs[0].set_ylabel('Amplitude') self.axs[0].set_ylim((-1, 1)) X = np.fft.fft(x) freqs = np.fft.fftfreq(len(x)) * 400 self.axs[1].clear() self.axs[1].plot(freqs, np.abs(X)) self.axs[1].set_xlim((0, 20)) self.axs[1].set_xlabel('Frequency (Hz)') self.axs[1].set_ylabel('Magnitude') self.canvas.draw() if __name__ == '__main__': root = tk.Tk() root.title('FFT Triangle Wave Demo') FFTTriangleGUI() root.mainloop() ``` 运行程序后,将会弹出一个窗口,其中包含两个图,一个是三角波的时域波形,另一个是其对应的频域幅值谱。你可以通过拖动滑动条来改变三角波的基本频率和幅度。注意,频率轴的范围限制在0-20Hz之间,因此如果你将频率调整超过该范围,可能会看不到某些谐波分量的幅值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值