My code keeps returning an error saying my signal-to-noise ratio must be a real scalar.
this is my code:
y=A.*exp((-(x-x_0).^2)./s);
% part a
A=100;
x=[-0.5:.01:.5-.01];
x_0=0;
s=1;
figure(2)
G=Gaussian(A,x,x_0,s);
plot(x,G)
% part b
n = rand(1,100);
Gnew1= y + 0*n;
Gnew2= y + 0.5*n;
Gnew3= y + 7.5*n;
Gnew4= y + 15*n;
figure(3)
w = awgn(x,n);
plot(x,G,x,w)
legend('Original Gaussian','Gaussian with Noise');
plot(x, Gnew1)
hold on
plot(x, Gnew2)
plot(x, Gnew3)
plot(x, Gnew4)
hold off
Here is the problem:
This problem deals with data fitting in the presence of noise.
a. Write a function Gaussian.m which will generate a 1D Gaussian function of the form y=A.*exp((-(x-x_0).^2)./s);, where s is the spread of the Gaussian, A is a constant factor and the mean x_0. The inputs to the function should be a vector of values (x), A, , and !. To test your function, plot the Gaussian corresponding to x= [-0.5:0.01:0.5-0.01], A = 100, s = 1, and x0= 0.
b. Add noise the Gaussian you generated above and plot the corresponding result. You may use the randn.m function in Matlab to generate a 100 random (noise) values between 0-1. Hence the new Gaussian function (Gnew = y + factor*noise) can be obtained. On the same graph, plot out Gnew for 4 different values of factor = {0.0, 0.5, 7.5, 15}.

댓글 수: 1

Walter Roberson
Walter Roberson 2015년 8월 8일
Please show the traceback of the error message. Which line is reporting that error?

댓글을 달려면 로그인하십시오.

 채택된 답변

Neo
Neo 2015년 8월 9일

0 개 추천

Does anyone know how to do part C for this problem?
C. Use the polyval and polyfit functions to fit polynomials of different degrees to the Gnew functions generated in (b) above. Fit 4 polynomials corresponding to degrees of 1, 2, 10, and 15 to Gnew for each value of factor (i.e. 0.0, 0.5, 7.5, 15). You should use the subplot function to generate 4 subplots on a single figure, each subplot corresponding to a different noise level.

댓글 수: 11

Walter Roberson
Walter Roberson 2015년 8월 9일
편집: Walter Roberson 2015년 8월 9일
degrees = [1 2 10 15];
for K = 1 : length(degrees)
degree = degrees(K);
pp = polyfit(x, Gnew, degree);
fit_Gnew{K} = polyval(x, pp);
end
Neo
Neo 2015년 8월 9일
How do I graph it then?
Nicole Bonino
Nicole Bonino 2015년 8월 9일
how did you write the code for part b for Gnew to keep it one variable. I have Gnew1, Gnew2, etc. for each noise factor. to use this code for part C I would need one Gnew variable.
Nicole Bonino
Nicole Bonino 2015년 8월 9일
I figure I must use a loop, but I can't seem to get it to work.
Neo
Neo 2015년 8월 9일
I am unsure of how to use just one Gnew variable either. Also can't figure out how to use Gnew = y + factor*noise cause if you manually put the values in for factor it keeps giving a size error
Nicole Bonino
Nicole Bonino 2015년 8월 9일
I used noise=rand(1,100) to get my noise values and then Gnew1=y+0*noise, Gnew2=y+.5*noise, etc. and it worked. But I don't know how to use that code I made with Gnew for part C. I also am unsure of how many figures it is asking for. I read it as 4 figures each with 4 subplots but I don't think that is right.
degrees = [1 2 10 15];
nd = length(degrees);
bvals = [0.0, 0.5, 7.5, 15];
nb = length(bvals);
for Kb = 1 : nb
b = bvals(Kb);
Gnew{Kb} = .....
end
for Kd = 1 : nd
subplot(nd, 1, Kd)
degree = degrees(Kd);
for Kb = 1 : nb
b = bvals(Kb)
pp = polyfit(x, Gnew{Kb}, degree);
fit_Gnew = polyval(x, pp);
plot(x, fit_Gnew);
hold on
end
end
Walter Roberson
Walter Roberson 2015년 8월 9일
4 subplots per figure, one per noise level. all of the different fitting degrees combined in the same subplot.
The code I show above does it the other way around, but you can easily switch the order of the statements.
Nicole Bonino
Nicole Bonino 2015년 8월 9일
편집: Nicole Bonino 2015년 8월 9일
how would you make the Gnew variable? right now I have 4 seperate Gnew variables for each noise factor so this code cant work for me unless I have a single Gnew factor. I've been trying to make a for loop but it keeps giving me an error saying my dimensions don't agree for the multiplication in the Gnew equation. this is what I have so far.
A=100;
x=[-0.5:.01:(.5-.01)];
x_0=0;
s=1;
y=A.*exp((-(x-x_0).^2)./s);
figure(2)
G = Gaussian(A, x, x_0, s);
plot(x,G)
title('Gaussian with Given Values')
xlabel('x-axis')
ylabel('y-axis')
% part b
noise = randn(10);
x=1;
n=[0, .5, 7.5, 15];
for x=1:1:length(n);
Gnew(n(x))=y+n*noise;
x=x+1;
end
noise = randn(size(y));
for Kb = 1 : nb
b = bvals(Kb);
Gnew{Kb} = y + b .* noise;
end
Image Analyst
Image Analyst 2015년 8월 9일
Put that code into a function. Then just call the function for each of the 4 Gnew variables that you have.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Walter Roberson
Walter Roberson 2015년 8월 8일

0 개 추천

y = awgn(x,snr) adds white Gaussian noise to the vector signal x. The scalar snr specifies the signal-to-noise ratio per sample, in dB.
But your code has
n = rand(1,100);
w = awgn(x,n);
so the value you pass in for the second parameter is a vector 1 x 100, where the awgn routine needs a scalar.

댓글 수: 1

Image Analyst
Image Analyst 2015년 8월 8일
Not to mention the fact that it said to use randn() - it didn't mention awgn(). Why do you want to use both? I'd use only the one noise addition function that you were told to use, and that is randn().

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Logical에 대해 자세히 알아보기

질문:

2015년 8월 8일

댓글:

2015년 8월 9일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by