用Matlab设计一个频谱分析仪,实现典型信号的参数化输入、波形显示、时域基本参数输出、频谱显示与声音播放等功能,内容: 1) 编程实现一个信号发生器,产生典型信号波形,能显示波形与时域分析参数。典型信号包括:正弦波、方波、三角波、矩形窗函数、噪声信号等。时域参数包括:周期T、频率f、峰值P/双峰值、均值、均方值、方差等;
时间: 2023-10-20 19:34:19 浏览: 150
基于LabVIEW和MATLAB的频谱分析仪设计.pdf
以下是一个更加完整的频谱分析仪的Matlab代码实现,其中包括信号发生器、波形显示、时域分析、频谱分析和声音播放等功能。
```matlab
clc;
clear all;
close all;
% 设置采样率和采样点数
Fs = 44100;
N = 8192;
% 生成正弦波
f1 = 440;
t = 0:1/Fs:N/Fs;
s1 = sin(2*pi*f1*t);
% 生成方波
f2 = 220;
duty = 0.5;
s2 = square(2*pi*f2*t, duty);
% 生成三角波
f3 = 660;
s3 = sawtooth(2*pi*f3*t);
% 生成矩形窗函数
f4 = 220;
w = rectwin(N);
s4 = w' .* sin(2*pi*f4*t);
% 生成噪声信号
s5 = randn(1,N);
% 选择信号波形
disp('请选择信号波形:');
disp('1. 正弦波');
disp('2. 方波');
disp('3. 三角波');
disp('4. 矩形窗函数');
disp('5. 噪声信号');
sel = input('输入数字选择波形:');
switch(sel)
case 1
s = s1;
name = '正弦波';
case 2
s = s2;
name = '方波';
case 3
s = s3;
name = '三角波';
case 4
s = s4;
name = '矩形窗函数';
case 5
s = s5;
name = '噪声信号';
otherwise
disp('输入错误,请重新输入。');
return;
end
% 绘制波形图像
subplot(2,2,1);
plot(t(1:500), s(1:500));
title(name);
xlabel('时间 (s)');
ylabel('幅度');
% 计算时域分析参数
P = max(s); % 峰值
P2P = 2*P; % 双峰值
mean_val = mean(s); % 均值
rms_val = rms(s); % 均方值
var_val = var(s); % 方差
T = 1/f1; % 周期
f = f1; % 频率
% 输出时域分析参数
disp(['峰值:', num2str(P)]);
disp(['双峰值:', num2str(P2P)]);
disp(['均值:', num2str(mean_val)]);
disp(['均方值:', num2str(rms_val)]);
disp(['方差:', num2str(var_val)]);
disp(['周期:', num2str(T)]);
disp(['频率:', num2str(f)]);
% 进行频谱分析
S = fft(s, N);
S_mag = abs(S)/N;
f_axis = linspace(0, Fs, N);
% 绘制频谱图像
subplot(2,2,2);
plot(f_axis(1:N/2), S_mag(1:N/2));
title('频谱');
xlabel('频率 (Hz)');
ylabel('幅度');
% 播放声音
subplot(2,2,3:4);
sound(s, Fs);
% 保存数据到文件
data = [t', s'];
filename = [name, '.csv'];
csvwrite(filename, data);
```
运行上述代码,按照提示输入数字选择不同的波形,即可生成相应的信号波形,并显示时域分析参数和频谱图像,同时支持声音播放功能,并将数据保存到CSV文件中。可以通过手动打开CSV文件来查看数据。
阅读全文