matlab产生两个纯音信号并叠加绘制时域波形,频谱图,声谱图
时间: 2024-05-15 17:15:46 浏览: 167
matlab实现对二维波形数据频谱、频率-波数谱、能量谱的绘制
5星 · 资源好评率100%
生成两个纯音信号:
```matlab
fs = 44100; % 采样率
t = 0:1/fs:1; % 时间序列,1秒钟
f1 = 400; % 第一个信号频率为400Hz
f2 = 1000; % 第二个信号频率为1000Hz
x1 = sin(2*pi*f1*t); % 第一个信号
x2 = sin(2*pi*f2*t); % 第二个信号
x = x1 + x2; % 叠加两个信号
```
绘制时域波形:
```matlab
subplot(2,1,1);
plot(t, x);
xlabel('Time (s)');
ylabel('Amplitude');
title('Time domain waveform');
subplot(2,1,2);
plot(t, x1, 'r');
hold on;
plot(t, x2, 'g');
hold off;
xlabel('Time (s)');
ylabel('Amplitude');
title('Individual signals');
legend('Signal 1 (400Hz)', 'Signal 2 (1000Hz)');
```
绘制频谱图:
```matlab
N = length(x); % 信号长度
freqs = (0:N-1)*(fs/N); % 频率序列
X = abs(fft(x))/N; % 快速傅里叶变换(FFT)
X = X(1:N/2+1); % 取正频率部分
X(2:end-1) = 2*X(2:end-1); % 乘以2,除去直流分量
plot(freqs, 20*log10(X)); % dB单位的幅度谱
xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
title('Magnitude spectrum');
```
绘制声谱图:
```matlab
window = hann(1024); % 窗函数
noverlap = 512; % 帧与帧之间的重叠量
nfft = 2048; % 快速傅里叶变换点数
[S, F, T] = spectrogram(x, window, noverlap, nfft, fs);
imagesc(T, F, 20*log10(abs(S)));
axis xy;
xlabel('Time (s)');
ylabel('Frequency (Hz)');
title('Spectrogram');
```
阅读全文