awgn 是未定义的变量或暂未实现的函数。
位于文件 D:\soft\Documents\baltamatica\信号处理2.m (第 16 行)
noisy_signal = awgn(signal, SNR, 'measured');
%% 信号处理综合示例:生成/加噪/滤波/分析
clc; clear; close all;
% 基础参数设置
fs = 1000; % 采样率1kHz
t = 0:1/fs:1; % 1秒时长信号
freq = [50, 120, 200]; % 多频信号成分
%% 1.生成原始信号(多频正弦组合)
signal = 0.5*sin(2*pi*freq(1)*t) + ...
1.2*sin(2*pi*freq(2)*t + pi/4) + ...
0.8*cos(2*pi*freq(3)*t);
%% 2.添加高斯白噪声
SNR = 15; % 信噪比设置
noisy_signal = awgn(signal, SNR, 'measured');
%% 3.FFT频谱分析
N = length(t);
f = (-N/2:N/2-1)*(fs/N); % 频率轴
% 原始信号频谱
fft_orig = fftshift(abs(fft(signal)/N));
% 加噪信号频谱
fft_noisy = fftshift(abs(fft(noisy_signal)/N));
%% 4.滤波器设计(FIR低通)
fc = 150; % 截止频率150Hz
order = 100; % 滤波器阶数
b = fir1(order, fc/(fs/2), 'low'); % 生成滤波器系数
%% 5.信号滤波处理
filtered_signal = filter(b, 1, noisy_signal);
% 滤波后信号频谱
fft_filtered = fftshift(abs(fft(filtered_signal)/N));
%% 6.结果可视化
figure('Color','w','Position',[100,100,800,600])
% 时域信号对比
subplot(3,1,1)
plot(t, signal, 'b', t, noisy_signal, 'r:', t, filtered_signal, 'g--')
legend('原始信号','加噪信号','滤波信号')
xlabel('时间 (s)'); ylabel('幅值'); title('时域信号对比')
xlim([0 0.1]) % 显示前0.1秒细节
% 频域对比
subplot(3,1,2)
plot(f, fft_orig, 'b', f, fft_noisy, 'r:')
legend('原始频谱','加噪频谱')
xlabel('频率 (Hz)'); ylabel('幅值'); title('频谱分析')
xlim([0 300])
subplot(3,1,3)
plot(f, fft_filtered, 'g')
legend('滤波后频谱')
xlabel('频率 (Hz)'); ylabel('幅值'); title('滤波效果')
xlim([0 300])
%% 附加:滤波器频率响应可视化
figure('Color','w')
freqz(b, 1, 1024, fs)
title('FIR低通滤波器频率响应')