5

When placing a frequency-dependent resistor in LTspice using the Laplace statement the result of an ac simulation (right circuit) looks fine:

enter image description here

However, when I use the same frequency-dependent resistor in a noise simulation (left circuit) the result is wrong (e.g. I would expect approx. 1 nV/sqrt(Hz) at 50 Hz):

enter image description here

Am I doing anything wrong or does LTspice just not support frequency-dependent resistors in a noise simulation?

Edit (s/sqrt(-1) instead of abs(s)):

The result is the same and still wrong. enter image description here

Charly
  • 650
  • 3
  • 14
  • The noise slope is also prop. to f and not sqrt(f) as it should be. What if you view a much higher freq. range (Ghz and above) ? Remove the opamp from the circuit for simplicity. – tobalt Sep 29 '22 at 18:06
  • You are right, the slope is also wrong and should be proportional to sqrt(f). However, even at much higher frequencies, the slope doesn't change. – Charly Sep 30 '22 at 18:41

3 Answers3

2

I asked the question in the LTspice forum of Analog Devices. Here is the response I got:

"A resistor with a "laplace" parameter is converted into a behavioral source. (By the way, a behavioral source acting like a variable resistor is actually not officially documented / supported. We do use it in our macro models, though.) The only noise contributed by such a source is the noise from its optional parallel resistance."

Charly
  • 650
  • 3
  • 14
  • The problem with that explanation is that a `Laplace` expression does *influence* the behaviour of the circuit, it acts as a filter whose transfer function is that which is given by its expression. And that's exactly what you have there: a `Laplace` expression trying to influence the circuit. Maybe the `.noise` analysis doesn't treat the behavioural resistor as a `Laplace` expression, even if it does, in whatever way (there clearly is an effect). The problem is I can't tell if the effect is true or not, so that's the real question, not if it works or not. – a concerned citizen Oct 25 '22 at 13:47
0

This looks like it can be done, I did not check to see if it gave meaningful results (because of time)

The first thing is you need to use an dependent source (or E source) to generate a "voltage", the voltage is simply a placeholder for the value, you then pipe this in to the resistor value with the R={V(vfreq)} command.

I used a different transfer function, the abs(s) should not be nessacary (or you should try not to use it by using sqrts and squaring.

enter image description here

Voltage Spike
  • 75,799
  • 36
  • 80
  • 208
  • OP is looking for a `.NOISE` simulation, not `.AC`. Either way, `Laplace` expressions work in behavioural resistors by themselves, just as in OP's schematics. – a concerned citizen Oct 01 '22 at 08:01
  • Your approach is basically identical to my approach, except that you use the controlled voltage source. I tried it, but the noise of the resistor in a .noise simulation is also wrong. – Charly Oct 06 '22 at 18:49
0

Don't forget that the noise at one frequency does not involve \$\Delta f\$. Therefore the noise should be \$\sqrt{4\cdot 1.38\cdot10^{-23}\cdot 300\cdot 1}\approx 128.7\;\text{pV/}\sqrt{\text{Hz}}\$ and, if you use a simple \$1\;\Omega\$ with .noise v(out) v1 list 50 you'll see:

V(onoise):   1.28748e-010

If you'll run a frequency sweep, you'll see a flat line of that value. And if you add the Laplace expression, you'll see that it's no longer flat, therefore it works.

I wouldn't use abs(s), though, as that would mean zero phase but, since this is .NOISE, it shouldn't matter. It will in .AC, though. If you only need ω then it's better to write s/sqrt(-1).

a concerned citizen
  • 21,167
  • 1
  • 20
  • 40
  • I added another screenshot where I used s/sqrt(-1) instead of abs(s). Unfortunately, the result is still the same. Of course, for a resistance of 1 Ohm, I would expect a voltage noise density of 128 pV/sqrt(Hz). However, as you can see above, the simulation result is distinctly lower (0.13 fV/sqrt(Hz) at 1 Hz). – Charly Oct 06 '22 at 19:15
  • @Charly As I said, in `.NOISE` there is no phase so `abs()` works just fine -- it's in `.AC` that you need to be careful. At any rate, for a variable R the noise formula involves an integral and, I'm sorry to say, I don't know it well enough to say more on this subject. Still, I wouldn't rush to point the finger at LTspice, just yet. – a concerned citizen Oct 07 '22 at 08:13