clc ;
close all ;
clear all ;
t = 0 : 0.001 : 0.999 ;
fs = 150 ;
y = cos (2* pi * t * fs) ;
figure(1) ;
subplot(2,1,1) ;
plot(t ,y) ;
axis([0,1 -1.2 , 1.2 ]) ;
y_awgn = awgn(y , 20) ;
subplot(2,1,2) ;
plot(t ,y_awgn) ;
axis([0,1 -1.2 , 1.2 ]) ;
power_y = 0 ;
power_noise = 0 ;
y2 = zeros(1 , length(y)) ;
y3 = zeros(1 , length(y_awgn)) ;
for i = 1 : length(y) %累加求功率
y2(i) = y(i) ^2 ;
y3(i) = (y_awgn(i) - y(i)) ^2 ;
power_y = y2(i) + power_y ;
power_noise= power_noise + y3(i) ;
end
snr = 10 * log10(power_y / power_noise) ;
y_fft = fft(y , 1000) ; %算出FFT ,是 实部 + 虚部
y_fftshift = fftshift(y_fft) ;
f_c = 0 : 1 : 999 ;
f_c1 = -500 : 1 : 499 ;
figure(2) ;
subplot(2,1,1) ;
plot(f_c , y_fft) ;
subplot(2,1,2) ;
plot(f_c1 , y_fftshift) ;% 移到中心点
y_awgn_fft = fft(y_awgn , 1000) ;
y_awgn_fftshift = fftshift(y_awgn_fft) ;
figure(3) ;
subplot(2,1,1) ;
plot(f_c , y_awgn_fft ) ;
subplot(2,1,2) ;
plot(f_c1 , y_awgn_fftshift) ;
y_fft_value = y_fft .* conj(y_fft) ; %求功率,调用matlab函数 ,还有一种方法是平方,在下面有
y_awgn_noise_fft_value =( y_awgn_fft - y_fft ) .* conj( y_awgn_fft - y_fft );
y_add_fft_value = 0 ;
y_add_noise_value1 = 0 ;
for ii = 1 : 1000
y_add_fft_value = y_add_fft_value + y_fft_value(ii) ;
y_add_noise_value1 = y_awgn_noise_fft_value(ii) + y_add_noise_value1 ;
end
snr_fft = 10 * log10(y_add_fft_value / y_add_noise_value1 ) ;
real_y_fft = real(y_fft) ;%实部
imag_y_fft = imag(y_fft) ;%虚部
real_y_awgn_fft = real(y_awgn_fft) ;
imag_y_awgn_fft = imag(y_awgn_fft) ;
y_noise_fft_pingfang = 0 ;
y_fft_pingfang = 0 ;
y_awgn_fft_pingfang = 0 ;
for iii = 1 : 1000
y_fft_pingfang = real_y_fft(iii) ^2 + imag_y_fft(iii) ^2 + y_fft_pingfang ;
y_awgn_fft_pingfang = real_y_awgn_fft(iii) ^2 + imag_y_awgn_fft(iii) ^2 + y_awgn_fft_pingfang ;
y_noise_fft_pingfang = (real_y_awgn_fft(iii) - real_y_fft(iii)) ^2 + (imag_y_awgn_fft(iii) - imag_y_fft(iii)) ^ 2 + y_noise_fft_pingfang ;
end
snr_pingfang_fft = 10 * log10(y_fft_pingfang /y_noise_fft_pingfang ) ;