awgn 是未定義的變量或暫未實現(xiàn)的函數(shù)。
位于文件 D:\soft\Documents\baltamatica\信號處理2.m (第 16 行)
noisy_signal = awgn(signal, SNR, 'measured');
%% 信號處理綜合示例:生成/加噪/濾波/分析
clc; clear; close all;
% 基礎參數(shù)設置
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; % 濾波器階數(shù)
b = fir1(order, fc/(fs/2), 'low'); % 生成濾波器系數(shù)
%% 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秒細節(jié)
% 頻域對比
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低通濾波器頻率響應')
