我正在编写一个程序来添加具有零均值和单位方差的高斯噪声 不使用八度音中的内置函数的信号:
t=0:0.001:2;
x1=sin(2*pi*10*t);
x2=sin(2*pi*5*t)+sin(2*pi*50*t);
x3=x1+x2;
d=0;
L=length(x3);
for i = 1:L
d+=(abs(x3(i))^2);
endfor
Es=(1/L)*d;
SNR=20;
for i = 1:L
if (real(x3))
noise=sqrt(Es/SNR)*randn(1,L);
elseif (imag(x3))
noise=sqrt(Es/(2*SNR))*(randn(1,L)+(i*randn(1,L)));
endif
endfor
x4=x3+noise;
fs=1000;
N=1024;
y=fftshift(fft(x4,N));
fval=(fs/N)*(-N/2:N/2-1);
subplot(2,1,1);
plot(t,x4,'g');
xlabel('Time');
ylabel('Amplitude');
title('x4(t)');
subplot(2,1,2);
plot(fval,y,'b');
xlabel('Frequency');
ylabel('Amplitude');
title('X4(f):Frequency Response');
figure
subplot(2,1,1);
plot(fval,abs(y),'r');
xlabel('Frequency');
ylabel('Amplitude');
title('Amplitude Response');
subplot(2,1,2);
plot(fval,angle(y),'m');
xlabel('Frequency');
ylabel('Amplitude');
title('Phase Response');
但我无法解决一直出现的错误:
error: 'noise' undefined near line 27 column 7
如何解决此错误?
答案 0 :(得分:3)
您期望real(x3)
的逻辑价值是什么?这就是你要问的。这就像问如果苹果,做... 什么是 apple ?由于这不是二进制值,也不是imag(x3)
,因此您的if
语句将永远不会执行。目前尚不清楚您希望这个if
语句做什么,但可以按如下方式进行一些逻辑操作:
real(x3) > imag(x3)
real(x3) == imag(x3) % You might want to do this within tolerance
等
正如Andy提到的那样,您可能正在寻找x3
是真实的还是复杂的,从而修改您的if
语句,如下所示:
if isreal(x3)
noise=sqrt(Es/SNR)*randn(1,L);
else
noise=sqrt(Es/(2*SNR))*(randn(1,L)+(i*randn(1,L)));
endif
不同之处在于x3 = 4
,real(x3) = 4
,这不合逻辑,而isreal(x3) = true
。
代码存在很多问题,比如使用全新数组覆盖每个循环迭代的noise
变量,将复杂变量i
的循环索引i
误认为是错误的所以我建议你看一下适合MATLAB / Octave编程的基本tutolrial。