用matlab固定采样频率500KHZ,分别对100KHZ,250KHZ,400KHZ的正弦波信号进行采样和重建,比较原信号与重建信号的波形;生成代码
时间: 2024-09-25 15:20:32 浏览: 185
在MATLAB中,你可以使用`sin`函数创建不同频率的正弦波,并通过`fixedSampleRate`函数来模拟固定的500kHz采样率。首先,你需要创建一个函数来生成并处理每个信号:
```matlab
% 定义采样率和时间范围
fs = 500e3; % 固定采样频率 500kHz
t = 0:1/fs:1; % 时间向量,长度足够长以包含完整周期
function plot_and_compare(freq)
% 创建不同频率的正弦波
signal = sin(2*pi*freq*t);
% 采样信号到新的时间间隔
sampled_signal = upsample(signal, [1 round(fs/freq)]); % 确保采样的点数等于或大于理论的采样点
% 模拟实际采样过程,固定为500kHz
sampled_signal_fixed = fixedSampleRate(sampled_signal, fs);
% 比较原始信号和重建后的信号
figure;
subplot(2,1,1);
plot(t, signal, 'b', t, sampled_signal_fixed, 'r');
title(sprintf('Original Signal (Freq: %.1f kHz) vs Sampled and Reconstructed (Fixed @ %.1f kHz)', freq, fs));
legend({'Original', 'Reconstructed'}, 'Location', 'best');
% 保存波形图
saveas(gcf, sprintf('signal_comparsion_%dkHz.png', freq));
% 另一个子图显示频率响应损失
subplot(2,1,2);
[~, frq] = freqz(sampled_signal_fixed, [], fs);
plot(frq, abs(frq./max(abs(frq))), 'b', 'LineWidth', 2);
hold on;
plot(frq, abs(freq./(fs/2)), 'k--', 'LineWidth', 1.5);
title('Frequency Response of Original vs Resampled Signal');
xlabel('Frequency (kHz)');
ylabel('Amplitude Ratio');
end
% 调用函数并比较100kHz, 250kHz, 和 400kHz 的信号
plot_and_compare(100);
plot_and_compare(250);
plot_and_compare(400);
```
这段代码会生成三个图形,对比原始正弦波和经过500kHz固定采样后重建的波形,以及它们的频率响应。每种频率的波形都会保存为独立的图片文件。
阅读全文