写上题matlab代码
时间: 2024-10-29 14:05:38 浏览: 8
2018数学建模国赛B题全国一等奖MATLAB代码.rar
在MATLAB中,你可以使用`sin()`函数创建一个200 Hz正弦波,然后利用`periodogram()`函数来展示其频谱,同时模拟采样过程并显示离散信号。以下是创建这种信号并进行采样的简单示例代码:
```matlab
% 设置参数
freq = 200; % 频率(Hz)
duration = 1/20; % 总时间(秒),选择两个周期
pulse_width_ratio = 1/4; % 脉冲宽度与周期比例
% 创建周期性方波信号
t = 0:1/fs:duration; % 时间向量 (fs是假设的采样频率)
amp = linspace(0, 2, length(t)); % 信号幅度
waveform = amp .* sin(2*pi*freq*t); % 正弦波
pulse_width = pulse_width_ratio * duration; % 脉冲宽度
window = rectpuls(t, [0 duration - pulse_width]); % 窗口函数(脉冲宽度周期)
% 采样信号
fs = 4e3; % 实际采样频率(4 kHz)
sampled_waveform = interp1(t, waveform, t_samples, 'spline'); % 用spline插值法进行等间距采样
t_samples = 0:1/fs:length(waveform)-1; % 采样点的时间向量
% 计算并绘制频谱
figure;
[pxx, f] = periodogram(sampled_waveform, [], [], fs);
plot(f, 10*log10(pxx)); % 绘制功率谱密度图
% 显示原始信号和采样后的离散信号波形
figure;
subplot(2, 1, 1);
plot(window .* waveform); % 原始信号(带窗)
title('Original Signal');
xlabel('Time');
ylabel('Amplitude');
subplot(2, 1, 2);
plot(t_samples, sampled_waveform); % 离散化信号
title('Discrete Sampled Signal');
xlabel('Sample Index');
ylabel('Amplitude');
```
在这个例子中,我们首先生成了原始的方波信号,然后应用了一个矩形窗函数来限制显示的区间。接着进行了等间距的4kHz采样,并计算了离散信号的频谱。最后,我们展示了原始信号波形和采样后的信号波形。
注意:实际运行这段代码前,你需要确保`fs`变量设置的采样频率足够高,以保证无失真。这里`fs=4e3`只是为了演示目的,如果你的计算机性能有限,可能需要调整至更低的值。
阅读全文