将无噪声信号与先进行FFT后再进行IFFT的重构信号比较实验中的信号添加随机噪声:x=sin(2*pi*40*t)+sin(2*pi*15*t)+ 5*randn(1,N),做对比实验,并绘制图形。求在matlab上运行的代码
时间: 2024-10-27 08:13:48 浏览: 13
使用MATLAB进行数字信号处理-第2部分-综合文档
在MATLAB中,你可以通过下面的步骤来进行这个实验,包括添加随机噪声、对信号进行傅里叶变换(FFT)、逆傅立叶变换(IFFT),以及最后比较原始信号和重构信号的图形:
首先,我们需要导入必要的库并生成一个包含正弦波和随机噪声的信号 `x`。
```matlab
% 初始化参数
fs = 1000; % 采样频率 (Hz)
t = 0:1/fs:1-1/fs; % 时间向量
N = length(t); % 总样本数
% 正弦波加噪声
f1 = 40; f2 = 15; % 频率
signal = sin(2*pi*f1*t) + sin(2*pi*f2*t) + 5*randn(1,N); % 原始信号加上随机噪声
```
接着,进行快速傅里叶变换(FFT):
```matlab
% FFT
X = fft(signal);
X_mag = abs(X/N); % 计算幅度谱,除以总样本数消除幅值偏移
freqs = (0:N-1)*(fs/N); % 创建频率轴
```
然后进行逆变换并比较:
```matlab
% IFFT重构信号
reconstructed_signal = ifft(X);
reconstructed_noiseless = real(ifft(X_mag.*exp(1i*angle(X)))); % 只保留实部,模拟无噪声信号
% 比较原始信号和重构信号
figure;
subplot(2,1,1), plot(t, signal, 'b', t, reconstructed_signal, 'r');
title('Original Signal vs Reconstructed Signal with Noise');
xlabel('Time (s)'), ylabel('Amplitude');
subplot(2,1,2), plot(freqs, X_mag, 'b', freqs, X_mag, 'r--');
hold on, plot(freqs, X_mag(1:end-1), 'g--'); % 线形连接频谱点显示无噪声谱
title('Magnitude Spectrum of Original Signal and Reconstructed Signal');
xlabel('Frequency (Hz)'), ylabel('Magnitude');
legend('Noisy Signal', 'Reconstructed Signal', 'Original Noiseless Signal');
hold off;
% 显示结果
disp('Experiment complete.');
阅读全文